Assignment DS Programming Week 5
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
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")