Penjelasan Kode & Interactive Playground
Pelajari anatomi logika program inti pembersihan data baris demi baris. Anda dapat langsung memilih berbagai studi kasus materi kuliah, mengubah kode secara kustom, dan menjalankannya dengan keluaran terminal langsung.
[INFO] Klik tombol "Jalankan Kode" untuk mengeksekusi program dan melihat output analisis...
1. Pemuatan Dataset (Data Loading)
Fungsi pd.read_csv('insurance_raw.csv') memuat berkas tabular CSV ke dalam struktur data DataFrame di memori RAM komputer.
print(f"Dimensi data: {df_raw.shape[0]} baris x {df_raw.shape[1]} kolom")
Atribut .shape menghasilkan tuple (1338, 7) yang langsung memverifikasi integritas baris awal pasien sebelum dilakukan manipulasi data.
2. Inspeksi Struktur & Statistik Deskriptif (Data Inspection)
Memeriksa tipe data masing-masing kolom dan menghitung ringkasan statistik 5-angka (Minimum, Kuartil 1, Median, Kuartil 3, Maksimum).
df_raw.describe().round(2) # Menghitung mean, std, min, 25%, 50%, 75%, max
df_raw.describe(include=['object']) # Menghitung frekuensi data kategorikal (sex, smoker, region)
3. Pengecekan Missing Values (Data Kosong)
Fungsi .isnull().sum() menjumlahkan nilai boolean True pada setiap kolom untuk mendeteksi sel kosong.
total_missing = null_counts.sum() # Hasil: 0 nilai kosong
Karena nilai total missing = 0, tidak diperlukan imputasi buatan, sehingga keaslian distribusi data terjaga secara murni.
4. Deteksi & Eliminasi Duplikat (Duplicate Handling)
Metode df_raw.duplicated(keep=False) menandai seluruh baris yang memiliki nilai identik di semua kolom.
duplicate_rows = df_raw[df_raw.duplicated(keep=False)] # Terdeteksi baris 195 & 581
# 2. Hapus salah satu baris kembar dan buat salinan baru
df_clean = df_raw.drop_duplicates().copy() # Menghasilkan 1.337 baris
5. Algoritma Deteksi Outlier Interquartile Range (IQR)
Metode pemagaran Tukey menggunakan nilai kuartil untuk menetapkan batas atas dan batas bawah data normal.
Q3 = df_clean['charges'].quantile(0.75) # $16.639,91
IQR = Q3 - Q1 # $11.899,62
upper_bound = Q3 + 1.5 * IQR # $34.524,79
# Filter baris outlier
outliers = df_clean[df_clean['charges'] > upper_bound] # 139 baris (10,4%)
6. Rekayasa Fitur & Diskretisasi Kategori WHO (pd.cut)
Fungsi pd.cut() membagi data angka kontinu menjadi interval diskret (binning) berdasarkan batas acuan medis.
bmi_labels = ['Underweight', 'Normal', 'Overweight', 'Obese']
df_clean['bmi_category'] = pd.cut(df_clean['bmi'], bins=bmi_bins, labels=bmi_labels)
7. Penyimpanan Multi-Sheet Excel (pd.ExcelWriter)
Menyimpan hasil data bersih dan ringkasan agregasi terpisah ke dalam satu berkas spreadsheet menggunakan engine openpyxl.
df_clean.to_excel(writer, sheet_name='Data_Bersih', index=False)
summary_smoker.to_excel(writer, sheet_name='Ringkasan_Merokok')
summary_bmi.to_excel(writer, sheet_name='Ringkasan_BMI')
summary_age.to_excel(writer, sheet_name='Ringkasan_Usia')