Cara menggunakan real python

Bagaimana cara melakukan data wrangling dengan menggunakan bahasa pemograman Python. Data Wrangling merupakan langkah penting untuk sebagai Data Science.

Cara menggunakan real python

Photo by h heyerlein on Unsplash

Howdy Sysinfo? bagaimana kabar kalian hari ini semoga senantiasa diberi kesehatan, ya. Kali ini howdy sysinfo akan sharing ilmu dan pengalaman pribadi mengenai Data Wrangling menggunakan bahasa pemrograman Python. Modul ini admin dapatkan dari Online Course DQLab Academy, silahkan kunjungi website resminya untuk mengakeses kursus yang lengkap dan terstrukur.

Data wrangling adalah proses cleaning dan unifying kumpulan data (data set) yang komplek dan messy untuk memudahkan akses dan analisis.Dengan jumlah data dan sumber data yang tumbuh dan berkembang dengan cepat, maka penting bagi sejumlah besar data yang tersedia untuk diorganisasikan agar bisa analisis.Proses ini biasanya mencakup pengubahan / pemetaan data secara manual dari satu bentuk mentah ke format lain untuk memungkinkan konsumsi dan pengorganisasian data yang lebih nyaman.

Pada modul ini kita akan mempelajari materi sebagai berikut :

  1. Cara membaca data menggunakan library pandas
  2. Data Missing hingga normalisasi data.

Langsung saja ke materi pertama, disimak baik baik, ya.

Cara Membaca Data Menggunakan Pandas

Cara menggunakan real python

Pandas merupakan salah satu alternatif library yang sering digunakan untuk proses data wrangling. Pandas merupakan toolkit yang powerfull sebagai analisis data diawal dan pengenalan struktur dataset dalam Python. Mengaktifkan Pandas sangat mudah di dalam python. Cukup dengan melakukan import seperti dibawah ini.

import pandas

Untuk mempermudah akses dan mempersingkat penamaan biasanya import pandas menggunakan inisial seperti dibawah ini:

Import pandas as pd

Sebagai salah satu library untuk melakukan proses awal dari analisis data, pandas juga memiliki kemampuan untuk membaca berbagai macam jenis file. Format yang bisa dibaca oleh pandas ada berbagai macam, antara lain .txt, .csv, .tsv, dan lainnya. Pandas tidak hanya bisa membaca file saja, namun juga bisa merubah data dari file menjadi bentuk dataframe yang akhirnya nanti bisa diakses, diagregasi dan diolah.

Contoh :

import pandas as pdcsv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data.csv")print(csv_data)

Membaca file dengan menggunakan head()

Pada suatu kasus, data yang kita baca cukup banyak atau loading yang lama. Untuk memastikan data kita terbaca dengan baik dan bisa menampilkan data sebagian untuk ditampilkan secara benar, kita bisa memakai fungsi head().

import pandas as pdcsv_data = pd.read_csv(“https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data.csv")print(csv_data.head())

Output :

Cara menggunakan real python

Melakukan akses data kolom

Dalam suatu analisis data ada kalanya kita hanya butuh melakukan akses beberapa data saja dan tidak perlu harus menampilkan semua data. Pada pandas kita bisa melakukan akses dalam berbagai kebutuhan. Mulai dari hanya akses kolom tertentu ataupun baris tertentu. Pada sesi kali ini kita akan mencoba untuk melakukan akses beberapa kolom tertentu pada suatu dataset.

Pertama yang harus dilakukan untuk melakukan akses kolom adalah mengetahui nama-nama kolom yang ada.

import pandas as pd

csv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data.csv")

print(csv_data.columns)

Output :Index(['CustomerID', 'Genre', 'Age', 'Annual Income (k$)',
'Spending Score (1-100)'],
dtype='object')

Contoh :

import pandas as pd

csv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data.csv")

print(csv_data['Age'])

Output :0 19
1 21
2 20
3 23
4 31
5 22
6 35
7 23
8 64
9 30
10 67
11 35
12 58
13 24
14 37
15 22
16 35
17 20
18 52
19 35
20 35
21 25
22 46
23 31
24 54
25 29
26 45
27 35
28 40
29 23
..
170 40
171 28
172 36
173 36
174 52
175 30
176 58
177 27
178 59
179 35
180 37
181 32
182 46
183 29
184 41
185 30
186 54
187 28
188 41
189 36
190 34
191 32
192 33
193 38
194 47
195 35
196 45
197 32
198 32
199 30
Name: Age, Length: 200, dtype: int64

Melakukan akses data melalui baris

Selain melakukan akses data melalui kolom, dengan menggunakan pandas juga bisa melakukan akses dengan menggunakan baris. Berbeda dengan akses melalui kolom, fungsi untuk menampilkan data dari suatu baris adalah fungsi .iloc[i] dimana [i] menunjukan urutan baris yang akan ditampilkan yang dimana indexnya diawali dari 0.

import pandas as pd

csv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data.csv")

print(csv_data.iloc[5])

Ouput :CustomerID 6
Genre Female
Age 22
Annual Income (k$) 17
Spending Score (1-100) 76
Name: 5, dtype: object

Menampilkan suatu data dari baris dan kolom tertentu

Tidak hanya dengan menentukan dari kolom dan baris, dengan menggunakan pandas kita juga bisa memanggil suatu data dari suatu baris dan kolom tertentu dalam satu waktu.

import pandas as pdcsv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data.csv")
print(csv_data['Age'].iloc[1])
print("Cuplikan Dataset:")
print(csv_data.head())

Output :

Cara menggunakan real python

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.

import pandas as pd

csv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data.csv")
print("Menampilkan data ke 5 sampai kurang dari 10 :")
print(csv_data['Age'].iloc[5:10])

Output :Menampilkan data ke 5 sampai kurang dari 10 :
5 22
6 35
7 23
8 64
9 30
Name: Age, dtype: int64

Menampilkan informasi statistik dengan Numpy

Mengetahui informasi statistik pada suatu data sangat penting. Mulai dari distribusi data, nilai max atau min, hingga standar deviasi dari suatu dataset. Jika datanya berjumlah dibawah 10 mungkin masih dikerjakan secara manual. Namun, bayangkan jika datanya sudah mencapai ratusan bahkan ribuan. Tidak mungkin pastinya untuk dilakukan secara manual. Maka dari itu pentingnya fungsi describe() pada pandas. Fungsi describe() ini memungkinkan untuk mengetahui informasi statistik dari suatu dataset secara cepat.

import pandas as pd

csv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data.csv")

print(csv_data.describe(include='all'))

Output :CustomerID Genre Age Annual Income (k$) \
count 200.000000 200 200.000000 200.000000
unique NaN 2 NaN NaN
top NaN Female NaN NaN
freq NaN 112 NaN NaN
mean 100.500000 NaN 38.850000 60.560000
std 57.879185 NaN 13.969007 26.264721
min 1.000000 NaN 18.000000 15.000000
25% 50.750000 NaN 28.750000 41.500000
50% 100.500000 NaN 36.000000 61.500000
75% 150.250000 NaN 49.000000 78.000000
max 200.000000 NaN 70.000000 137.000000

Spending Score (1-100)
count 200.000000
unique NaN
top NaN
freq NaN
mean 50.200000
std 25.823522
min 1.000000
25% 34.750000
50% 50.000000
75% 73.000000
max 99.000000

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

import pandas as pd

csv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data.csv")

print(csv_data.describe(exclude=['O']))

Output :

Cara menggunakan real python

Data Missing dan Normalisasi Data

Cara menggunakan real python

Pada suatu dataset, ada kalanya data yang kita akan kita kelola tidak lengkap. Hal ini tentunya akan menyulitkan atau membuat hasil analisa tidak akurat. Penanggulangan akan data yang hilang ini biasa disebut Handling Missing Value. Penanganan dari nilai yang kosong ini banyak caranya. Sebagai seorang data science yang berhubungan dengan data yang real, solusi pertama yang benar-benar kita anjurkan untuk kasus seperti ini adalah melakukan trace kembali ke sumber data atau memerika ulang record. Terutama jika data itu berasal dari human record. Sangat disarankan untuk menelusuri kembali agar tidak terjadi kesalahan ketika sudah mencapai titik analisa. Selain solusi untuk melakukan penelusuran kembali ke sumberdata, pada ilmu data science juga ada beberapa metode yang bisa dijadikan solusi untuk menangani kasus ini.

Melakukan pengecekan untuk nilai NULL yang ada

Dengan menggunakan fungsi pandas, kita tidak perlu melihat satu persatu baris data untuk mengetahui apakah ada nilai kosong atau NULL/NAN pada suatu dataset. Bayangkan jika kita memilki 1000 baris data. Apakah kita harus melihat semua baris data tersebut? Tentu saja tidak. Maka dari itu di pandas disediakan fungsi untuk mengecek apakah ada data yang kosong.

import pandas as pd

csv_data = pd.read_csv("http://academy.dqlab.id/dataset/shopping_data.csv")
print(csv_data.isnull().values.any())

Output :False

Note : data yang digunakan merupakan data yang lengkap, maka dari itu output yang dihasilkan False.

Solusi mengisi Missing Value

Sebelum mengenal lebih banyak mengenai Solusi yang biasa ada pada kasus-kasus data science. Skema yang biasanya sering dalam pengelolaan data.

Cara menggunakan real python

Dalam diagram diatas, perlu diketahui bahwa kasus kehilangan data bisa diatasi dengan berbagai cara. Bahkan, melakukan penghapusan data juga merupakan solusi yang bisa menjadi pilihan apabila jika dirasa mengisi nilai kosong akan memberikan pengaruh yang kurang bagus terhadap analisa, atau apabila pertimbangan data yang dihapus atau data yang hilang sedikit dan tidak memberikan terlalu banyak sumbangsih untuk analisa yang akan dilakukan. Penghapusan data bisa langsung pada baris data tersebut atau langsung satu kolom data.

Pada solusi kedua yaitu menggunakan imputation (pengisian data yang kosong) bisa tergantung dari permasalahannya. Khusus untuk masalah yang berhubungan forecasting atau peramalan tergantung dari data yang ada (lebih lengkap bisa dilihat pada gambar). Khusus untuk general problem tergantung jenis datanya. Jika yang hilang data kategorikal atau bersifat string bisa menggunakna relasi antar kolom dengan Logistic Regression, jika numerical bisa menggunakan statistik sederhana dan linear regression. Pada sesi kali ini kita akan mencoba menangani data hilang dengan statistik sederhana, Mean dan Median.

Mengisi dengan Mean

Salah satu metode yang bisa dikatakan sebagai solusi yang umum pada kasus general data science adalah mengisi data kosong dengan menggunakan mean dari masing-masing kolom. Pertama kita harus menentukan mean dari masing-masing kolom. Pada pandas terdapat fungsi mean() untuk menentukan nilai mean dari masing-masing kolom. Mean sendiri digunakan untuk data yang memiliki sedikit sifat outlier/noisy/anomali dalam sebaran datanya maupun isinya.

import pandas as pd

csv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data_missingvalue.csv")
print(csv_data.mean())

Output :CustomerID 100.500000
Age 38.939698
Annual Income (k$) 61.005051
Spending Score (1-100) 50.489899
dtype: float64

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()

import pandas as pd

csv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data_missingvalue.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))

Output :

Cara menggunakan real python

Mengisi dengan Median

Berbeda dengan mean pada sesi sebelumnya, median digunakan untuk data-data yang memiliki sifat outlier yang kuat. Kenapa median dipilih? Median merupakan nilai tengah yang artinya bukan hasil dari perhitungan yang melibatkan data outlier. Pada beberapa kasus, data outlier dianggap mengganggu dan sering dianggap noisy karena bisa mempengaruhi distribusi kelas dan mengganggu analisa pada klasterisasi (clustering).

import pandas as pd

csv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/shopping_data_missingvalue.csv")
print(csv_data.median())

Output :CustomerID 100.5
Age 36.0
Annual Income (k$) 62.0
Spending Score (1-100) 50.0
dtype: float64

Normalisasi Data

Terkadang pada beberapa kasus, 1 kolom dengan kolom yang lain memiliki skala yang berbeda. Seperti cuplikan gambar di bawah ini :

Cara menggunakan real python

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 :

Cara menggunakan real python

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 pentingnya normalisasi. Normalisasi sangat penting, terutama untuk yang menggunakan perhitungan jarak dengan menggunakan metode apapun.

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.

Min-Max

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.

Cara menggunakan real python

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.

Cara menggunakan real python

Decimal Scaling

Cara menggunakan real python

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.

Cara menggunakan real python

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

Cara menggunakan real python

Praktek Normalisasi menggunakan Scikit Learn pada Python

Scikit Learn merupakan library pada python yang digunakan untuk machine learning dan data science. Salah satu library yang selalu menjadi favorit dan komunitasnya sangat kuat. Scikit-learn sendiri tidak hanya untuk analytics saja, namun juga untuk pre-processing, feature selection, dan proses analysis lainnya.

import pandas as pd
import numpy as np
from sklearn import preprocessing

csv_data = pd.read_csv("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/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

Kemudian :

X = array[:,2:5] #memisahkan fitur dari dataset. 
Y = array[:,0:1] #memisahkan class dari dataset

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))

min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0,1)) #inisialisasi normalisasi MinMax
data = min_max_scaler.fit_transform(X) #transformasi MinMax untuk fitur
dataset = pd.DataFrame({'Age':data[:,0],'Income':data[:,1],'Spending Score':data[:,2],'Customer ID':array[:,0],'Gender':array[:,1]})

print("dataset setelah dinormalisasi :")
print(dataset.head(10))

Ouput :

Cara menggunakan real python

Untuk materi pada modul ini sudah selesai, pada modul selanjutnya saya akan sharing modul pandas, pada materi tersebut kita akan mengupas tuntas tentang Library Pandas secara legkap dan mendalam, ikutin terus ya dan di simak baik baik langkah per langkah nya, semoga ilmu nya bermanfaat bagi kita semua, dan jangan lupa kunjungi website DQLab Academy untuk mendapatkan materi pembelajaran yang lengkap dan struktur dilengkapi dengan studi kasus dan live code.

Sekian dan terima kasih.