Persiapan Data

Sebelum melakukan sesuatu yang besar, ada baiknya kita harus melakukan persiapan terlebih dahulu. Semakin baik persiapannya, hasilnya juga akan semakin baik. Setidaknya hasil yang didapat tidak melenceng jauh dari tujuan awal. Oleh karena itu, untuk melakukan analisis sebuah data, atau dalam istilah lain disebut dengan istilah big data analysis, maka beberapa persiapan harus dilakukan. Dalam kaitan dengan pemrograman machine learning, maka persiapan ini juga adalah hal yang sebaiknya dilakukan. Persiapan ini saya namakan dengan istilah data preparation.

Beberapa alasan mengapa data preparation ini harus dilakukan:

  • Data yang dimiliki tidak ideal, misal ada bagian data yang hilang (missing values)
  • Format data tidak sama
  • Datanya tidak cukup
  • Variabel dependen dan variabel independen belum jelas

Semisal, kita memiliki data pelanggan dari beberapa negara (France, Spain, Germany), usia mereka, gaji mereka per tahun (dalam euro) dan keputusan membeli produk atau tidak:

Anggap data di atas adalah data apa adanya. Dapat dilihat pada kolom Usia dan Gaji, ada data yang hilang. Lalu apa langkah-langkah apa saja yang harus dilakukan?

  • Langkah pertama adalah tentukan dulu apa tujuan yang diinginkan. Tujuan yang dimaksud adalah variabel dependen (dependent variable). Pada data di atas, kita ingin menentukan apakah seorang calon pelanggan akan memutuskan membeli produk atau tidak. Maka, kolom ‘Beli’ merupakan variabel dependennya.
  • Langkah selanjutnya adalah menginput data ke Python atau R. Anda bisa mendownloadnya dengan klik link ini.
  • Kemudian kita proses untuk data yang hilang dengan cara mencari nilai rataan data-data di sekitarnya sebagai pengisi data yang hilang dengan menggunakan Imputer (untuk python saja, R tidak perlu)
  • Mendefinsikan data independen dan dependen variabel ke dalam program

 

Bahasa Python

Jika Anda belum mengerti sama sekali apa itu Python, silakan buka artikel saya ini.

Script python nya dapat dilihat sebagai berikut:

# Import dari library python
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Import data ke python
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 3].values

# Memproses data yang missing
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0)
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])

# Encoding categorical data
# Encoding the Independent Variable
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()

# Encoding the Dependent Variable
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)

Penjelasan:

  • Line 2 adalah proses import library numpy. Numpy adalah library python yang sangat populer untuk melakukan proses aritmatika. Karena ML (machine learning) selalu berhubungan dengan proses aritmatika, maka library ini akan selalu dipakai. Perintah import numpy as np, digunakan untuk mempermudah penulisan. Sehingga kelak, jika ingin memanggil numpy cukup menulis np saja.
  • Line 3 adalah proses import library matplotlib, Karena yang kita inginkan adalah sublibrary dari matplotlib yang disebut dengan pyplot, maka penulisannya ditambahkan dengan titik menjadi import matplotlib.pyplot as plt. Untuk apa pyplot? Sublibrary ini digunakan untuk membuat grafik-grafik menarik. Misal kita ingin menampilkan hasil proses ML kita, maka langkah terbaiknya adalah menampilkannya secara visual. Dan pyplot merupakan sublibrary yang sangat baik untuk ini. Untuk mempermudah, kita menyingkatnya sebagai plt.
  • Line 4 adalah proses import library panda. Kita memberi perintah dengan menulis import panda as pd. Panda adalah library yang sangat populer untuk mengimpor dataset, dan memanage dataset. Untuk mempermudah penulisan, kita singkat sebagai pd.
  • Sebelum mengimport dataset (Data.csv) yang sudah Anda download, pastikan folder di mana Anda menyimpan dataset ini sudah disetting sebagai working directory. Caranya mudah, cukup buka spyder, dan lihat icon bagian kanan atas, bentuknya seperti sebuah folder. Klik foder ini, kemudian pastikan Anda memilih folder di mana Anda menyimpat datasetnya. Jika berhasil, coba eksekusi line 7. Jika berhasil maka di bagian Variable explorer, Anda bisa melihat dataset Anda (double click untuk melihat isinya). Jika berhasil, tampilannya akan seperti ini

  • Line 7 merupakan perintah untuk mengimpor variabel (Data.csv) dan mendefinisikannya sebagai dataset. Tentu nama variabelnya bebas, namun kali ini kita menamainya sebagai dataset.

Langkah selanjutnya adalah mendefinisikan mana variabel dependen dan independen. Karena kita ingin memprediksi keputusan apakah calon pelanggan akan membeli atau tidak, maka kolom ‘Beli’ akan menjadi variabel dependen. Keputusan ini ditentukan oleh 3 variabel independen, sehingga ketiga variabel ‘Negara’, ‘Usia’, dan ‘Gaji’ menjadi variabel independen.

  • Line 8 dan 9 adalah perintah untuk menentukan X sebagai variabel dependen, dan Y sebagai variabel independen. Kita akan melakukan teknik slicing untuk memilih kolom yang tepat.

Langkah selanjutnya adalah mengatasi data yang hilang. Dalam dataset yang kita miliki pada kolom ‘Usia’ dan ‘Gaji’ ada baris yang kosong (nan). Bisa saja kita membuang baris yang memiliki data kosong, namun akan ada argumen muncul, bagaimana jika baris yang hilang sebenarnya memiliki data atau nilai yang sangat berguna? Maka, solusi bijaknya (dari berbagai sumber) adalah mengisinya dengan nilai rataan dalam satu kolom. Misal data hilang pada kolom ‘Usia’ diisi dengan rataan dari semua data pada kolom ‘Usia’.

  • Line 12 mengimpor library scikit-learn dan menggunakan sublibrary preprocessing dan menggunakan classImputer. Perlu diketahui bahwa library scikit-learn adalah library ML yang populer di python.
  • Line 13 adalah menentukan parameter yang tepat. Tips: arahkan kursor pada Imputer lalu ketik bersamaan ‘CTRL+i’ maka akan memunculkan tampilan help. Di situ kita bisa melihat parameter apa saja yang diperlukan untuk mengeksekusi Imputer. Dalam pembelajaran kali ini kita memilih parameter missing_values diisi dengan ‘NaN’ karena dataset yang kosong merupakan nan, strategy kita pilih mean (rataan) karena kita ingin mengisinya dengan nilai rata-rata dan axis = 0 karena kita ingin mengisi dengan rataan dalam satu kolom).  Kita mendefinisikannya juga dengan nama imputer (huruf depan i kecil). Tentu saja pemilihan nama ini bebas.
  • Line 14 adalah mempersiapkan pengisian baris yang hilang. Kita memilih metode fit (metode adalah syntax di belakang titik dari sebuah variabel atau argumen, misal imputer.fit. Perhatikan bahwa kolom yang ingin kita isi hanya ‘Usia’ dan ‘Gaji’, sehingga kita memilih kolom  X index 1 dan 2 saja. Perhatikan penulisannya adalah menggunakan i kecil (imputer dan bukan Imputer. Imputer adalah perintah dari sklearn, namun imputer adalah nama variabel hasil Imputer).
  • Line 15 adalah mengimplementasikan baris yang hilang. Kita lakukan dengan mendefinisikan baris dan kolom X, diisi dengan imputer.transform(X[:, 1:3]). Perhatikan bahwa X semua baris dan kolom 1 sampai 2, diisi oleh imputer X semua baris kolom 1 sampai 2 juga. Jika ingin melihat apakah proses ini berhasil, ketikkan X di bagian console. Hasilnya akan tampak seperti ini:

Kemudian, kita ingin melakukan proses encode untuk data kategori. Perlu diketahui, dataset yang kita miliki memiliki 2 kolom yang sifatnya kategori (categorical) yaitu kolom ‘Negara’ dan ‘Beli’. Kolom ‘Negara’ memiliki 3 kategori yaitu France, Spain dan Germany, sementara kolom ‘Beli’ memiliki 2 kategori yaitu Yes atau No.

Pertanyaannya, mengapa encoding kategori ini penting? Hal ini karena proses machine learning merupakan proses matematis, sehingga tidak mungkin data kategori diproses dengan cara matematis juga bukan? Oleh karena itu, data jenis kategori ini kita konversi (encode) menjadi sebuah format angka agar bisa dilakukan proses matematis.

  • Baris 19 adalah proses import class LabelEncoder dan OneHotEncoder dari scikit-learn.
  • Mirip dengan proses sebelumnya, baris ke 20 adalah proses LabelEncoder yang kita namai Labelencoder_X. Kita namai demikian karena kita ingin menkonversi independen variabel X (‘Beli’). Cukup mengetik LabelEncoder() tanpa parameter apapun di dalamnya.
  • Baris ke 21 adalah implementasi LabelEncoder dengan metode fit_transform. Mengapa bukan fit namun justru fit_transform? Secara gampang, metode fit adalah proses perhitungannya, sementara transform adalah proses pengisiannya (implementasi hasilnya ke dalam variabel yang diinginkan), dan fit_transform adalah penggabungan keduanya. Sehingga setelah melakukan proses encoding kita juga ingin menginputkannya sekaligus. Kita memilih kolom ‘Negara’, oleh karena itu index nya semua baris dan kolom ke nol. Sekarang, coba eksekusi X di console, maka akan tampak sebagai berikut:

France dikonversi menjadi 0, Spain menjadi 2 dan Germany menjadi 1.

Proses konversi ini berhasil mengonversi data kategori menjadi angka. Namun muncul masalah baru, apakah angka 2 (Spain) berarti lebih besar dari 1 (Germany) dan 0 (France)? Tentu saja kita tidak menginkan demikian. Tujuan awal kita hanya mengonversi ke angka saja. Namun jika hanya sampai di sini, maka python akan menganggap 2 lebih besar 1, 100 lebih besar dari 50 dst. Oleh karena itu kita memerlukan apa yang disebut dengan dummy variable.

Ide dari dummy variable ini adalah karena ‘Negara’ memiliki 3 jenis kategori (0,1 dan 2), maka kita butuh 3 kolom. Ilustrasinya dapat dilihat sebagai berikut:

Jadi kolom France hanya memiliki nilai 1 jika nama negaranya memang France, begitu pula Spain dan Germany. Di balik layar, sebenarnya apa yang dilakukan adalah membuat matrix [jumlah data x jumlah kategori].

  • Baris ke 22 adalah perintah OneHotEncoder dengan parameter categorical_features=[0]. Artinya kolom yang ingin kita encode adalah kolom index ke 0 (kolom pertama).
  • Baris ke 23 adalah transformasi dummy variabel hasil encode tadi. Perhatikan ktia tidak perlu menulis index variabel X, karena di line 22 sudah kita jelaskan indexnya adalah index ke nol. Perhatikan juga penulisan metode terakhir adalah .toarray. Ini adalah penulisan transformasi dari scikit-learn. Jadi diikuti saja. Jika ingin melihat hasilnya, klik dua kali pada variabel X di tab Variable explorer. Hasilnya akan tampak seperti berikut:

  • Line 26 dan 27 adalah proses encoding untuk variabel dependen ‘Beli’. Karena ia hanya memiliki dua kategori yaitu Yes (1) dan No (0), maka tidak memerlukan OneHotEncoder. Mengingat kita hanya ingin memproses kategori Yes (1) saja.

 

Bahasa R

# Mengimpor dataset
dataset = read.csv('Data.csv')

# Memproses data yang hilang
dataset$Usia = ifelse(is.na(dataset$Usia),
                     ave(dataset$Usia, FUN = function(x) mean(x, na.rm = TRUE)),
                     dataset$Usia)
dataset$Gaji = ifelse(is.na(dataset$Gaji),
                        ave(dataset$Gaji, FUN = function(x) mean(x, na.rm = TRUE)),
                        dataset$Gaji)

# Konversi data kategori
dataset$Negara = factor(dataset$Negara,
                         levels = c('France', 'Spain', 'Germany'),
                         labels = c(1, 2, 3))
dataset$Beli = factor(dataset$Beli,
                           levels = c('No', 'Yes'),
                           labels = c(0, 1))

Semua proses dalam bahasa python tadi juga sama persis dilakukan juga dalam penulisan bahasa R. Hanya saja beberapa proses dan teknisnya saja yang berbeda. Penulisan bahasa R memang lebih ringkas dan biasanya lebih sedikit dengan hasil yang sama persis. Itu semua tergantung preferensi Anda sebagai seorang pembuat program.

Jika sudah melakukan semua proses di atas (bahasa python ataupun R) maka proses persiapan selesai. Setelah preprocessing ini, maka langkah selanjutnya adalah membagi data menjadi dua bagian yaitu train set dan test set.

Leave a Reply

avatar
  Subscribe  
Notify of