Landasan dari setiap proyek data science yang sukses adalah data yang bersih dan konsisten. Namun dalam proses analisis yang cepat, bahkan pengguna Python berpengalaman kadang-kadang tersandung jebakan pra-pemrosesan data yang dapat dicegah. Apakah Anda sedang membentuk data untuk model pembelajaran mesin atau menyiapkannya untuk visualisasi, mengetahui kesalahan apa yang perlu diwaspadai dapat menghemat banyak jam frustrasi dan menghasilkan hasil yang jauh lebih kuat.
Mari kita uraikan lima kesalahan pembersihan data yang paling umum (dan seringkali fatal) dalam Python, lengkap dengan tips praktis dan contoh ilustratif agar alur kerja Anda tetap kokoh dan efisien.
Salah satu masalah pertama yang akan Anda temui pada setiap dataset dunia nyata adalah data yang hilang. Dalam Python, terutama dengan alat seperti pandas, mengganti atau menghapus NaN sangat mudah: df.dropna() atau df.fillna(0) melakukannya dalam satu baris. Tapi mudah tidak berarti benar.
Menghapus baris secara otomatis yang memiliki nilai hilang dapat secara drastis memperkecil dataset Anda atau—terutama dalam kasus di mana ketidakhadiran data berkorelasi—memperkenalkan bias. Mengisi nilai dengan rata-rata atau nol dapat mendistorsi sebaran, terutama pada kolom non-numerik atau kolom dengan outlier.
Pertimbangkan cuplikan berikut:
# Too hasty with missing value treatment
import pandas as pd
df = pd.read_csv('survey.csv')
df = df.dropna() # Danger: goodbye valuable data!
Jika 30% baris hilang hanya satu kolom opsional—misalnya usia—Anda akan kehilangan 30% data Anda. Jika usia yang hilang sebagian besar terdapat pada demografis tertentu, hasilnya adalah dataset yang tidak lagi mewakili populasi secara akurat.
df.isnull().sum() atau df.info() untuk melihat pola ketidaklengkapan data.sklearn.impute.SimpleImputer untuk pengisian yang diinformasikan, atau logika berbasis domain.
Data yang dikumpulkan dari berbagai sumber jarang cocok dalam satu format. Tanggal, kategori, dan pengkodean string sangat rentan terhadap kesalahan halus yang sulit dilacak.
dtype: object), menonaktifkan operasi numerik.Masalah klasik Python:
# Date times imported as strings, causing issues
import pandas as pd
df = pd.read_csv('sales.csv')
df['created_at'].min() # Only finds the minimum string, not chronological min
df.dtypes dengan cepat menunjukkan kolom yang seharusnya numerik tetapi tidak.pd.to_datetime(), pd.to_numeric(), dan konversi kategori segera setelah Anda mengimpor data..str.lower().str.strip() untuk kolom kategori; ganti sinonim atau ejaan yang salah dengan nilai yang konsisten.encoding (encoding='utf-8' atau encoding='cp1252').df['created_at'] = pd.to_datetime(df['created_at'], errors='coerce')
df = df.dropna(subset=['created_at']) # Remove rows where dates couldn't parse
Beberapa perhatian kecil di sini dapat mencegah berjam-jam debugging analitik yang aneh di kemudian hari.
Outliers adalah wildcard data pembersihan—terkadang mereka menandai kesalahan entri data; lain kali, mereka adalah kejadian yang patut dipelajari!
Skrip otomatis yang menghilangkan nilai di luar rentang tertentu tanpa mempertimbangkan konteks dapat menghapus kesalahan maupun sinyal penting dari data.
# Don't just drop anything >200 without context
bp_outliers = df[df['blood_pressure'] > 200]
print(bp_outliers) # Investigate: are these errors or medically relevant cases?
df.describe() dan visualisasi seperti box plot atau histogram untuk mengungkap detail sebaran dan mengidentifikasi outlier.Ketika outliers ternyata valid, mereka bisa membentuk wawasan bisnis Anda yang didorong oleh data.
Duplikasi data sangat lazim—kesalahan entri data, pengambilan data dari web, atau gangguan sistem semuanya memperkenalkannya. Sementara Python memungkinkan Anda df.drop_duplicates() dalam sekejap, bahaya sebenarnya terletak pada salah memahami dari mana duplikat berasal, atau bagaimana cara terbaik untuk menyelesaikannya.
Sebuah basis data ritel mungkin memiliki beberapa baris untuk pesanan pelanggan yang sama akibat pengiriman sistem yang berulang. Menghapus semua kecuali satu baris hanya berhasil jika setiap kolom cocok; jika tidak, informasi mungkin hilang.
# Problematic: Dropping all duplicates based only on 'order_id'
df = df.drop_duplicates(subset=['order_id']) # Could lose different addresses or notes attached to split-row orders
Jika kolom seperti 'delivery_notes' berbeda antar baris, menghapus duplikasi secara sembarangan bisa kehilangan data atau gagal merekonsiliasi informasi yang bertentangan.
df.duplicated(subset=key_cols, keep=False) untuk menandai duplikat sejati.is_duplicate untuk analisis hilir lebih disukai daripada penghapusan langsung.Berikut cara Anda mungkin mengagregasi bidang-bidang yang berguna sebelum deduplikasi:
def collapse_order_notes(notes):
return '; '.join(sorted(set(x for x in notes if pd.notnull(x))))
rollup = df.groupby('order_id').agg({
'customer_id': 'first',
'total_amount': 'sum',
'delivery_notes': collapse_order_notes
}).reset_index()
Ini melindungi data tambahan yang penting.
Pembersihan data di Python membutuhkan perhatian pada detail halus serta kecepatan. Dengan menjauhi pembersihan yang mekanis atau bebas konteks, Anda meningkatkan pekerjaan data science dan analitik Anda jauh di atas rata-rata. Tinjau nilai hilang dengan niat, bawa konsistensi pada format, perlakukan outlier sebagai sinyal bukan sekadar kebisingan, teliti duplikasi, dan pikirkan secara taktis tentang pengkodean kategori. Dilengkapi dengan pelajaran-pelajaran ini dan mata kritis terhadap data Anda, Anda akan menghabiskan waktu lebih sedikit untuk menelusuri kembali, meminimalkan kesalahan yang memalukan dalam produksi, dan membangun reputasi untuk merancang pipeline data yang dipercaya oleh analis. Dan dalam bidang data science yang terus tumbuh, menjadi orang yang datanya benar-benar siap untuk wawasan adalah sebuah superpower nyata.