Cara menggunakan PANDSA pada Python

Data cleansing atau data cleaning merupakan suatu proses mendeteksi dan memperbaiki (atau menghapus) suatu record yang ‘corrupt’ atau tidak akurat berdasarkan sebuah record set, tabel, atau database. Selain itu, data cleansing juga berguna untuk mengidentifikasi bagian data mana yang tidak lengkap, tidak tepat, tidak akurat atau tidak relevan, yang selanjutnya untuk data-data “kotor” tersebut akan diganti, dimodifikasi, atau dihapus -Wikipedia.

Figure Eight Survey, 2016

Berdasarkan survey yang diselenggarakan oleh Figure Eight pada tahun 2016, diperoleh bahwa, rata-rata seorang Data Scientist menghabiskan waktu sebesar 57% untuk membersihkan dan meng-organize data. Proses ‘membersihkan’ data merupakan salah satu step yang sangat penting, karena data yang ‘kotor’ akan mempengaruhi tingkat akurasi dari analisis maupun prediksi yang akan dilakukan.

Pada tulisan ini, akan dilakukan proses cleansing data menggunakan beberapa library dari Python, dengan langkah-langkah detail sebagai berikut:

Import the Library
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
Import the Dataset

Dataset yang digunakan pada tulisan ini adalah sub-dataset IMDb movie (Internet Movie Database). Sub-dataset IMDb tersebut, dapat diakses disini.

Langkah pertama yang harus dilakukan, yaitu load dataset dengan langkah sebagai berikut :

df = pd.read_csv('movie_sample_dataset.csv', encoding='utf-8')
df.head()

Data Description

Sebelum melihat deskripsi/ info terkait dataset lebih lanjut, jika terdapat kolom dari dataset yang kurang representatif, bisa dilakukan penghapusan pada kolom-kolom tersebut. Sebagai contoh, dalam kasus ini terlihat bahwa kolom color dan language kurang representatif. Untuk menghapus kolom-kolom tersebut, dapat dilakukan langkah-langkah sebagai berikut:

df.drop(['color','language'], axis=1, inplace=True)
df.head()

df.info()

Berdasarkan output diatas, dapat disimpulkan bahwa dataset tersebut, memiliki total: 11 kolom, dengan jumlah maksimal baris untuk setiap kolom sebanyak: 99 baris. Akan tetapi khusus pada kolom director_name, gross, genres dan budget, akan dilakukan proses identifikasi lebih lanjut karena jumlah barisnya < 99 baris.

Missing Value

Detecting the Missing Value
Untuk mendeteksi suatu Missing Value dapat digunakan fungsi isnull(), yang langkah-langkah detailnya sebagai berikut :

df.isnull()

df.isnull.any()

Berdasarkan output diatas, jika hasil output tertulis False, hal tersebut memberikan arti bahwa kolom tersebut tidak mengandung Missing Values dan dapat disimpulkan bahwa kolom-kolom yang mengandung Missing Values adalah kolom yang bernilai True, diantaranya yaitu : director_name, gross, genres dan budget.

Summarizing the Missing Value
Setelah dilakukan pendeteksian terhadap Missing Values, akan dihitung jumlah Missing Values dari setiap kolom, yaitu:

df.isnull().sum()

Berdasarkan output summarize tersebut, diperoleh bahwa kolom yang mengandung Missing Values (blanks/ N/A (Python : nan atau NaN)) adalah kolom director_name, gross, genres dan budget.

Untuk mengetahui jumlah Missing Values secara keseluruhan di dataset tersebut, digunakan fungsi sebagai berikut:

#Total Number of Missing NA
df.isnull().sum().sum()

Handling the Errors/ Missing Values

Langkah untuk menyelesaikan permasalahan nilai error atau Missing Values pada tulisan ini yaitu, akan dilihat berdasarkan kolom per kolom. Untuk detailnya, sebagai berikut:

1.) director_name (11 Missing Values)

Berikut daftar unique values dari kolom director_name :

Berdasarkan output tersebut, dapat dilihat bahwa kolom tersebut mengandung detail Missing Values : nan, ‘Null’ dan ‘Nan’. Pada kasus ini, masing-masing Missing Values tersebut akan diganti dengan ‘..‘ (cell kosong). Dengan langkah sebagai berikut:

df['director_name'] = np.where(df['director_name']=='N/A','', df['director_name'])
df['director_name'] = np.where(df['director_name']=='Nan','', df['director_name'])
df['director_name'] = np.where(df['director_name']=='Null','', df['director_name'])

*Catatan: Output Python menampilkan Missing Values : N/A dan blank values sebagai nan atau NaN.

2.) duration (Outliers)

Berikut daftar unique values dari kolom duration :

plt.boxplot(df["duration"])

Berdasarkan output dan boxplot tersebut, dapat dilihat bahwa kolom duration mengandung beberapa outliers. Terdapat berbagai macam pilihan solusi untuk mengatasi outliers, diantaranya dengan menghapusnya atau mengganti nilainya. Pemilihan solusi tersebut harus dipertimbangkan lebih jauh dengan konteks dan real dari data.

3.) gross (8 Missing Values)

Berikut daftar unique values dari kolom gross :

df = pd.read_csv('movie_sample_dataset.csv', encoding='utf-8')
df.head()
0

*Catatan: Output Python menampilkan Missing Values : N/A dan blank values sebagai nan atau NaN.

Untuk menyelesaikan case Missing Values berupa blanks values pada kolom gross, semisal solusi yang akan dipilih adalah: masing-masing nilai blank values akan diganti dengan 0. Langkah-langkahnya adalah sebagai berikut:

df = pd.read_csv('movie_sample_dataset.csv', encoding='utf-8')
df.head()
14.) genres (1 Missing Values)

Berikut daftar unique values dari kolom genres :

df = pd.read_csv('movie_sample_dataset.csv', encoding='utf-8')
df.head()
2

*Catatan: Output Python menampilkan Missing Values : N/A dan blank values sebagai nan atau NaN.

Oleh karena tipe data kolom genres merupakan string/ object maka penggantian nilai blank values dengan 0 perlu dipertimbangkan kembali dengan kebutuhan/ kondisi real. Untuk kasus ini, misal kita bisa mengisi blank values tersebut dengan “General”. Berikut ini merupakan langkah untuk mengisi blank values tersebut :

df = pd.read_csv('movie_sample_dataset.csv', encoding='utf-8')
df.head()
35.) title_year (Outliers)

Berikut daftar unique values dari kolom title_year:

df = pd.read_csv('movie_sample_dataset.csv', encoding='utf-8')
df.head()
4

Berdasarkan output dan boxplot tersebut dapat dilihat bahwa terdapat 2 outliers yaitu 202 dan 205. Oleh karena sudah jelas bahwa kolom title_year menjelaskan tentang tahun, maka pada kasus ini, dapat disimpulkan bahwa 202 = 2002 dan 205 = 2005. Berikut ini merupakan langkah untuk mengganti nilai outliers tersebut :

df = pd.read_csv('movie_sample_dataset.csv', encoding='utf-8')
df.head()
56.) country (Uppercase, Different Format)

Berikut daftar unique values dari kolom country:

Berdasarkan output tersebut, dapat dilihat perbedaan format penulisan untuk ‘USA’, ‘usa’ dan ‘United States’. Salah satu solusi yang bisa menyelesaikan permasalahan tersebut yaitu mengubah ‘usa’ menjadi ‘USA’ dengan fungsi str.upper dan mengubah ‘United States’ menjadi ‘USA’. Langkah-langkahnya sebagai berikut:

df = pd.read_csv('movie_sample_dataset.csv', encoding='utf-8')
df.head()
6

Berikut output unique values dari kolom country, setelah dilakukan beberapa penyesuaian:

7.) budget (Outliers)

Berikut daftar unique values dari kolom budget:

*Catatan: Output Python menampilkan Missing Values : N/A dan blank values sebagai nan atau NaN.

Untuk menyelesaikan case Missing Values berupa blanks values pada kolom budget, semisal solusi yang akan dipilih adalah: masing-masing nilai blank values akan diganti dengan 0. Langkah-langkahnya adalah sebagai berikut:

df = pd.read_csv('movie_sample_dataset.csv', encoding='utf-8')
df.head()
78.) imdb_score (Outliers)

Berikut daftar unique values dari kolom imdb_score:

df = pd.read_csv('movie_sample_dataset.csv', encoding='utf-8')
df.head()
8

Berdasarkan output dan boxplot tersebut dapat dilihat bahwa terdapat 2 outliers yaitu -7.5 dan -1.2. Berdasarkan rating scale dari imdb (dapat dilihat: disini), range imdb_score terletak diantara 1–10 dengan detail sebagai berikut:

Source : https://www.imdb.com/list/ls070143432/

Jika pada kasus real, diperoleh bahwa nilai outliers disebabkan oleh kesalahan penginputan penambahan karakter ‘ — ‘ didepan score maka permasalahan outliers tersebut dapat diselesaikan dengan cara sebagai berikut:

df = pd.read_csv('movie_sample_dataset.csv', encoding='utf-8')
df.head()
9

Berikut output unique values dari kolom imdb_score, setelah dilakukan beberapa penyesuaian:

Langkah-langkah yang telah dijelaskan diatas merupakan pilihan beberapa cara dari banyak cara untuk mengatasi Missing Values (Proses Data Cleansing). Point penting untuk melakukan Data Cleansing, diantaranya: diperlukan peng-eksplorasian tentang ‘isi data’ lebih jauh dan diperlukan penyesuaian dengan kondisi atau kebutuhan real dari data.

Pandas digunakan untuk apa?

Nah dalam hal ini Library Pandas berarti sebuah library open source yang ada pada bahasa pemrograman Python yang sering digunakan untuk memproses data, mulai pembersihan data, manipulasi data, hingga melakukan analisis data.

Apa itu Dataframe Pandas?

Pandas DataFrame adalah struktur data 2 Dimensi. Data distrukturisasi seperti tabel yang berisi baris dan kolom, sehingga mudah untuk melakukan queri atau mengakses data tersebut. Baris merepresentasikan record dan kolom merepresentasikan field.

Struktur apa yang dimiliki Dataframes Pandas?

Struktur Pandas Library pandas memiliki dua jenis struktur data, yaitu series dan dataframe. Struktur data series merupakan satu kolom bagian dari tabel data frame yang merupakan 1 dimensional numpy array sebagai baris datanya, terdiri dari 1 tipe data.

Numpy untuk apa?

NumPy (Numerical Python) adalah library Python yang fokus pada scientific computing. Simpelnya: Numpy menyediakan fungsi yang siap pakai untuk memudahkan kita melakukan perhitungan saintifik seperti matriks, aljabar, statistik, dan sebagainya.