Tujuan Pembelajaran
Setelah mengikuti pertemuan ini, mahasiswa diharapkan mampu menerapkan konsep dan keterampilan berikut secara mandiri.
- Mendeteksi dan menangani nilai yang hilang (missing values).
- Menghapus duplikasi baris pada data.
- Mengubah data kategorikal menjadi numerik dengan encoding.
- Menyusun data bersih sebagai dasar model machine learning.
Data mentah dari lapangan hampir selalu kotor: ada sel kosong, baris tercatat dua kali, atau kolom teks yang tidak bisa langsung diproses algoritma. Tahap membersihkan dan menyiapkan data disebut preprocessing. Kualitas model ditentukan oleh kualitas data, sehingga langkah ini wajib dilakukan dengan telitiMenjelaskan bahwa hampir tidak ada dataset mentah yang langsung siap dipakai. Produksi pembersihan data sering memakan porsi terbesar dari seluruh waktu proyek, jauh lebih besar daripada waktu melatih model itu sendiri.
Menangani Nilai Hilang
Nilai hilang muncul sebagai NaN (Not a Number). Strategi pertama adalah menghapus baris dengan dropna(), cocok bila jumlahnya sedikit. Strategi kedua adalah mengisi dengan fillna(), misalnya memakai rata-rata kolom, median, atau nilai modus. Pilihan strategi harus disesuaikan dengan jumlah data yang hilang dan makna kolomnya.Menekankan bahwa keputusan membersihkan data harus disertai alasan: apakah lebih baik mengisi nilai kosong atau membuangnya bergantung pada jumlah data dan konteks masalah. Data yang salah bersih akan menghasilkan model yang salah pula.
import pandas as pd
df = pd.DataFrame({"Nama": ["A", "B", "C"],
"Usia": [20, None, 25],
"Skor": [80, 90, None]})
print(df.isna().sum())
df["Usia"] = df["Usia"].fillna(df["Usia"].mean())
df = df.dropna()
print(df)
Kode di atas menghitung jumlah nilai kosong per kolom, mengisi kolom Usia yang kosong dengan rata-rata, lalu membuang baris yang masih memiliki NaN pada kolom lain.
Menghapus Data Duplikat
Baris duplikat membuat statistik menjadi condong dan menyebabkan model belajar berlebihan pada data yang sama. drop_duplicates() menyisakan satu salinan untuk setiap baris unik berdasarkan seluruh kolom.
df = pd.DataFrame({"Id":[1,1,2,3], "Nama":["A","A","B","C"]})
print("Baris awal:", len(df))
df = df.drop_duplicates()
print("Baris unik:", len(df))
print(df)
Encoding Data Kategorikal
Algoritma machine learning hanya memahami angka. Label encoding mengubah tiap kategori menjadi angka urut, sedangkan one-hot encoding membuat kolom biner untuk setiap kategori. One-hot lebih aman untuk kategori tanpa urutan alami, karena tidak menciptakan makna angka yang menyesatkan.
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
kota = ["Jakarta", "Bandung", "Jakarta", "Surabaya"]
df = pd.DataFrame({"Kota": kota})
df["Kota_Label"] = le.fit_transform(df["Kota"])
print(df)
print(pd.get_dummies(df["Kota"]))
Perhatikan bagaimana Kota_Label memberi angka 0, 1, 2 pada tiap kota, sementara get_dummies menghasilkan tiga kolom yang menandai kehadiran kota tertentu. Keduanya sah, tinggal disesuaikan kebutuhan.
Langkah Praktik
Siapkan satu dataset kotor (boleh sampel buatan) lalu bersihkan dengan urutan langkah berikut. Jalankan satu langkah, amati hasilnya, baru lanjut ke langkah berikutnya.
- Muat dataset dari file CSV dan cek struktur dengan df.info().
- Deteksi jumlah nilai kosong per kolom menggunakan df.isna().sum().
- Isi nilai kosong numerik dengan mean atau median, yang kategorikal dengan modus.
- Hapus baris duplikat dengan drop_duplicates().
- Encode seluruh kolom kategorikal lalu simpan data bersih ke CSV baru.
Data bersih disimpan ke file CSV baru agar dapat dipakai ulang tanpa mengulang proses bersih-bersih di pertemuan berikutnya.
Latihan
Kerjakan latihan dengan data buatan Anda sendiri agar terbiasa menghadapi berbagai macam kondisi kotor pada data.
- Buat DataFrame 5 baris berisi 2 nilai kosong dan 1 duplikat, lalu bersihkan keduanya.
- Jelaskan kapan lebih baik mengisi missing values daripada menghapus barisnya.
- Ubahlah kolom Pekerjaan (Guru, Dokter, Pedagang) menjadi one-hot encoding.
