Assignment DS Programming Week 5

Logo

1 Dynamic Multi Formula Function

Grafik Perbandingan Formula

Penjelasan: Grafik ini menunjukkan hubungan antara nilai 𝑥 x dan hasil dari beberapa fungsi matematika, yaitu linear, kuadratik, kubik, dan eksponensial.

Fungsi linear meningkat secara konstan (garis lurus). Fungsi kuadratik membentuk kurva parabola yang semakin naik. Fungsi kubik menunjukkan perubahan yang lebih tajam dan tidak simetris. Fungsi eksponensial meningkat sangat cepat dibandingkan fungsi lainnya.

compute_formula <- function(x, type){
  if(type == "linear"){
    y <- 3*x + 2
  } else if(type == "quadratic"){
    y <- x^2 + 4*x + 1
  } else if(type == "cubic"){
    y <- x^3 - 2*x
  } else if(type == "exponential"){
    y <- 2^(x/5)
  }
  return(y)
}

x <- 1:20

plot(x, compute_formula(x,"linear"), type="l", col="blue",
     main="Perbandingan Formula", ylab="y", xlab="x")

lines(x, compute_formula(x,"quadratic"), col="red")
lines(x, compute_formula(x,"cubic"), col="green")
lines(x, compute_formula(x,"exponential"), col="purple")

legend("topleft",
       legend=c("Linear","Quadratic","Cubic","Exponential"),
       col=c("blue","red","green","purple"),
       lty=1)

2 Nested Simulation: Sales & Discounts

Grafik Cumulative Sales

Penjelasan:

Grafik ini menampilkan total penjualan kumulatif dari setiap salesperson selama beberapa hari.

Setiap garis mewakili satu salesperson. Nilai terus meningkat karena merupakan akumulasi dari penjualan harian. Perbedaan kemiringan garis menunjukkan tingkat performa masing-masing salesperson.

simulate_sales <- function(n_sales, days){
  result <- data.frame()
  
  for(i in 1:n_sales){
    total <- 0
    
    for(d in 1:days){
      sales <- sample(100:1000,1)
      
      if(sales > 800){
        discount <- 0.2
      } else if(sales > 500){
        discount <- 0.1
      } else {
        discount <- 0.05
      }
      
      total <- total + sales
      
      result <- rbind(result, data.frame(
        salesperson=i,
        day=d,
        sales=sales,
        discount=discount,
        cumulative=total
      ))
    }
  }
  return(result)
}

sales_data <- simulate_sales(4,10)
head(sales_data)

Plot cumulative sales:

plot(NULL, xlim=c(1,10), ylim=c(0,max(sales_data$cumulative)),
     xlab="Day", ylab="Cumulative Sales", 
     main="Cumulative Sales per Salesperson")

colors <- c("blue","red","green","purple")

for(i in 1:4){
  subset_data <- sales_data[sales_data$salesperson==i,]
  lines(subset_data$day, subset_data$cumulative, col=colors[i])
}

legend("topleft", legend=paste("Sales",1:4),
       col=colors, lty=1)

3 Performance Categorization

Grafik Distribusi Performa

Penjelasan:

Grafik batang ini menunjukkan jumlah data penjualan berdasarkan kategori performa. Kategori dibagi menjadi: Poor, Average, Good, Very Good, dan Excellent.

Kategori dengan batang tertinggi menunjukkan performa yang paling sering muncul. Distribusi ini membantu melihat apakah sebagian besar penjualan berada di level rendah atau tinggi.

categorize <- function(x){
  if(x > 800) return("Excellent")
  else if(x > 600) return("Very Good")
  else if(x > 400) return("Good")
  else if(x > 200) return("Average")
  else return("Poor")
}

sales_data$category <- sapply(sales_data$sales, categorize)

table(sales_data$category)
## 
##   Average Excellent      Good      Poor Very Good 
##         9        10         7         6         8
barplot(table(sales_data$category),
        col="lightblue",
        main="Distribusi Performa")

4 Multi-Company Dataset

Grafik Monte Carlo (Estimasi π)

Penjelasan:

Grafik ini menunjukkan simulasi Monte Carlo untuk menghitung nilai π.

Titik biru berada di dalam lingkaran. Titik merah berada di luar lingkaran. Nilai π dihitung dari perbandingan jumlah titik di dalam lingkaran terhadap total titik

generate_company <- function(n_company, n_employee){
  df <- data.frame()
  
  for(c in 1:n_company){
    for(e in 1:n_employee){
      df <- rbind(df, data.frame(
        company=c,
        employee=e,
        salary=sample(3000:10000,1),
        performance=runif(1,60,100),
        kpi=runif(1,50,100)
      ))
    }
  }
  return(df)
}

company_data <- generate_company(3,40)

aggregate(cbind(salary, performance, kpi) ~ company,
          data=company_data, mean)

5 Monte Carlo Simulation (Pi)

Histogram Before vs After (Normalisasi)

Penjelasan:

Histogram ini membandingkan distribusi data sebelum dan setelah normalisasi.

Grafik “Before” menunjukkan data asli dengan rentang besar. Grafik “After” menunjukkan data yang sudah dinormalisasi ke rentang 0–1

monte_carlo_pi <- function(n){
  x <- runif(n,-1,1)
  y <- runif(n,-1,1)
  
  inside <- x^2 + y^2 <= 1
  
  pi_est <- 4 * mean(inside)
  print(pi_est)
  
  plot(x, y, col=ifelse(inside,"blue","red"),
       main="Monte Carlo Pi")
}

monte_carlo_pi(1000)
## [1] 3.04

6 Data Transformation

Grafik Salary vs KPI

Penjelasan:

Grafik ini menunjukkan hubungan antara gaji (salary) dan KPI.

Setiap titik mewakili satu karyawan. Garis merah adalah garis regresi (trend). Jika garis naik, berarti ada hubungan positif antara salary dan KPI.

normalize <- function(x){
  return((x - min(x)) / (max(x) - min(x)))
}

company_data$salary_norm <- normalize(company_data$salary)

par(mfrow=c(1,2))
hist(company_data$salary, main="Before", col="gray")
hist(company_data$salary_norm, main="After", col="lightblue")

7 Mini Project Visualization

plot(company_data$salary, company_data$kpi,
     col=company_data$company,
     main="Salary vs KPI",
     xlab="Salary", ylab="KPI")

abline(lm(kpi ~ salary, data=company_data), col="red")

8 Automated Report

report <- aggregate(cbind(salary, kpi) ~ company,
                    data=company_data,
                    mean)

report
write.csv(report, "report.csv", row.names=FALSE)