Modul 2 - Data Clening dan Preprocessing
Modul 2 - Data Clening dan Preprocessing
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
import missingno as msno
from scipy import stats
3. Load Dataset
In [2]: dataset = pd.read_csv('diabetes_prediction_dataset_uncleaned.csv')
4. Data Cleaning
A. Menangani Missing Value
Missing value (nilai yang hilang) adalah kondisi dimana data untuk suatu
variabel atau atribut tidak ada atau tidak terisi dalam dataset.
In [3]: # mendapatkan missing value pada setiap kolom
missing_values_count = dataset.isnull().sum()
Hasil : Ada missing value pada kolom gender, age dan HbA1c_level
In [4]: #cek shape untuk melihat jumlah row saat ini
dataset.shape
Out[4]: (100010, 9)
missing_values_count
Out[6]: gender 0
age 3
hypertension 0
heart_disease 0
smoking_history 0
bmi 0
HbA1c_level 3
blood_glucose_level 0
diabetes 0
dtype: int64
Out[7]: (100008, 9)
Amati jumlah data sebelum dan sesudah dihapus gender yang kosong
Solusi 2: Menggunakan Data Imputation : Mengisi kolom age dengan nilai
median umur yang ada, dan kolom HbA1c_level dengan rata-rata dari data
yang ada.
In [8]: dataset = dataset.fillna({
'age': dataset['age'].median(),
'HbA1c_level': dataset['age'].mean(),
})
missing_values_count
Out[9]: gender 0
age 0
hypertension 0
heart_disease 0
smoking_history 0
bmi 0
HbA1c_level 0
blood_glucose_level 0
diabetes 0
dtype: int64
import fuzzywuzzy
from fuzzywuzzy import process
Kata "No Info", "Not Info", dan "NoInfo" akan dikoreksi menjadi "No Info"
In [13]: # membuat fungsi untuk mengganti kata pada kolom tertentu
# pada dataframe berdasarkan rasio kemiripan
In [14]: # mengganti kata yang mirip dengan "No Info" pada kolom smoking_history
replace_inconsistent_data(df=dataset,
column='smoking_history',
string_to_match="No Info")
plt.figure(figsize=(4,3))
dataset.boxplot(column='age')
Out[16]: <AxesSubplot:>
Hasil : Ada dua record pada kolom age yang menunjukkan outliers dengan nilai 120
dan 140. Untuk itu diperlukan koreksi pada nilai tersebut dengan nilai yang wajar.
Dalam hal ini akan digunakan nilai median dari semua umur
In [18]: # cek kembali outlier dengan boxplot dan histogram plot pada kolom age
plt.figure(figsize=(8,3))
plt.subplot(1, 2, 1)
plt.boxplot(dataset['age'])
plt.subplot(1, 2, 2)
plt.hist(dataset['age'], edgecolor='white')
plt.show()
Hasil : Kolom age sudah menunjukkan nilai yang wajar.
D. Menangani Duplikasi Data (Deduplication)
Deduplikasi (deduplication) adalah proses mengidentifikasi dan
menghapus atau menggabungkan entitas ganda atau duplikat dalam
sebuah dataset atau basis data.
In [19]: # cek duplicate rows
duplicate = dataset[dataset.duplicated()]
duplicate
5. Data Preprocessing
Mempersiapkan data untuk digunakan sebagai dataset pada metode-
metode data mining
A. Menggunakan Label Encoder
Label encoder adalah teknik dalam pemrosesan data yang digunakan
untuk mengubah nilai-nilai kategori (label) dalam dataset menjadi nilai
numerik, sehingga memungkinkan algoritma machine learning untuk
bekerja dengan data kualitatif.
In [22]: # cek unique values pada gender
gender = dataset['gender'].unique()
gender
# ukuran untuk data test adalah 20% (0,2) dari total data
train, test = train_test_split(dataset, test_size=0.2)
Out[25]: (76919, 9)
In [26]: test.shape
Out[26]: (19230, 9)