Preprocessing dan Data Cleaning untuk Pemula
Preprocessing dan Data Cleaning untuk Pemula |
Salah satu komponen kunci kesuksesan adalah persiapan dan pembersihan data yang cermat. Data cleaning dan preparation adalah langkah pertama yang paling penting dalam setiap proyek AI. Sebagai bukti menunjukkan, sebagian besar ilmuwan data menghabiskan sebagian besar waktu mereka - hingga 70% - untuk cleaning data.
Di pos kali ini, kita akan belajar bersama tentang langkah-langkah Preprocessing dan Data Cleaning ini di Python. Mulai dari mengimpor perpustakaan paling populer hingga penyandian fitur yang diperlukan.
Menurut Wikipedia. Data cleansing atau data cleaning adalah proses mendeteksi dan memperbaiki (atau menghapus) catatan yang rusak atau tidak akurat dari kumpulan catatan, tabel, atau basis data dan mengacu pada pengidentifikasian bagian data yang tidak lengkap, salah, tidak akurat atau tidak relevan dari data dan kemudian mengganti, memodifikasi, atau menghapus data kotor atau kasar.
langkah 1. Loading data set
Import librari (perpustakaan ) yang diperlukan
Hal pertama yang harus dilakukan adalah mengimpor perpustakaan (library) untuk preprocessing. Ada banyak perpustakaan yang tersedia, tetapi perpustakaan Python yang paling populer dan penting untuk mengerjakan data adalah Numpy, Matplotlib, dan Pandas. Numpy adalah perpustakaan yang digunakan untuk semua hal matematika. Panda adalah alat terbaik yang tersedia untuk mengimpor dan mengelola kumpulan data. Matplotlib (Matplotlib.pyplot) adalah perpustakaan untuk membuat grafik.
Untuk mempermudah penggunaan di masa mendatang, Anda dapat mengimpor pustaka ini dengan alias atau shortcut:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
Load data ke pandas
Setelah mengunduh kumpulan data dan menamainya sebagai file .csv, Anda perlu memuatnya ke dalam panda DataFrame untuk menjelajahinya dan melakukan beberapa tugas pembersihan dasar menghapus informasi yang tidak Anda perlukan yang akan membuat pemrosesan data lebih lambat.
Tugas-tugas tersebut meliputi:
- Menghapus baris pertama: itu berisi teks asing dan bukan judul kolom. Teks ini mencegah kumpulan data agar tidak diuraikan dengan benar oleh panda library:
my_dataset = pd.read_csv(‘data/my_dataset.csv’, skiprows=1, low_memory=False)
- Menghapus kolom dengan penjelasan teks yang tidak perlu, url kolom, dan kolom lain yang tidak perlu:
my_dataset = my_dataset.drop([‘url’],axis=1)
- Menghapus semua kolom dengan hanya satu nilai, atau memiliki lebih dari 50% nilai yang hilang untuk bekerja lebih cepat (jika kumpulan data Anda cukup besar sehingga masih akan bermakna):
my_dataset = my_dataset.dropna(thresh=half_count,axis=1)Ini juga merupakan praktik yang baik untuk menamai set data yang difilter secara berbeda agar tetap terpisah dari data mentah. Ini memastikan Anda masih memiliki data asli jika Anda perlu kembali ke data asli.
Langkah 2. Explorasi data set
Memahami data
Sekarang Anda sudah menyiapkan data, tetapi Anda masih harus meluangkan waktu untuk explorasinya dan memahami fitur apa yang diwakili oleh setiap kolom. Tinjauan manual terhadap kumpulan data seperti itu sangat penting, hal ini berguna untuk menghindari kesalahan dalam analisis data dan proses pemodelan.
Untuk mempermudah proses, Anda bisa membuat DataFrame dengan nama kolom, tipe data, nilai baris pertama, dan deskripsi dari kamus data.
Saat melakukan explorasi fitur, Anda harus memperhatikan kolom apa pun yang ada, seperti:
- format data yang buruk,
- membutuhkan lebih banyak data atau banyak pra-pemrosesan untuk berubah menjadi fitur yang bermanfaat, atau
- mengandung informasi yang berlebihan,
"karena hal-hal ini dapat membahayakan analisis Anda jika ditangani secara tidak benar."
Anda juga harus sangat memperhatikan datanya yang dapat menyebabkan model overfit. Ini karena model juga akan belajar dari fitur yang tidak akan tersedia ketika kita menggunakannya untuk membuat prediksi. Kita perlu memastikan bahwa model kita dilatih hanya dengan menggunakan data yang ada pada saat melakukan pengujian.
Menentukan kolom target
Dengan kumpulan data yang telah dieksplorasi, Anda perlu membuat matriks variabel dependen dan vektor variabel independen. Pada awalnya Anda harus memutuskan kolom yang sesuai untuk digunakan sebagai kolom target untuk pemodelan berdasarkan pertanyaan yang ingin Anda jawab. Misalnya, jika Anda ingin memprediksi perkembangan kanker, atau kemungkinan kredit akan disetujui, Anda perlu menemukan kolom dengan status penyakit atau pinjaman sebagai kolom target.
Misalnya, jika kolom target adalah yang terakhir, Anda bisa membuat matriks variabel dependen dengan mengetik:
X = dataset.iloc[:, :-1].values
Tanda titik dua pertama itu (:) berarti kita ingin mengambil semua baris dalam dataset kita. : -1 berarti bahwa kami ingin mengambil semua kolom data kecuali yang terakhir. Nilai. Pada akhirnya berarti bahwa kita menginginkan semua nilai.
Untuk memiliki vektor variabel independen dengan hanya data dari kolom terakhir, Anda bisa mengetik:
y = dataset.iloc[:, -1].values
Langkah 3. mempersiapkan fitur untuk proses Machine Learning
Akhirnya, saatnya melakukan persiapan fitur-fitur yang akan digunakan untuk algoritma ML. Untuk membersihkan kumpulan data, Anda perlu menangani nilai yang hilang dan fitur kategorikal, karena matematika yang mendasari sebagian besar model machine learning mengasumsikan bahwa data tersebut numerik dan tidak mengandung nilai yang hilang. Selain itu, pustaka scikit-learn akan error jika Anda mencoba untuk melatih model seperti regresi linier dan regresi logistik menggunakan data yang berisi nilai yang hilang atau non-numerik.
Menyelesaikan Missing Values
Data yang hilang (Missing data) merupakan sifat paling umum dari data yang tidak bersih. Nilai-nilai ini biasanya berbentuk NaN atau Tidak Ada.
berikut adalah beberapa penyebab nilai yang hilang: kadang-kadang nilai hilang karena tidak ada, atau karena pengumpulan data yang tidak tepat atau entri data yang buruk. Misalnya, jika seseorang di bawah umur, dan pertanyaannya berlaku untuk orang di atas 18, maka pertanyaan itu akan berisi nilai yang hilang. Dalam kasus seperti itu, akan salah untuk mengisi nilai untuk pertanyaan itu.
Ada beberapa cara untuk mengisi nilai missing values:
- Anda dapat menghapus seluruh dapa pada garis yang sama jika kumpulan data Anda cukup besar dan persentase nilai yang hilang tinggi (lebih dari 50%, misalnya);
- Anda dapat mengisi semua variabel nol dengan 0 berurusan dengan nilai numerik;
- Anda dapat menggunakan kelas Imputer dari pustaka scikit-learn untuk mengisi nilai yang hilang dengan data (rata-rata, median, most_frequent)
- Anda juga dapat memutuskan untuk mengisi nilai yang hilang dengan nilai apa pun yang datang langsung setelahnya di kolom yang sama.
Keputusan ini tergantung pada jenis data, apa yang ingin Anda lakukan dengan data, dan penyebab nilai yang hilang. Pada kenyataannya, hanya karena sesuatu itu populer tidak selalu menjadikannya pilihan yang tepat. Strategi yang paling umum adalah dengan menggunakan nilai rata-rata, tetapi tergantung pada data Anda, Anda mungkin menemukan pendekatan yang sama sekali berbeda.
Menangani data kategorikal
Machine learning hanya menggunakan nilai numerik (float atau tipe data int). Namun, kumpulan data sering berisi tipe data objek daripada yang perlu diubah menjadi numerik. Dalam kebanyakan kasus, nilai-nilai kategorikal bersifat diskrit dan dapat dikodekan sebagai variabel dummy, dengan menetapkan angka untuk setiap kategori. Cara paling sederhana adalah dengan menggunakan One Hot Encoder, dengan menentukan indeks kolom yang ingin Anda kerjakan:
from sklearn.preprocessing import OneHotEncoder
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
Menangani Entri data yang tidak konsisten
Ketidakkonsistenan terjadi, misalnya, ketika ada nilai unik yang berbeda dalam kolom yang dimaksudkan untuk menjadi sama. Anda dapat memikirkan berbagai pendekatan untuk kapitalisasi, salah cetak sederhana, dan format tidak konsisten untuk membentuk gagasan. Salah satu cara untuk menghapus inkonsistensi data adalah dengan menghapus spasi putih sebelum atau setelah nama entri dan dengan mengonversi semua case menjadi case yang lebih kecil.
Namun, jika ada sejumlah besar entri unik yang tidak konsisten, tidak mungkin untuk memeriksa secara manual kecocokan terdekat. Anda bisa menggunakan paket Fuzzy Wuzzy untuk mengidentifikasi string mana yang paling mungkin sama. Dibutuhkan dalam dua string dan mengembalikan rasio. Semakin dekat rasio ke 100, semakin besar kemungkinan Anda akan menyatukan string.
Menangani Tanggal dan Waktu
Tipe spesifik dari inkonsistensi data adalah format tanggal yang tidak konsisten, seperti dd / mm / yy dan mm / dd / yy di kolom yang sama. Nilai tanggal Anda mungkin tidak dalam tipe data yang benar, dan ini tidak akan memungkinkan Anda melakukan manipulasi secara efektif dan mendapatkan wawasan darinya. Kali ini Anda bisa menggunakan paket datetime untuk memperbaiki tipe tanggal.
Penskalaan dan Normalisasi
Penskalaan penting jika Anda perlu menentukan bahwa perubahan dalam satu kuantitas tidak sama dengan perubahan lain di kuantitas lain. Dengan bantuan penskalaan Anda memastikan bahwa hanya karena beberapa fitur besar mereka tidak akan digunakan sebagai prediktor utama. Misalnya, jika Anda menggunakan usia dan gaji seseorang dalam prediksi, beberapa algoritma akan lebih memperhatikan gaji karena itu lebih besar, yang tidak masuk akal.
Normalisasi melibatkan transformasi atau konversi dataset Anda menjadi distribusi normal. Beberapa algoritma seperti SVM melakukan konvergensi jauh lebih cepat pada data yang dinormalisasi, jadi masuk akal untuk menormalkan data Anda untuk mendapatkan hasil yang lebih baik.
Ada banyak cara untuk melakukan penskalaan fitur. Singkatnya, kami menempatkan semua fitur kami dalam skala yang sama sehingga tidak ada yang didominasi oleh yang lain. Misalnya, Anda bisa menggunakan kelas StandardScaler dari paket sklearn.preprocessing agar sesuai dan mengubah kumpulan data Anda:
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
As you don’t need to fit it to your test set, you can just apply transformation.
sc_y = StandardScaler()
y_train = sc_y.fit_transform(y_train)
Simpan ke CSV
Untuk memastikan bahwa Anda masih memiliki data mentah, itu adalah praktik yang baik untuk menyimpan hasil akhir dari setiap bagian atau tahap alur kerja Anda dalam file csv terpisah. Dengan cara ini, Anda akan dapat membuat perubahan dalam aliran pemrosesan data Anda tanpa harus menghitung ulang semuanya.Seperti yang kami lakukan sebelumnya, Anda dapat menyimpan DataFrame Anda sebagai .csv menggunakan fungsi panda to_csv ().
my_dataset.to_csv(“processed_data/cleaned_dataset.csv”,index=False)
Kesimpulan
Ini adalah langkah yang sangat mendasar yang diperlukan untuk bekerja melalui kumpulan data besar, membersihkan, dan menyiapkan data untuk setiap proyek Data Science. Ada bentuk data cleaning lain yang mungkin berguna bagi Anda. Tetapi untuk saat ini kami ingin Anda memahami bahwa Anda perlu mengatur dan merapikan data Anda dengan benar sebelum perumusan model apa pun. Data yang lebih baik dan lebih bersih mengungguli algoritma terbaik. Jika Anda menggunakan algoritma yang sangat sederhana pada data terbersih, Anda akan mendapatkan hasil yang sangat mengesankan. Dan, terlebih lagi, tidak sulit untuk melakukan preprocessing dasar!