Data cleaning adalah kegiatan yang harus dilakukan oleh setiap data expert karena kita perlu memastikan data bebas dari kesalahan, konsisten, dan dapat digunakan untuk analisis. Tanpa langkah ini, hasil analisis mungkin akan buruk. Namun, data cleaning sering memakan waktu lama dan bisa repetitif. Selain itu, terkadang kita melewatkan sebuah kesalahan yang seharusnya kita sadari.
Itulah mengapa kita bisa mengandalkan paket Python yang dirancang untuk data cleaning. Paket-paket ini dirancang untuk meningkatkan pengalaman data cleaning dan memperpendek waktu proses data cleaning. Apa saja paket-paket ini? Mari kita bahas.
PyJanitor
Pandas menyediakan banyak fungsi data cleaning, seperti fillna dan dropna, tetapi fungsi-fungsi tersebut masih bisa ditingkatkan. PyJanitor adalah paket Python yang menyediakan API data cleaning dalam API Pandas tanpa menggantikannya. Paket ini menyediakan berbagai metode termasuk:
Cleaning Nama Kolom,
Mengidentifikasi Duplicate Values,
Data Factorization,
Data Encoding,
dan masih banyak lagi. Namun, yang istimewa dari PyJanitor adalah API-nya dapat dijalankan melalui metode chaining. Mari kita uji dengan contoh data. Untuk contoh ini, saya akan menggunakan Titanic Training data dari Kaggle.
Untuk memulai, mari kita instal paket PyJanitor.
pip install pyjanitor
Lalu kita akan memuat dataset Titanic.
import pandas as pd
df = pd.read_csv('train.csv')
df.head()
import janitor
df.factorize_columns(column_names=["Sex"]).also(
lambda df: print(f"DataFrame shape after factorize is: {df.shape}")
).bin_numeric(from_column_name="Age", to_column_name="Age_binned").also(
lambda df: print(f"DataFrame shape after binning is: {df.shape}")
).clean_names()
Kita mengubah kerangka data awal dengan metode chaining. Jadi, apa yang terjadi dengan kode di atas? Mari saya jelaskan.
Pertama, kita mengubah kolom Sex menjadi numerik dengan fungsi factorize,
Dengan fungsi also, kita melakukan print shape setelah faktorisasi,
Selanjutnya, kita mengelompokkan usia menggunakan fungsi bin_numeric,
Fungsi also sama seperti sebelumnya,
Terakhir, kita membersihkan nama kolom dengan mengubahnya menjadi lowercase, lalu mengganti semua spasi dengan garis bawah menggunakan clean_names.
Semua langkah-langkah di atas dapat dilakukan dengan metode chaining tunggal yang langsung dilakukan dalam kerangka data Pandas. Anda masih bisa melakukan lebih banyak lagi dengan paket PyJanitor, jadi saya sarankan Anda meninjau dokumentasinya.
Feature-engine
Feature-Engine adalah paket Python yang dirancang untuk feature engineering dan feature selection yang mempertahankan metode API scikit-learn, seperti fit dan transform. Paket ini dirancang untuk menyediakan transformer data yang terintegrasi dalam machine learning pipeline.
Paket ini menyediakan berbagai data-cleaning transformers, diantaranya:
Data Imputation,
Categorical Encoding,
Outlier Removal,
Variable Selection,
dan masih banyak fungsi lainnya. Mari coba paket ini dengan menginstalnya terlebih dahulu.
pip install feature-engine
Penggunaan Feature-Engine cukup mudah; Anda hanya perlu mengimpornya dan melatih transformernya, mirip dengan API scikit-learn. Sebagai contoh, saya menggunakan Imputer untuk mengisi missing data pada kolom Age dengan nilai Median.
from feature_engine.imputation import MeanMedianImputer
# Atur imputer
median_imputer = MeanMedianImputer(imputation_method='median', variables=['Age'])
# Terapkan imputer
median_imputer.fit(df)
median_imputer.transform(df)
Kode di atas akan mengisi kolom Age pada data dengan nilai median. Ada banyak transformer yang bisa Anda coba. Cobalah temukan yang sesuai dengan pipeline data Anda di dokumentasinya.
Cleanlab
Cleanlab adalah paket Python open-source untuk membersihkan masalah apa pun pada label dataset machine learning. Ini dirancang untuk membuat training machine learning dengan label noisy menjadi lebih kuat dan memberikan output yang andal. Model apa pun dengan output probabilistik dapat dilatih bersama paket Cleanlab.
Mari coba paket ini dengan contoh kode. Pertama, kita perlu menginstal Cleanlab.
pip install cleanlab
Karena Cleanlab bekerja untuk membersihkan masalah label, mari kita persiapkan dataset untuk machine learning training.
# Pilih fitur
df = df[["Survived", "Pclass", "SibSp", "Parch"]]
# Bagi dataset
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
df.drop("Survived", axis=1), df["Survived"], random_state=42
)
Setelah dataset siap, kita akan mencoba memasang dataset dengan model classifier. Mari lihat metrik prediksi tanpa membersihkan labelnya.
#Fit model
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(random_state = 42)
model.fit(X_train, y_train)
preds = model.predict(X_test)
#Cetak hasil metrics
from sklearn.metrics import classification_report
print(classification_report(y_test, preds))
Ini adalah hasil yang bagus, tetapi mari kita lihat apakah kita bisa meningkatkan hasilnya setelah membersihkan labelnya. Mari coba lakukan dengan kode berikut.
from cleanlab.classification import CleanLearning
#inisiasi model dengan CleanLearning
cl = CleanLearning(model, seed=42)
# Fit model
cl.fit(X_train, y_train)
# Periksa kualitas label
cl.get_label_issues()
Kita bisa melihat dari hasil di atas bahwa beberapa label memiliki masalah karena kesalahan prediksi. Dengan membersihkan label, mari kita lihat hasil metrik model.
clean_preds = cl.predict(X_test)
print(classification_report(y_test, clean_preds))
Kita bisa melihat ada peningkatan pada hasilnya dibandingkan model sebelumnya tanpa pembersihan label. Anda masih bisa melakukan banyak hal dengan Cleanlab; saya sarankan Anda mengunjungi dokumentasinya untuk belajar lebih lanjut.
Kesimpulan
Data cleaning adalah langkah yang harus dilakukan dalam proses analisis data apa pun. Namun, sering kali memakan banyak waktu untuk membersihkan semuanya dengan benar. Untungnya, ada paket Python yang dikembangkan untuk membantu kita membersihkan data dengan benar. Dalam artikel ini, saya memperkenalkan tiga paket untuk membantu membersihkan data: PyJanitor, Feature-Engine, dan Cleanlab.
Comments