BAB 4 - Data Wrangling Python
BAB 4 - Data Wrangling Python
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
print(csv_data)
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
print(csv_data.head())
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
print(csv_data.columns)
Hasil pada panel console akan keluar seperti berikut :
Note : Pada dataset ini ada 5 kolom termasuk class, dimana 4 kolom merupakan
data numerik dan 1 kolom merupakan data string. Pada praktek selanjutnya kita
akan mencoba mengakses data age. Untuk melakukannya coba tuliskan kode di
bawah ini :
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
print(csv_data['Age'])
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
print(csv_data.iloc[5])
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
print(csv_data['Age'].iloc[1])
print("Cuplikan Dataset:")
print(csv_data.head())
Menampilkan data dalam range tertentu
Setelah menampilkan suatu kelompok data, bagaimana jika ingin menampilkan data
dari baris ke 5 sampai ke 20 dari suatu dataset? Untuk mengantisipasi hal tersebut,
pandas juga bisa menampilkan data dalam range tertentu, baik range untuk baris
saja, kolom saja, dan range untuk baris dan kolom.
Akses range pada suatu kolom dan baris tertentu, untuk mencobanya silahkan
ketikkan kode di bawah ini :
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
print(csv_data['Age'].iloc[5:10])
Menampilkan suatu range data tertentu pada suatu baris saja. Cobalah ketikan
kode di bawah ini :
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
print(csv_data.iloc[5:10])
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
print(csv_data.describe(include='all'))
Note : Banyak nilai NaN yang tampil. Hal itu karena pada dataset ada format data
string yang akhirnya memunculkan format NaN.
Untuk meminimalisir hal tersebut dan memfilter hanya data numerical saja,
digunakan exclude=[‘O’], dimana fungsi itu akan mengabaikan data yang non-
numerical untuk diproses. Coba implementasikan code di bawah ini:
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
print(csv_data.describe(exclude=['O']))
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
print(csv_data.isnull().values.any())
Note : data yang digunakan merupakan data yang lengkap, maka dari itu output
yang dihasilkan False. Coba Sekarang ganti dengan dataset yang memang terdapat
data yang kosong. Coba ketikkan kode di bawah ini :
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data_missingval
ue.csv")
print(csv_data.isnull().values.any())
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data_missingval
ue.csv")
print(csv_data.mean())
Fungsi mean sendiri berfungsi untuk menampilkan nilai mean (rata-rata) dari setiap
kolom. Nilai inilah nanti yang akan mengisi nilai kosong dari dataset yang mengalami
kasus missing value. Untuk mengisi nilai yang kosong menggunakan fungsi fillna(),
coba ketikkan kode di bawah ini :
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data_missingval
ue.csv")
print(csv_data.mean())
print("Dataset yang masih terdapat nilai kosong ! :")
print(csv_data.head(10))
csv_data=csv_data.fillna(csv_data.mean())
print("Dataset yang sudah diproses Handling Missing Values dengan Mean :")
print(csv_data.head(10))
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data_missingval
ue.csv")
print(csv_data.median())
Klik Tombol
Hasil pada panel console akan keluar seperti berikut :
CustomerID 100.5
Age 36.0
Annual Income (k$) 62.0
Spending Score (1-100) 50.0
dtype: float64
Sama dengan sesi sebelumnya dengan mean(), gunakan kode di bawah ini untuk
mengisi nilai yang kosong menggunakan fungsi fillna() :
import pandas as pd
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data_missingval
ue.csv")
print("Dataset yang masih terdapat nilai kosong ! :")
print(csv_data.head(10))
csv_data=csv_data.fillna(csv_data.median())
print("Dataset yang sudah diproses Handling Missing Values dengan Median :")
print(csv_data.head(10))
Normalisasi Data
Terkadang pada beberapa kasus, 1 kolom dengan kolom yang lain memiliki skala
yang berbeda. Seperti cuplikan gambar di bawah ini :
No Usia Masa Kerja (Tahun) Gaji
1 50 30 10000000
2 30 10 5000000
Antara Usia dan Masa Kerja masih memiliki range yang sama dalam skala puluhan.
Namun, jika kolom Usia dan Masa Kerja dibandingkan dengan Gaji memiliki range
nilai yang berbeda, dimana Usia dan Masa Kerja memiliki range puluhan dan Gaji
mempunyai range nilai jutaan. Memang terlihat sederhana, namun hal ini bisa
menjadi masalah besar dalam contoh kasus klasterisasi atau klasifikasi. Masuk pada
kasus K-means yang sudah pernah dibahas sebelumnya. K-means merupakan
algoritma klasterisasi (clustering) yang menggunakan perhitungan jarak dalam
prosesnya. Sekarang coba bayangkan :
GAMBAR 4.2
Jika tidak ada normalisasi, maka jelas perhitungan kmeans diatas akan tergantung
pada Gaji. Kenapa? Karena gaji berdomain jutaan dan 2 kolom lainnya hanya
berdomain puluhan. Berapapun usia dan masa kerja seseorang tidak akan
berpengaruh terhadap penilaian suatu perusahaan. Perbedaan skala pada setiap
kolom ini merupakan hal yang sangat wajar dan sering terjadi dan inilah pen
Metode Normalisasi
Ada berbagai macam metode normalisasi, seperti MinMax, Zscore, Decimal Scaling,
Sigmoid, dan Softmax. Pemakaiannya tergantung pada kebutuhan dari dataset dan
jenis analisa yang dilakukan.
MinMax
Metode Min-Max merupakan metode yang cukup bisa dibayangkan karena termasuk
metode normalisasi yang bersifat linier dengan data aslinya. Namun, metode ini bisa
menyebabkan out of bound pada beberapa kasus.
GAMBAR 4.3
Kenapa bisa terjadi out of bound? Out of Bound terjadi apabila ada data baru masuk,
dimana data tersebut melebihi nilai maksimal atau nilai minimal dari data yang sudah
ada. Secara otomatis, perhitungan yang berlaku pada data yang sudah diperoleh
tadi harus diulangi lagi semuanya dengan data baru yang masuk atau data baru
yang mempunyai nilai maksimal/minimum yang melebihi tadi tidak bisa diproses.
Karena kekurangan inilah MinMax tidak cocok untuk analisa real time / evolving
system. Dimungkinkan dalam kasus-kasus terjadi kasus out of bound pada MinMax.
MinMax sangat dianjurkan untuk kasus-kasus berbasis time frame analisis dan
forecasting. Perhitungan dari metode ini cukup mengurangi data yang asli dengan
nilai minimal dari fitur tersebut, kemudian hasil tersebut dikalikan dari hasil
pengurangan nilai maximal yang baru dengan nilai minimal yang baru dan kemudian
dibagi dengan nilai max dan min data di setiap fitur terakhir ditambah dengan nilai
min yang baru.
Z-Score
Zscore adalah metode yang sering digunakan dalam berbagai penelitian berbasis
data mining atau data science. Z-score merupakan metode normalisasi yang
berdasarkan mean (nilai rata-rata) dan standard deviation (deviasi standar) dari
data. Kenapa Z-Score sangat populer? Selain tidak banyak variabel yang diset
dalam perhitungannya. Z-Score sangat dinamis dalam melakukan perhitungan
normalisasi. Kelemahan dari Z-Score adalah prosesnya akan terulang lagi jika ada
data baru yang masuk. Selain itu elemen yang dibutuhkan untuk perhitungan Z-
Score juga membutuhkan proses yang cukup lama baik standar deviation ataupun
rata-rata dari setiap kolom.
GAMBAR 4.4
Decimal Scaling
GAMBAR 4.5
Softmax
Softmax merupakan metode normalisasi pengembangan transformasi secara linier.
Output range-nya adalah 0-1. Metode ini sangat berguna pada saat data yang ada
melibatkan data outlier.
GAMBAR 4.6
Sigmoid
Sigmoidal merupakan metode normalization melakukan normalisasi data secara
nonlinier ke dalam range -1 s/d 1 dengan menggunakan fungsi sigmoid. Metode ini
sangat berguna pada saat data yang ada melibatkan data outlier. Data outlier adalah
data yang keluar jauh dari jangkauan data lainnya
GAMBAR 4.7
import pandas as pd
import numpy as np
from sklearn import preprocessing
csv_data =
pd.read_csv("https://storage.googleapis.com/dqlab-dataset/shopping_data.csv")
array = csv_data.values
X merupakan matriks yang berisi fitur dataset yang akan digunakan dalam machine
learning, baik untuk regresi, klasifikasi, pengklusteran, atau normalisasi
Pada kasus kita, X berisi fitur-fitur yang digunakan untuk dinormalisasi dengan
teknik min-max scaler
Ketik lanjutan dari kode di atas:
dataset=pd.DataFrame({'Customer
ID':array[:,0],'Gender':array[:,1],'Age':array[:,2],'Income':array[:,3],'Spending
Score':array[:,4]})
print("dataset sebelum dinormalisasi :")
print(dataset.head(10))