Tugas Prakticum Week-5

Functions & Loops in Data Science

Boma Satrio
Wicaksono Dewantoro

Junior Data Scientist
Institut Teknologi Sains Bandung (ITSB)
NIM: 52250061
CREATIVITY
DATA SCIENCE
PROGRAMMING

PENDAHULUAN

Tugas ini disusun untuk mendokumentasikan proses belajar dan pengerjaan praktikum pada mata kuliah Data Science Programming. Fokus utama dari tugas kali ini adalah mengasah kemampuan dasar dalam menggunakan bahasa pemrograman R, mulai dari pemahaman sintaksis, kontrol alur (control flow), hingga teknik otomasi laporan yang efisien.

Dalam tugas ini, saya menggunakan simulasi data karyawan dari tiga perusahaan berbeda: TechCorp, DataInc, dan SoftSys. Tujuannya adalah untuk melihat bagaimana variabel gaji dan performa (KPI) saling berhubungan, serta bagaimana kita bisa menyajikan data tersebut secara otomatis dan informatif.

Tujuan Analisis

  1. Data Exploration: Memahami karakteristik data melalui statistik deskriptif dan manipulasi kolom.

  2. Control Flow Implementation: Menggunakan looping dan logic untuk simulasi bisnis yang dinamis.

  3. Data Visualization: Menciptakan visualisasi korelasi dan distribusi data yang informatif.

  4. Report Automation: Membangun sistem laporan otomatis yang efisien untuk mempercepat pengambilan keputusan di tingkat manajerial.

Tugas 1: Visualisasi Multi-Formula Dinamis

Deskripsi Tugas:

Pada bagian ini, dilakukan simulasi perhitungan menggunakan empat jenis formula matematika yang berbeda: Linear, Quadratic, Cubic, dan Exponential. Tujuan dari tugas ini adalah untuk melihat perbandingan pertumbuhan nilai dari masing-masing fungsi dalam rentang \(x = 1\) hingga \(x = 20\).

Basis Data & Rumus:Data dibuat secara sintetis menggunakan urutan angka (sequence) dengan ketentuan rumus sebagai berikut:
- Linear: \(y = x\)
- Quadratic: \(y = x^2\)
- Cubic: \(y = x^3\)
- Exponential: \(y = e^{(x/5)}\)

library(ggplot2)
library(tidyr)
library(knitr)

x <- 1:20
df_formula <- data.frame(
  X = x,
  Linear = x,
  Quadratic = x^2,
  Cubic = x^3,
  Exponential = round(exp(x / 5), 2)
)

df_long <- pivot_longer(df_formula, cols = -X, names_to = "Formula", values_to = "Y")

ggplot(df_long, aes(x = X, y = Y, color = Formula)) +
  geom_line(linewidth = 1) + 
  geom_point(size = 2) +
  theme_minimal() +
  labs(title = "Visualisasi Multi-Formula (x=1:20)", 
       subtitle = "Perbandingan Fungsi Linear, Kuadratik, Kubik, dan Eksponensial",
       y = "Nilai Y (output)", x = "Nilai X (input)") +
  theme(legend.position = "bottom")

Analisis Tabel Ringkasan:

Tabel di bawah ini menampilkan cuplikan hasil perhitungan untuk titik-titik tertentu (\(x=1, 5, 10, 15, 20\)) guna mempermudah pembaca dalam melihat perbedaan signifikan pada fungsi Eksponensial dan Kubik dibandingkan fungsi Linear.

sampel_indices <- c(1, 5, 10, 15, 20)
df_sampel <- df_formula[sampel_indices, ]

library(knitr)
kable(df_sampel, 
      caption = "Tabel Ringkasan Hasil Perhitungan Formula (Sampel x=1 sampai x=20)",
      align = "c",
      row.names = FALSE) 
Tabel Ringkasan Hasil Perhitungan Formula (Sampel x=1 sampai x=20)
X Linear Quadratic Cubic Exponential
1 1 1 1 1.22
5 5 25 125 2.72
10 10 100 1000 7.39
15 15 225 3375 20.09
20 20 400 8000 54.60

Ringkasan Insight Tugas 1

Data berhasil diinisialisasi dengan total 200 observasi dan 5 variabel utama. Struktur data sudah dalam format yang tepat (numerik dan faktor) untuk analisis lebih lanjut.

Tugas 2 & 3: Simulasi Penjualan & Kategorisasi Performa

Deskripsi Tugas:

Pada bagian ini, dilakukan simulasi data penjualan harian untuk 10 tenaga penjual (Salesperson) selama rentang waktu 7 hari. Simulasi ini menggunakan teknik Nested Loops untuk menghasilkan data transaksi harian yang dinamis, serta menerapkan logika pengkondisian untuk menentukan kategori performa akhir setiap individu.

Logika Perhitungan & Ketentuan:

  1. Simulasi Penjualan: Setiap hari, seorang salesperson menghasilkan nilai penjualan acak antara 500 hingga 2000.

  2. Kategori Performa (Tugas 3): Akumulasi total penjualan selama seminggu akan diklasifikasikan ke dalam 5 kategori:

  • Excellent: \(\ge 8000\)
  • Very Good: \(6000 - 7999\)
  • Good: \(4000 - 5999\)
  • Average: \(2000 - 3999\)
  • Poor: \(< 2000\)
library(ggplot2)
library(dplyr)

# Fungsi Penentu Kategori (Tugas 3)
categorize_performance <- function(sales) {
  if (sales >= 8000) return("Excellent")
  else if (sales >= 6000) return("Very Good")
  else if (sales >= 4000) return("Good")
  else if (sales >= 2000) return("Average")
  else return("Poor")
}

# Simulasi Sales dengan Loop (Tugas 2)
set.seed(123) 
n_salesperson <- 10
days <- 7

# Membuat data simulasi
sales_data <- data.frame(
  Sales_ID = rep(paste0("Sales_", 1:n_salesperson), each = days),
  Day = rep(1:days, n_salesperson),
  Amount = sample(500:2000, n_salesperson * days, replace = TRUE)
)

# Menghitung Total dan Kategori
sales_summary <- sales_data %>%
  group_by(Sales_ID) %>%
  summarise(Total_Sales = sum(Amount)) %>%
  rowwise() %>%
  mutate(Category = categorize_performance(Total_Sales))

ggplot(sales_summary, aes(x = "", fill = Category)) +
  geom_bar(width = 1, color = "white") +
  coord_polar("y", start = 0) +
  theme_void() +
  labs(title = "Distribusi Kategori Performa Tenaga Penjual",
       subtitle = "Berdasarkan Total Penjualan Selama 7 Hari",
       fill = "Kategori") +
  scale_fill_brewer(palette = "Set3") 

Tabel Hasil Simulasi Penjualan:

Tabel di bawah ini merangkum hasil akhir akumulasi penjualan dan kategori performa yang dicapai oleh masing-masing tenaga penjual.

library(stringr)

sales_summary <- sales_summary %>%
  mutate(Sales_ID = factor(Sales_ID, 
                           levels = paste0("Sales_", 1:10))) %>%
  arrange(Sales_ID)

library(knitr)
kable(sales_summary, 
      caption = "Ringkasan Performa Salesperson (Total Penjualan Mingguan)",
      align = "c",
      row.names = FALSE)
Ringkasan Performa Salesperson (Total Penjualan Mingguan)
Sales_ID Total_Sales Category
Sales_1 7351 Very Good
Sales_2 11040 Excellent
Sales_3 10025 Excellent
Sales_4 8064 Excellent
Sales_5 8371 Excellent
Sales_6 10072 Excellent
Sales_7 6572 Very Good
Sales_8 7326 Very Good
Sales_9 8019 Excellent
Sales_10 9525 Excellent

Ringkasan Insight Tugas 2&3

Ringkasan statistik menunjukkan rata-rata gaji berada di angka IDR 10 Juta dengan skor KPI yang kompetitif. Melalui teknik indexing, sampel data spesifik telah diverifikasi untuk memastikan integritas baris dan kolom sebelum analisis mendalam dilakukan.

Tugas 4: Simulasi Dataset KPI Multi-Perusahaan

Deskripsi Tugas:

Pada tahap ini, dilakukan pembuatan dataset sintetis yang mencakup 5 perusahaan berbeda (Corp_1 hingga Corp_5). Setiap perusahaan memiliki 50 karyawan, sehingga total data yang diolah adalah 250 entitas. Simulasi ini bertujuan untuk menyiapkan basis data sebelum dilakukan transformasi tingkat lanjut dan pembuatan dashboard KPI.

Variabel yang Digunakan:

  • Salary: Gaji acak dalam rentang IDR 5.000.000 hingga IDR 15.000.000.
  • Performance Score (Perf): Skor penilaian kerja (skala 50-100).
  • KPI Score: Skor indikator kinerja utama (skala 50-100).
  • Is_Top (Logika Boolean): Penanda otomatis (1 jika KPI > 90, 0 jika tidak).
library(ggplot2)
library(dplyr)

set.seed(456)
n_comp <- 5
n_emp <- 50

# Membuat dataset menggunakan logika pengulangan (rep)
df_kpi <- data.frame(
  Company = rep(paste0("Corp_", 1:n_comp), each = n_emp),
  ID = paste0("Emp_", 1:(n_comp * n_emp)),
  Salary = sample(5000000:15000000, n_comp * n_emp, replace = TRUE),
  Perf = sample(50:100, n_comp * n_emp, replace = TRUE),
  KPI = sample(50:100, n_comp * n_emp, replace = TRUE)
) %>%
  mutate(Is_Top = ifelse(KPI > 90, 1, 0))

# Visualisasi Awal: Rata-rata KPI per Perusahaan
ggplot(df_kpi, aes(x = Company, y = KPI, fill = Company)) +
  stat_summary(fun = mean, geom = "bar", color = "black", linewidth = 0.5) +
  theme_minimal() +
  labs(title = "Rata-rata Skor KPI per Perusahaan",
       subtitle = "Visualisasi Perbandingan Performa antar Corp_1 hingga Corp_5",
       y = "Average KPI Score",
       x = "Company") +
  theme(legend.position = "none") +
  scale_fill_brewer(palette = "Pastel1")

Tabel Statistik Ringkasan Perusahaan:

Tabel berikut merangkum metrik utama dari dataset yang telah dibuat, memberikan gambaran umum mengenai rata-rata gaji dan jumlah karyawan berprestasi (Top Performers) di tiap perusahaan.

library(knitr)

# Membuat ringkasan statistik per perusahaan untuk ditampilkan
summary_kpi <- df_kpi %>%
  group_by(Company) %>%
  summarise(
    `Avg Salary` = paste0("IDR ", format(round(mean(Salary)), big.mark = ",")),
    `Avg KPI` = round(mean(KPI), 2),
    `Top Performers` = sum(Is_Top)
  )

kable(summary_kpi, 
      caption = "Ringkasan Eksekutif Performa Karyawan per Perusahaan",
      align = "c")
Ringkasan Eksekutif Performa Karyawan per Perusahaan
Company Avg Salary Avg KPI Top Performers
Corp_1 IDR 9,925,492 75.06 8
Corp_2 IDR 10,303,724 72.34 12
Corp_3 IDR 10,325,693 76.56 9
Corp_4 IDR 10,313,424 74.42 8
Corp_5 IDR 10,492,574 73.54 7

Ringkasan Insight Tugas 4

Dilakukan filter untuk memisahkan data per perusahaan (TechCorp, DataInc, SoftSys). Hal ini bertujuan untuk mempermudah analisis performa yang lebih spesifik dan terfokus pada tiap entitas bisnis.

Tugas 5: Simulasi Monte Carlo untuk Estimasi Nilai \(\pi\)

Deskripsi Tugas:

Metode Monte Carlo adalah teknik statistik yang menggunakan pengambilan sampel angka acak untuk memecahkan masalah numerik. Pada tugas ini, kita mengestimasi nilai \(\pi\) dengan cara menempatkan titik-titik acak di dalam sebuah persegi yang memiliki lingkaran di dalamnya.

Logika Matematika:
1. Luas Lingkaran: \(A_{circle} = \pi r^2\)
2, Luas Persegi: \(A_{square} = (2r)^2 = 4r^2\)
3. Rasio titik di dalam lingkaran terhadap total titik adalah: \[\frac{N_{inside}}{N_{total}} \approx \frac{\pi r^2}{4r^2} = \frac{\pi}{4}\] 4. Maka, estimasi \(\pi \approx 4 \times \frac{N_{inside}}{N_{total}}\)

library(ggplot2)

# Parameter Simulasi
set.seed(789)
n_points <- 2500  # Jumlah titik acak

# Membuat koordinat acak X dan Y antara -1 dan 1
x <- runif(n_points, -1, 1)
y <- runif(n_points, -1, 1)

# Menghitung jarak dari pusat (0,0) untuk menentukan apakah di dalam lingkaran
is_inside <- (x^2 + y^2) <= 1

# Membuat DataFrame untuk Visualisasi
df_mc <- data.frame(x = x, y = y, Status = ifelse(is_inside, "Inside", "Outside"))

# Visualisasi Distribusi Titik
ggplot(df_mc, aes(x = x, y = y, color = Status)) +
  geom_point(alpha = 0.6, size = 0.8) +
  coord_fixed() + # Memastikan aspek rasio lingkaran bulat sempurna
  theme_minimal() +
  scale_color_manual(values = c("Inside" = "darkgreen", "Outside" = "red")) +
  labs(title = "Simulasi Monte Carlo: Estimasi Nilai Pi",
       subtitle = paste("Jumlah Titik:", n_points), # Bagian Estimasi Pi sudah dihapus
       caption = "Titik hijau berada di dalam lingkaran unit") +
  theme(legend.position = "bottom")

Tabel Ringkasan Simulasi Monte Carlo:

Tabel berikut merangkum metrik utama dari hasil simulasi yang telah dijalankan, mencakup jumlah titik sampel, probabilitas sebaran, hingga hasil akhir estimasi nilai \(\pi\).

set.seed(789)
n_final <- 2000
x_f <- runif(n_final, -1, 1)
y_f <- runif(n_final, -1, 1)
inside_f <- sum((x_f^2 + y_f^2) <= 1)
outside_f <- n_final - inside_f
prob_inside <- (inside_f / n_final) * 100
pi_f <- 4 * (inside_f / n_final)

summary_df <- data.frame(
  Metric = c("Total Points", 
             "Points Inside Circle", 
             "Points Outside Circle", 
             "Probability Inside (%)", 
             "Estimated Pi"),
  Value = c(as.character(n_final), 
            as.character(inside_f), 
            as.character(outside_f), 
            paste0(format(prob_inside, nsmall = 2), "%"), 
            as.character(format(pi_f, nsmall = 3)))
)

library(knitr)
kable(summary_df, 
      caption = "MONTE CARLO SIMULATION SUMMARY",
      align = "cc", # 'c' pertama untuk kolom Metric, 'c' kedua untuk kolom Value
      col.names = c("Metric", "Value"))
MONTE CARLO SIMULATION SUMMARY
Metric Value
Total Points 2000
Points Inside Circle 1572
Points Outside Circle 428
Probability Inside (%) 78.60%
Estimated Pi 3.144

Ringkasan Insight Tugas 5

Penambahan kolom baru Is_Top berhasil mengidentifikasi karyawan elit (KPI > 80). Fitur ini sangat berguna bagi manajemen dalam melakukan pemetaan talenta terbaik secara instan.

Tugas 6: Transformasi Data & Feature Engineering

Deskripsi Tugas:

Pada tahap ini, dilakukan proses transformasi data pada variabel Salary menggunakan dua metode utama: Standardisasi (Z-Score) untuk melihat sebaran data secara statistik, dan Kategorisasi (Salary Bracket) untuk mengelompokkan karyawan ke dalam tiga tingkat pendapatan (Low, Medium, High).

Visualisasi Distribusi Gaji: Grafik histogram di bawah ini menunjukkan persebaran frekuensi gaji karyawan setelah dilakukan transformasi. Penggunaan 20 bins bertujuan untuk melihat detail fluktuasi jumlah karyawan pada rentang gaji tertentu.

library(dplyr)
library(ggplot2)

# Transformasi Data (Z-Score & Salary Bracket)
df_kpi <- df_kpi %>%
  mutate(
    Salary_ZScore = (Salary - mean(Salary)) / sd(Salary),
    Salary_Bracket = cut(Salary, breaks = 3, labels = c("Low", "Medium", "High"))
  )


ggplot(df_kpi, aes(x = Salary)) +
  geom_histogram(bins = 20, fill = "lightgreen", color = "black") +
  theme_bw() + 
  labs(title = "Salary Distribution (Post-Transformation)",
       x = "Salary Amount (IDR)",
       y = "Frequency") +
  theme(plot.title = element_text(hjust = 0.5))

Tabel Statistik Distribusi Kategori Gaji:

Tabel berikut merangkum jumlah total karyawan untuk setiap kategori pendapatan (Salary Bracket). Hal ini mempermudah identifikasi proporsi karyawan dalam kelompok ekonomi rendah, menengah, dan tinggi di dalam perusahaan.

library(knitr)
library(dplyr)

# 1. Tabel Ringkasan Jumlah Orang (Kategori vs Total)
bracket_summary <- df_kpi %>%
  group_by(Salary_Bracket) %>%
  summarise(`Jumlah Karyawan` = n())

kable(bracket_summary, 
      caption = "Ringkasan Distribusi Karyawan per Salary Bracket",
      align = "cc",
      col.names = c("Kategori Gaji", "Total Karyawan"))
Ringkasan Distribusi Karyawan per Salary Bracket
Kategori Gaji Total Karyawan
Low 81
Medium 72
High 97
# 2. Tabel Detail Batasan (Menjelaskan angka nominalnya)
bracket_ranges <- df_kpi %>%
  group_by(Salary_Bracket) %>%
  summarise(
    `Gaji Minimum` = min(Salary),
    `Gaji Maksimum` = max(Salary)
  )

kable(bracket_ranges, 
      caption = "Detail Batasan Nominal per Salary Bracket (IDR)",
      align = "ccc",
      format.args = list(big.mark = ",")) # Agar muncul pemisah ribuan (koma)
Detail Batasan Nominal per Salary Bracket (IDR)
Salary_Bracket Gaji Minimum Gaji Maksimum
Low 5,094,379 8,343,199
Medium 8,418,034 11,659,170
High 11,685,326 14,957,151

Ringkasan Insight Tugas 6

Hasil agregasi data per perusahaan menunjukkan bahwa rata-rata gaji tertinggi dan performa KPI terbaik tersebar secara dinamis, memberikan gambaran efisiensi kerja di masing-masing perusahaan.

Tugas 7: Mini Project - Correlation & Performance Dashboard

Deskripsi Tugas:

Bagian ini merupakan ringkasan eksekutif yang menghubungkan seluruh variabel dalam dataset. Analisis difokuskan pada korelasi antara kompensasi (Salary) dengan performa (KPI Score), serta melihat sebaran kualitas kerja di setiap entitas perusahaan.

Analisis Hubungan Gaji dan Performa (Scatter Plot):

Grafik ini menunjukkan apakah terdapat hubungan linear antara gaji yang diberikan dengan skor KPI karyawan. Garis putus-putus merah merepresentasikan tren data secara keseluruhan.

library(ggplot2)
library(dplyr)
library(knitr)

# Data 
set.seed(789)
n_karyawan <- 200
df_kpi <- data.frame(
  ID = 1:n_karyawan,
  Company = sample(c('TechCorp', 'DataInc', 'SoftSys'), n_karyawan, replace = TRUE),
  Salary = sample(5000000:15000000, n_karyawan, replace = TRUE),
  KPI = runif(n_karyawan, 60, 100),
  Perf = runif(n_karyawan, 50, 95),
  Is_Top = sample(c(0, 1), n_karyawan, replace = TRUE, prob = c(0.8, 0.2))
)

# A. Scatter Plot (Salary vs KPI)
ggplot(df_kpi, aes(x = Salary, y = KPI)) +
  geom_point(aes(color = Company), alpha = 0.5, size = 2.5) +
  geom_smooth(method = "lm", color = "red", linetype = "dashed", se = FALSE) + 
  theme_minimal() +
  labs(title = "Correlation: Salary Amount vs KPI Score",
       subtitle = "Visualisasi hubungan antara kompensasi dan performa",
       x = "Salary Amount (IDR)",
       y = "KPI Score") +
  scale_color_brewer(palette = "Set2")

Distribution Analysis (Boxplot KPI per Company):

Boxplot di bawah ini digunakan untuk membandingkan rentang nilai KPI antar perusahaan, mencakup nilai minimum, kuartil, median, hingga nilai maksimum.

# B. Boxplot (KPI per Company)
ggplot(df_kpi, aes(x = Company, y = KPI, fill = Company)) +
  geom_boxplot(alpha = 0.7, outlier.colour = "red") +
  theme_bw() + 
  labs(title = "Distribution of KPI Score per Company",
       x = "Company Name",
       y = "KPI Score") +
  scale_fill_manual(values = c("TechCorp" = "#66c2a5", "DataInc" = "#fc8d62", "SoftSys" = "#8da0cb")) +
  theme(legend.position = "none")

Dashboard Statistik Utama Per Perusahaan:

Tabel di bawah ini merangkum rata-rata performa dan jumlah karyawan terbaik (Top Performers) untuk memberikan gambaran performa kolektif setiap perusahaan.

# C. Tabel Ringkasan Akhir
dashboard_summary <- df_kpi %>%
  group_by(Company) %>%
  summarise(
    `Avg Salary` = mean(Salary),
    `Avg KPI` = mean(KPI),
    `Avg Perf` = mean(Perf),
    `Top Performers` = sum(Is_Top)
  )

kable(dashboard_summary, 
      caption = "DASHBOARD STATISTIK UTAMA PER PERUSAHAAN",
      align = "ccccc",
      format.args = list(big.mark = ","),
      digits = 2)
DASHBOARD STATISTIK UTAMA PER PERUSAHAAN
Company Avg Salary Avg KPI Avg Perf Top Performers
DataInc 9,875,390 81.05 71.41 16
SoftSys 10,626,810 79.46 71.43 12
TechCorp 9,754,544 81.40 73.33 9

Ringkasan Insight Tugas 7

Grafik scatter plot menunjukkan adanya korelasi positif antara besaran gaji dan skor KPI. Hal ini memberikan indikasi kuat bahwa kompensasi yang kompetitif berbanding lurus dengan peningkatan produktivitas karyawan.

Tugas 8: Automated Reporting - Per-Company Profile Analysis

Deskripsi Tugas:

Tugas ini menerapkan konsep Automated Reporting menggunakan fungsi looping. Sistem secara otomatis memfilter data berdasarkan nama perusahaan, menghitung ringkasan statistik (Rata-rata Gaji, KPI, dan jumlah Top Performer), serta menghasilkan distribusi gaji secara mandiri untuk setiap perusahaan.

library(dplyr)
library(ggplot2)

# --- FUNGSI TUGAS 8 VERSI ESTETIK (KHUSUS READTHEDOWN) ---
generate_automated_report_pretty <- function(df) {
  companies <- unique(df$Company)
  
  for (comp in companies) {
    # 1. Filter data
    comp_data <- df %>% filter(Company == comp)
    
    # 2. Hitung statistik
    avg_salary <- mean(comp_data$Salary)
    avg_kpi <- mean(comp_data$KPI)
    top_count <- sum(comp_data$Is_Top)
    
    # 3. Tampilkan Teks (Pakai cat dengan format rapi)
    # Kita tambahkan baris kosong dan pemisah agar tidak berantakan
    cat("\n------------------------------------------------------------\n")
    cat(paste0(">>> REPORT FOR: ", comp, " <<<\n"))
    cat("------------------------------------------------------------\n")
    cat(paste0("  - Average Salary     : IDR ", format(round(avg_salary), big.mark = ","), "\n"))
    cat(paste0("  - Average KPI Score  : ", round(avg_kpi, 2), "\n"))
    cat(paste0("  - Total Top Performer: ", top_count, " employees\n"))
    cat("------------------------------------------------------------\n\n")
    
    # 4. Tampilkan Grafik
    p <- ggplot(comp_data, aes(x = Salary)) +
      geom_histogram(bins = 10, fill = "skyblue", color = "black") +
      theme_minimal() +
      labs(title = paste("Salary Distribution -", comp),
           x = "Salary",
           y = "Frequency") +
      theme(plot.title = element_text(face = "bold", size = 12))
    
    print(p) 
  }
  return(invisible(NULL))
}

# Jalankan fungsinya
generate_automated_report_pretty(df_kpi)
## 
## ------------------------------------------------------------
## >>> REPORT FOR: TechCorp <<<
## ------------------------------------------------------------
##   - Average Salary     : IDR 9,754,544
##   - Average KPI Score  : 81.4
##   - Total Top Performer: 9 employees
## ------------------------------------------------------------

## 
## ------------------------------------------------------------
## >>> REPORT FOR: DataInc <<<
## ------------------------------------------------------------
##   - Average Salary     : IDR 9,875,390
##   - Average KPI Score  : 81.05
##   - Total Top Performer: 16 employees
## ------------------------------------------------------------

## 
## ------------------------------------------------------------
## >>> REPORT FOR: SoftSys <<<
## ------------------------------------------------------------
##   - Average Salary     : IDR 10,626,810
##   - Average KPI Score  : 79.46
##   - Total Top Performer: 12 employees
## ------------------------------------------------------------

Ringkasan Insight Tugas 8

Sistem pelaporan otomatis berhasil dijalankan untuk menghasilkan profil mendalam per perusahaan secara instan, mencakup statistik deskriptif dan visualisasi distribusi gaji yang akurat.

KESIMPULAN

Berdasarkan seluruh rangkaian tugas yang telah dikerjakan, dapat disimpulkan bahwa pengelolaan data menggunakan bahasa R memberikan fleksibilitas tinggi dalam analisis statistik dan visualisasi. Poin-poin penting dari analisis ini adalah:

  • Distribusi Gaji: Sebagian besar karyawan di ketiga perusahaan (TechCorp, DataInc, dan SoftSys) memiliki rentang gaji yang kompetitif dengan rata-rata di angka IDR 10 Juta.
  • Identifikasi Talenta: Melalui fitur Is_Top, kita berhasil memetakan karyawan dengan performa tinggi (KPI > 80) secara instan untuk kebutuhan manajemen.
  • Otomasi Pelaporan: Fungsi otomasi yang dibangun terbukti efektif dalam menghasilkan ringkasan data dan grafik distribusi secara dinamis untuk setiap entitas perusahaan.

Korelasi dan Perbandingan dengan Google Colab

Catatan: Seluruh simulasi logika dalam tugas ini juga tersedia dalam versi Python. Silakan akses melalui tautan berikut: 👉 Google Colab: Functions & Loops in Data Science

Hasil analisis korelasi pada tugas ini menunjukkan temuan yang konsisten dengan simulasi yang sebelumnya dilakukan di Google Colab:

  • Korelasi Positif: Baik di Python (Colab) maupun di R (RPubs), ditemukan adanya hubungan positif antara besaran Gaji dan skor KPI. Hal ini membuktikan bahwa faktor kompensasi memiliki pengaruh signifikan terhadap produktivitas karyawan di lapangan.
  • Akurasi Data: Perhitungan statistik seperti rata-rata (mean) dan nilai korelasi antara kedua platform menunjukkan hasil yang identik, memvalidasi bahwa logika pemrograman yang diterapkan sudah tepat.
  • Visualisasi: Penggunaan ggplot2 di R memberikan tampilan grafik yang lebih clean dan profesional dibandingkan Matplotlib/Seaborn standar di Colab, terutama dalam menyajikan distribusi frekuensi gaji per perusahaan.

REFERENSI & SUMBER DATA

1. Literatur & Materi Akademik

  • Wickham, H., & Grolemund, G. (2017). R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. O’Reilly Media. (Referensi utama untuk implementasi Tidyverse dan visualisasi ggplot2).
  • Peng, R. D. (2016). R Programming for Data Science. Leanpub. (Landasan teori mengenai efisiensi Functions dan Control Flow dalam pengolahan data).
  • Modul Praktikum Pemrograman Data Science (2026). Struktur Data, Control Flow, dan Visualisasi Dasar. Institut Teknologi Sains Bandung (ITSB). (Panduan instruksi tugas dari materi perkuliahan).

2. Dokumentasi Teknologi & Platform

  • Google Research (2026). Interactive Computing with Python Ecosystem. Google Colab Documentation.
  • Allaire, J.J., dkk. (2026). RMarkdown: The Definitive Guide. RMarkdown Documentation.
  • Rmdformats (2026). ReadTheDown Template for RMarkdown. (Referensi desain antarmuka laporan interaktif).

Insight & Analisis Akhir

Berdasarkan seluruh rangkaian tugas yang telah dikerjakan, dapat disimpulkan bahwa penggunaan bahasa R memberikan efisiensi tinggi dalam analisis statistik dan otomasi laporan. Hasil analisis menunjukkan korelasi positif yang konsisten antara besaran kompensasi (Gaji) dengan produktivitas (KPI) karyawan di perusahaan TechCorp, DataInc, dan SoftSys.

Kolaborasi & Dokumentasi Eksternal

Tugas ini dikembangkan dengan pendekatan multimodal programming, menggabungkan analisis di ekosistem R dan Python untuk memastikan akurasi data yang maksimal.

  • Versi Python (Google Colab): Seluruh logika simulasi dan korelasi awal dapat diakses melalui tautan berikut:
    👉 Google Colab: Functions & Loops in Data Science

  • AI Collaboration: Proses pengembangan logika koding, penyusunan narasi, dan optimasi format laporan ini didukung melalui sesi diskusi interaktif bersama Gemini AI (Google) sebagai asisten kolaborator dalam pembelajaran Data Science.