Pada modul ini akan dibahas implementasi missing value ratio untuk melakukan feature selection menggunakan Python.
Data yang digunakan bisa download di https://drive.google.com/file/d/1zkYF7Ihyi8ycM_Al-4Lu-Yp9KYhhFX8_/view?usp=sharing
Import library yang digunakan, yaitu pandas.
import pandas as pd
Load data melb_data.csv ke pandas dataframe menggunakan perintah pd.read_csv().
df = pd.read_csv('melb_data.csv')
Periksa missing value pada dataset dengan menggunakan perintah missing_val = df.isnull().sum().sort_values(ascending=False). Lalu tampilkan data tersebut untuk melihat column mana saja yang memiliki missing value.
missing_val = df.isnull().sum().sort_values(ascending=False) missing_val.head()
BuildingArea 6450
YearBuilt 5375
CouncilArea 1369
Car 62
Propertycount 0
dtype: int64
Dapat dilihat dari return diatas, colomn BuildingArea, YearBuild, CouncilArea dan Car memiliki missing value. Mari kita lihat rationya untuk memutuskan column mana yang akan dibuang dari feature.
datasize = df.shape[0] (df.isnull().sum() / datasize).sort_values(ascending=False)
BuildingArea 0.474963
YearBuilt 0.395803
CouncilArea 0.100810
Car 0.004566
...
...
...
BuildingArea dan YearBuilt memiliki missing value diatas 35%, kemungkinan sulit untuk melakukan replacement. Untuk CouncilArea dan Car ada kemungkinan bisa dilakukan replacement.
Gunakan fungsi describe untuk melihat gambaran data. Fungsi describe akan menghitung nilai mean, dan quartile.
df[['BuildingArea', 'YearBuilt', 'CouncilArea', 'Car']].describe()
BuildingArea YearBuilt Car
count 7130.000000 8205.000000 13518.000000
mean 151.967650 1964.684217 1.610075
std 541.014538 37.273762 0.962634
min 0.000000 1196.000000 0.000000
25% 93.000000 1940.000000 1.000000
50% 126.000000 1970.000000 2.000000
75% 174.000000 1999.000000 2.000000
max 44515.000000 2018.000000 10.000000
Perhatian, fungsi describe adalah fungsi untuk colomn tipe data numeric, oleh karena itu column councilArea tidak tampil.
Dapat dilihat, median dari Car adalah 2, kita gunakan nilai ini untuk melakukan replacement data missing value column car.
Dengan menggunakan data median, central tendency dari dataset tidak akan berubah.
df['Car'] = df['Car'].fillna(df['Car'].median())
Missing value berikutnya adalah CouncilArea. Pendekatan yang digunakan adalah replacement dengan data yang paling sering muncul, yaitu mode.
df['CouncilArea'].mode()
0 Moreland
Return dari perintah mode diatas adalah Moreland. Data ini akan kita gunakan untuk replace data CouncilArea missing value.
df['CouncilArea'] = df['CouncilArea'].fillna(df['CouncilArea'].mode()[0])
Column yang tersisa adalah BuildingArea dan YearBuilt. Karena missing value diatas 39%, sulit untuk melakukan replacement tanpa membuat data menjadi bias.
Pendekatan yang dilakukan adalah dengan membuang column tersebut dari dataset. Fungsi yang digunakan adalah df.dropna() dengan threshold 10% missing value, artinya column dengan missing value diatas 10% akan di buang.
df.dropna(thresh=(df.shape[0]* .9), axis=1, inplace=True)
Cek dataset column dengan perintah df.columns, dapat dilihat BuildingArea dan YearBuilt sudah didrop dari dataset.
df.columns
Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG',
'Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Car',
'Landsize', 'CouncilArea', 'Lattitude', 'Longtitude', 'Regionname',
'Propertycount'],
dtype='object')
Bisa juga lakukan pemeriksaan dengan perintah df.isnull().sum() untuk memastikan tidak ada missing value yang tersisa.
df.isnull().sum()
Suburb 0
Address 0
Rooms 0
Type 0
Price 0
Method 0
SellerG 0
Date 0
Distance 0
Postcode 0
Bedroom2 0
Bathroom 0
Car 0
Landsize 0
CouncilArea 0
Lattitude 0
Longtitude 0
Regionname 0
Propertycount 0
dtype: int64
Langkah terakhir, adalah menyimpan dataset yang telah diproses ke file baru.
df.to_csv('melb_data_processed.csv', index=False)
Dengan demikian kita sudah melakukan simulasi feature selection dengan menggunakan ratio missing value. Semoga bermanfaat.