FM22 Data Playground: Data Collection and Cleaning (Part 2)
Heyyooo Readers!! Kali ini aku bakal lanjutin FM22 Data Playground Series. Melanjutkan Data Collection and Cleaning (Part 1), sekarang aku akan melakukan Data Cleaning sesuai dengan yang udah aku identifikasi di Part sebelumnya. Untuk membangkitkan ingatan di Part sebelumnya, berikut aku tampilkan data yang berhasil diperoleh dari gim Football Manager 22 kedalam bentuk Dataframe.
Remove Whitespace
Coba perhatikan deh tampilan data berikut ini.
Begitu banyak whitespace yang mengotori data. Bahkan nama kolomnya pun juga terkontaminasi oleh whitespace ini. Sehingga proses Data Cleaning yang paling pertama, aku akan menghapus whitespace baik yang ada di nama kolom maupun di setiap cell. Untuk mengatasi hal ini, aku pake fungsi strip()
. Kalo definisi di dokumentasinya Pandas, fungsi ini bisa digunakan untuk menghapus karakter whitespace di awal dan akhir. Karena ada fungsi yang kiri aja, yaitu lstrip()
dan kanan aja, yaitu rstrip()
.
Oiya sebelumnya, untuk selanjutnya dataframe aku simpan di variable datafm yang isinya merupakan copy-an dari variable dataset. Kenapa? Teknis aja sih, biar kalo mau olah data ulang, ga perlu baca excelnya lagi.
datafm = dataset.copy()#Remove Whitespace in Columns
datafm.columns = datafm.columns.str.strip()
#Remove Whitespace in Cell
for i in datafm.columns:
if datafm[i].dtype == 'object':
datafm[i] = datafm[i].str.strip()
else:
pass
Berikut tampilan setelah aku hapus whitespacenya. Jauh lebih baik lah yaa.
Update Format Height, Weight, Transfer Value dan Wage
Berikutnya aku mau update format Height, Weight, Transfer Value dan Wage agar mudah untuk diagregasi kedepannya. Kalo dilihat dataframe terakhir, masih ada lambang kurs Poundsterling nya di Transfer Value dan Wage. Kemudian di Wage masih ada tanda p/w, atau wage per minggu dan di Transfer Value masih ada suffix M dan K. Selain itu juga di Height dan Weight masing-masing masih ada satuan cm dan kg.
Pertama aku update format Height, Weight dan Wage dulu yaa. Aku pake fungsi replace untuk mengganti karakter ‘ cm’, ‘ kg’, ‘£’, ‘ p/w’, dan ‘,’ dengan no karakter.
#Update Format Kolom Height, Weight, dan Wagedatafm['Height'] = datafm['Height'].str.replace(' cm','')
datafm['Weight'] = datafm['Weight'].str.replace(' kg','')
datafm['Wage'] = datafm['Wage'].str.replace('£','')
datafm['Wage'] = datafm['Wage'].str.replace(' p/w','')
datafm['Wage'] = datafm['Wage'].str.replace(',','')
Selanjutnya aku update format Transfer Value. Ada tiga tahap untuk update format Transfer Value. Pertama memisahkan yang nilainya berinterval, dan memilih salah satu diantaranya.
for i in range(len(datafm)):
datafm['Transfer Value'][i] = datafm['Transfer Value'][i].split(' - ')[0]
Aku pake fungsi split()
dengan parameter pemisahnya yaitu ‘-’ atau strip. Setelah terpisah, keluarannya akan berbentuk list. Contohnya Kevin De Bruyne, dengan nilai £212M-£231M, maka akan menjadi [‘£212M’ , ‘£231M’]. Selanjutnya aku pilih salah satu diantaranya, yaitu dengan indeks [0], yang merupakan batas bawah dari nilai tersebut. Kenapa yang dipilih batas bawah? Sebenernya bebas sih, cuma pake asumsi aja, ceritanya kalo beli sesuatu yang dikasih interval, maka pilih harga termurah.
Selanjutnya, mengganti karakter kurs £ dengan no karakter.
datafm['Transfer Value'] = datafm['Transfer Value'].str.replace('£','')
Terakhir, mengalikan nilai yang ber-suffix M dengan 1000000 dan nilai yang ber-suffix K dengan 1000.
def value_to_int(df_value):
try:
value = df_value[:-1]
suffix = df_value[-1:]
if suffix == 'M':
value = int(value) * 1000000
elif suffix == 'K':
value = int(value) * 1000
else:
value = df_value
except ValueError:
value = 0
return valuefor x in range(len(datafm['Transfer Value'])):
datafm['Transfer Value'][x] = value_to_int(datafm['Transfer Value'][x])
Konsepnya sederhana, pertama memisahkan antara nilai dan suffix nya, masing-masing ke variable value
dan suffix
. Kalo suffix
nya M, maka value dijadikan integer, kemudian dikali 1000000. Kalo K juga sama, bedanya dikali dengan 1000. Kalo ga ada suffix
nya, maka nilai tetap apa adanya. Berikut setelah Transfer Value dan Wage diubah formatnya.
From this
To this
Null Handling pada Kolom Wage
Terdapat dua jenis data yang akan aku ubah, data yang bernilai N/A dan data yang bernilai ‘-’ atau strip. Masing-masing akan aku ganti dengan ‘Unknown Wage’ untuk yang N/A, dan bernilai 0 untuk yang ‘-’ atau strip.
datafm['Wage'] = datafm['Wage'].replace('N/A','Unknown Wage')
datafm['Wage'] = datafm['Wage'].str.replace('-','0')
Null Handling pada Kolom Club dan Division
Pemain yang Wage-nya udah aku ubah menjadi 0, memang merupakan pemain-pemain yang nilai di Kolom Club No Karakter. Karena status mereka di gim yaitu memang ga punya Club. Sedemikian sehingga, di Data Cleaning ini, aku ubah data nya menjadi ‘No Club’.
Sekalian juga ternyata yang di Kolom Division. Ternyata data mereka di kolom tersebut bernilai ‘-’. Jadi aku akan ubah juga data tersebut menjadi ‘No Division’.
datafm['Club'] = datafm['Club'].replace('','No Club')
datafm['Division'] = datafm['Division'].replace('-','No Division')
Rename Nama Kolom Nat dan Nat.1
Tidak terasa, kita sudah di penghujung Data Cleaning, yaitu aku mau rename kolom Nat jadi Nation, dan Nat.1 jadi Natural Fitness. Cuma butuh satu line aja kok. Oiyaa aku juga pake paramater inplace=True, yang berfungsi untuk otomatis mengubah dan menyimpan perubahannya di variabel itu sendiri.
datafm.rename(columns={'Nat':'Nation', 'Nat.1':'NatFin'}, inplace=True)
Berikut penampakan akhir Dataframe yang kita punya.
Terakhir, aku extract Dataframe tersebut menjadi csv. Tujuannya untuk disimpan aja sih guna beberapa studi kasus berikutnya.
datafm.to_csv('datafm22.csv', index=False)
Prinsip dari Data Cleaning menurutku disesuaikan dengan konteks kebutuhan kita ketika kedepannya hendak mau menganalisa data tersebut seperti apa. Sehingga asumsi atau pilihan mengubah data yang dilakukan bisa saja berbeda-beda sesuai dengan kebutuhan masing-masing. Terlebih kalau kebutuhannya untuk Data-driven Organization, ingat “Garbage in, Garbage Out”.
Segitu dulu yaa FM22 Data Playground seri Data Collection dan Cleaning. Dokumentasi notebook, data excel dan keluarannya berupa csv aku simpan di Github yaa.
Senang belajar bersama kalian, terima kasih :)