Uji Data Hilang (Missing Value Analysis) Dengan Pandas Python
Uji data hilang atau yang lebih keren dikenal sebagai missing value analysis adalah bagian dari tahap data cleaning yang bertujuan untuk menghapus data hilang atau data yang tidak terisi atau data yang memang tidak ada datanya dari sebuah dataset. Tujuannya agar data yang hilang tidak mempengaruhi proses pengambilan keputusan pada mesin. Uji data hilang sangat penting dilakukan sebelum mengolah data, karena data yang hilang bisa saja dianggap bernilai nol atau bahkah False oleh mesin yang akan merubah nilai deskripsi statistik kedepannya.
Pada artikel kali ini, kita akan belajar tentang bagaimana mendeteksi data hilang dan bagaimana cara mengatasinya.
Dataset
Kelas AI sudah menyediakan sebuah dataset yang mengandung data hilang didalamnya. Kalian bisa mendownloadnya dengan cara berikut:
!wget --no-check-certificate \
https://cdn.kelasai.id/dataset_beras_with_missing_value.xlsx
Output:
--2025-01-01 16:23:38-- https://cdn.kelasai.id/dataset_beras_with_missing_value.xlsx Resolving cdn.kelasai.id (cdn.kelasai.id)... 154.41.240.165, 2a02:4780:6:1252:0:2588:d4de:4 Connecting to cdn.kelasai.id (cdn.kelasai.id)|154.41.240.165|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 3913951 (3.7M) [text/plain] Saving to: 'dataset_beras_with_missing_value.xlsx' dataset_beras_with_ 100%[===================>] 3.73M 2.00MB/s in 1.9s 2025-01-01 16:23:41 (2.00 MB/s) - 'dataset_beras_with_missing_value.xlsx' saved [3913951/3913951]
Kemudian mari kita buka dulu datasetnya dengan menggunakan pandas.
import pandas as pd
df = pd.read_excel('dataset_beras_with_missing_value.xlsx')
df
MQ135 | MQ2 | MQ3 | MQ4 | MQ5 | MQ6 | MQ7 | MQ8 | MQ9 | Temperature | Humidity | Usia | Kelas | |
0 | 3.62 | 62.33 | 2.91 | 2.74 | 3.08 | 4.68 | 3.04 | 4.79 | 3.83 | 46.5 | 29.0 | 1 | Tidak kadaluarsa |
1 | 3.79 | 62.33 | 3.51 | 2.15 | 4.03 | 3.89 | 3.13 | 3.80 | 5.13 | 46.6 | 29.1 | 1 | Tidak kadaluarsa |
2 | 4.32 | 62.33 | 3.03 | 2.53 | 3.32 | 4.24 | 3.66 | 3.72 | 4.77 | 46.9 | 29.1 | 1 | Tidak kadaluarsa |
3 | 3.41 | 62.33 | 2.77 | 2.99 | 3.29 | 4.45 | 3.02 | 4.28 | 3.94 | 47.0 | 29.1 | 1 | Tidak kadaluarsa |
4 | 3.38 | 62.33 | 2.94 | 2.81 | 3.31 | 5.22 | 2.82 | 4.76 | 4.48 | 47.0 | 29.0 | 1 | Tidak kadaluarsa |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
48841 | 47.06 | 34.14 | 62.65 | 21.84 | 26.61 | 23.87 | 19.30 | 66.78 | 17.82 | 27.4 | 66.9 | 25 | Kadaluarsa |
48842 | 46.72 | 33.39 | 62.86 | 21.64 | 26.90 | 23.85 | 19.33 | 67.69 | 17.60 | 27.5 | 66.7 | 25 | Kadaluarsa |
48843 | 47.21 | 33.66 | 63.03 | 21.81 | 27.15 | 24.18 | 19.36 | 67.65 | 17.77 | 27.6 | 66.7 | 25 | Kadaluarsa |
48844 | 47.07 | 34.63 | 63.41 | 21.71 | 27.04 | 24.26 | 19.38 | 68.57 | 17.90 | 27.7 | 66.5 | 25 | Kadaluarsa |
48845 | 46.88 | 33.94 | 63.48 | 21.80 | 26.56 | 24.73 | 19.73 | 68.68 | 18.01 | 27.8 | 66.5 | 25 | Kadaluarsa |
Baca Juga: Membuka Dataset Excel & CSV Dengan Pandas disini
Mendeteksi Data Hilang
Untuk mengetahui jumlah data hilang dalam dataset kita, kita bisa menggunakan method isnull()
yang dikombinasikan dengan method sum()
untuk menjumlahkannya. Kita bisa melakukannya dengan cara seperti ini:
print(df.isnull().sum())
Output:
MQ135 0 MQ2 0 MQ3 2 MQ4 2 MQ5 2 MQ6 1 MQ7 1 MQ8 2 MQ9 4 Temperature 0 Humidity 3 Usia 0 Kelas 1 dtype: int64
Dari hasil diatas kita dapat mengetahui bahwa terdapat dua buah data hilang pada kolom 'MQ3', terdapat dua buah data hilang pada kolom 'MQ4' dan begitu seterusnya hingga terdapat satu data hilang pada kolom 'Kelas'. So, pertanyaannya adalah, apa yang harus kita lakukan pada data hilang ini?
Ada dua teknik yang bisa kalian lakukan untuk mengatasi data hilang. Yaitu interpolasi atau menghapusnya saja sekalian. Kita akan mempelajarinya satu-per satu.
Interpolasi
Interpolasi adalah teknik untuk mengisi data yang hilang dengan data antara yang sesuai dengan deret atau fungsi yang digunakan. Biasanya kita menggunakan fungsi linear dengan mengasumsikan bahwa data terdistribusi secara linear. Contoh: ketika kita memiliki deret: 2, 4, 6, x, 10; maka berapa kah x? Ya dengan mudah akan kita jawab bahwa x = 8 karena mengikuti fungsi linear x = 2n dimana 'n' adalah urutan data.
Baca Juga: Data Unik, Data Hilang & Interpolasi Dengan Pandas disini
Untuk melakukan interpolasi, kita cukup memanggil method .interpolate() dari pandas dan kita akan melakukan uji data hilang sekali lagi seperti ini:
df = df.interpolate()
df.isnull().sum()
Output:
MQ135 0 MQ2 0 MQ3 0 MQ4 0 MQ5 0 MQ6 0 MQ7 0 MQ8 0 MQ9 0 Temperature 0 Humidity 0 Usia 0 Kelas 1 dtype: int64
Lihat bukan, sekarang data hilang pada kolom-kolom yang bersifat numerik sudah tidak ada, alias sudah terisi dengan data antara. Namun interpolasi memiliki kekurangan dimana interpolasi tidak bisa dilakukan pada data yang bersifat string (text), series atau boolean. Itulah mengapa masih ada satu data hilang pada kolom 'kelas'. Ya karna kolom 'kelas' bersifat string (text).
Penting:
Interpolasi tidak bisa dan tidak boleh digunakan kepada data yang bersifat kaategorikal, diskret, series, boolean maupun text. Kenapa tidak boleh dilakukan? Silahkan baca disini.
So, walaupun interpolasi adalah langkah yang bijak, tapi langkah yang paling bijak adalah menghapus seluruh satu bari data yang memiliki data hilang.
Menghapus Data Hilang (Recommended)
Teknik yang paling baik dan direkomendasikan ketika kalian menemukan data hilang adalah dengan menghapus keseluruhan data (satu baris). Hal ini dikarenakan paradigma data akan berbeda jika kita mengganti data dengan melakukan interpolasi. Dalam artian lain, data hasil interpolasi bukanlah data aslinya sehingga keputusan yang diambil pun bias dan berakibat pada turunnya performa akurasi dan tingginya nilai error.
Untuk menghapus data hilang, kita harus mengubah dulu data yang kosong pada dataframe kita menjadi NaN menggunakan numpy. Kalian bisa melakukannya seperti ini:
import numpy as np
df.replace('', np.nan, inplace=True)
Setelah semua data yang hilang berubah menjadi NaN, langkah selanjutnya adalah dengan menghapus semua data yang memiliki nilai NaN. Kita bisa menggunakan method dropna() dan kemudian kita cek lagi jumlah data hilang nya seperti ini:
df.dropna(inplace=True)
df.isnull().sum()
Output:
MQ135 0 MQ2 0 MQ3 0 MQ4 0 MQ5 0 MQ6 0 MQ7 0 MQ8 0 MQ9 0 Temperature 0 Humidity 0 Usia 0 Kelas 0 dtype: int64
Lihat bukan, sekarang kita sudah tidak memiliki data hilang lagi.
Bolehkah Kita Mengganti Data Hilang Dengan Nilai Mean Atau Modus?
Jawabannya tergantung. Jika kalian cuma mau main-main aja untuk bahan belajar dan rela akurasi kalian turun atau errornya meningkat, kalian bisa saja melakukannya. Namun bagi seorang data scientist professional, hal itu tidak boleh dilakukan. Mengganti data berarti merubah distribusi. Merubah distribusi berarti merubah paradigma data yang kelak akan mempengaruhi proses pengambilan keputusan. Sehingga model machine learning kita tidak akurat.
Ada banyak orang yang konsultasi ke kami bahwa nilai akurasinya sangat rendah. Setelah kami lihat, ternyata beberapa masalahnya adalah karena mereka mengganti data hilang dengan data rata-rata, median ataui modus. So itu lah ya guys, uji data hilang.
Baca Juga:
Artikel yang mungkin relate buat kamu
Pandas (Python for Data Science) adalah sebuah library atau package pada bahasa pemrograman Python yang memungkinkan kita untuk membuat, mengolah, dan mengelola data dalam bentuk ...
Ada kalanya kita hanya ingin menggunakan data pada lokasi tertentu saja dalam sebuah dataframe. Misal dari keseluruhan data, kita hanya ingin mengambil data pada kolom ...