April 20, 2024
Preprocessing Data Kapal Titanic

Belajar Data Science – Preprocessing Data Kapal Titanic (Bagian 3)

Pada artikel ini akan dilakukan proses mengelola data kapal Titanic. Proses pengelolaannya, pertama adalah melakukan drop pada kolom yang dinilai tidak memiliki pengaruh pada proses berikutnya. Kedua, mengisi data yang kosong dan yang terakhir adalah mengelompokkan data yang ada. Proses ini merupakan kelanjutan dari artikel Belajar Data Science – Visualisasi Data Penjualan dan Belajar Data Science – Visualisasi Data Histogram – Mengeksplorasi Data Kapal Titanic (Bagian 2). Data kapal Titanic dapat di akses melalui situs Kaggle.

Import Pustaka

Melakukan import pustaka yang dibutuhkan yaitu pandas dan numpy.

import pandas as pd
import numpy as np

Mengambil data

Data akan diambil dari github yang disiapkan oleh tim Onestring Lab. Data akan disimpan dalam bentuk Pandas dataframe. Penjelasan mengenai Pandas dataframe dapat dipelajari pada bagian Data Science. Berikut ini kode program untuk mengambil data dari github Onestring Lab. Data yang akan digunakan adalah data train.csv dan test.csv.

train_df = pd.read_csv('https://raw.githubusercontent.com/Onestringlab/osl_datascience/main/data/titanic/train.csv')
train_df.head()
Data Kapal Titanic – train.csv
test_df  = pd.read_csv('https://raw.githubusercontent.com/Onestringlab/osl_datascience/main/data/titanic/test.csv')
test_df.head()
Data Kapal Titanic – test.csv

Menghapus Beberapa Kolom Data

Pada data kapal Titanic terdapat beberapa kolom yang perlu dihilangkan. Ini dikarenakan data tersebut bersifat unik. Kolom data tersebut adalah Passenger Id, Name, Ticket dan Cabin.

train_df['Ticket'].describe()

Terlihat bahwa dari 891 data terdapat 681 data unik.

count        891
unique       681
top       347082
freq           7
Name: Ticket, dtype: object

Berikut ini adalah perintah drop untuk beberapa kolom tersebut.

train_df = train_df.drop(['Ticket'], axis=1)
test_df  = test_df.drop(['Ticket'], axis=1)
train_df = train_df.drop(['PassengerId'], axis=1)
test_df  = test_df.drop(['PassengerId'], axis=1)
train_df = train_df.drop(['Name'], axis=1)
test_df  = test_df.drop(['Name'], axis=1)
train_df = train_df.drop(['Cabin'], axis=1)
test_df  = test_df.drop(['Cabin'], axis=1)

Mengecek Data Yang Hilang

Berikut ini adalah proses untuk mengetahui data mana saja yang hilang.

row = train_df.shape[0]
total = train_df.isnull().sum().sort_values(ascending=False)
presentase = ((train_df.isnull().sum()/row)*100).sort_values(ascending=False)
presentase = round(presentase,2)
dt_missing = list(zip(total,presentase))
train_df_missing = pd.concat([total,presentase],axis=1,keys=['Total','%'])
train_df_missing

Menggabungan Data Train dan Test

Berikut ini akan menggabungkan data Train dan Test dalam bentuk array.

data = [train_df,test_df]

Mengisi Data Kosong Pada Kolom Age

Untuk data kosong pada kolom Age akan diisi angka random diantara mean – stdeviasi dan mean+ stdeviasi. Berikut ini kode programnya.

train_df['Age'].isnull().sum()

for dataset in data:
  mean = train_df['Age'].mean()
  std = train_df['Age'].std()
  is_null = dataset['Age'].isnull().sum()
  rand_age = np.random.randint(mean-std,mean+std, size= is_null)
  age_slice = dataset['Age'].copy()
  age_slice[np.isnan(age_slice)] = rand_age
  dataset['Age'] = age_slice
  dataset['Age'] = train_df['Age'].astype(int)

train_df['Age'].isnull().sum()

Mengisi Data Kosong Pada Kolom Embarked

Untuk data kosong pada kolom Embarked akan diisi dengan huruf ‘S’ dikarenakan data tersebut paling banyak pada kolom tersebut. Berikut ini kode programnya.

for dataset in data:
  dataset['Embarked'] = dataset['Embarked'].fillna('S')

Mengisi Data Kosong Pada Kolom Fare

Untuk data kosong pada kolom Fare akan diisi dengan angka 0. Berikut ini kode programnya.

for dataset in data:
  dataset['Fare'] = dataset['Fare'].fillna(0)
  dataset['Fare'] = dataset['Fare'].astype(int)

Mengubah Data Pada Kolom Sex dan Embarked

Proses pembelajaran machine learning hanya mengenal angka. Ini mengharuskan melakukan perubahan data string kedalam bentuk bilangan. Kolom Sex yang berisi male dan female akan diubah kedalam bentuk 1 dan 2. Sedangkan kolom Embarked S, C dan Q berubah menjadi 0,1 dan 2. Berikut ini kode programnya.

genders = {"male" : 0, "female" :1}
for dataset in data:
  dataset['Sex'] = dataset['Sex'].map(genders)
ports = {"S":0, "C":1, "Q":2}
for dataset in data:
  dataset['Embarked'] = dataset['Embarked'].map(ports)

Mengompokan Data Kolom Age

Data pada kolom Age sifatnya hampir mendekati unik. Ini kurang baik untuk proses pembelajaran. Hal yang harus dilakukan adalah mengelompokkkanya dalam bentuk range umur. Pada kolom Fare juga akan dilakukan proses yang sama. Berikut ini kode programnya.

for dataset in data:
  dataset['Age'] = dataset["Age"].astype(int)
  dataset.loc[dataset['Age'] <=11, 'Age']=0
  dataset.loc[(dataset['Age'] >11) & (dataset['Age'] <=18), 'Age']=1
  dataset.loc[(dataset['Age'] >18) & (dataset['Age'] <=22), 'Age']=2
  dataset.loc[(dataset['Age'] >22) & (dataset['Age'] <=27), 'Age']=3
  dataset.loc[(dataset['Age'] >27) & (dataset['Age'] <=33), 'Age']=4
  dataset.loc[(dataset['Age'] >33) & (dataset['Age'] <=40), 'Age']=5
  dataset.loc[(dataset['Age'] >40) & (dataset['Age'] <=66), 'Age']=6
  dataset.loc[(dataset['Age'] >66), 'Age']=6
for dataset in data:
  dataset.loc[dataset['Fare'] <=7.91, 'Fare']=0
  dataset.loc[(dataset['Fare'] >=7.91) & (dataset['Fare'] <=14.454), 'Fare']=1
  dataset.loc[(dataset['Fare'] >14.454) & (dataset['Fare'] <=31), 'Fare']=2
  dataset.loc[(dataset['Fare'] >31) & (dataset['Fare'] <=99), 'Fare']=3
  dataset.loc[(dataset['Fare'] >99) & (dataset['Fare'] <=250), 'Fare']=4
  dataset.loc[dataset['Fare'] >250, 'Fare']=5

Membuat Kolom Baru

Untuk proses machine learning dinilai perlu membuat kolom baru yang merupakan hasil kombinasi dari kolom yang sudah ada. Berikut ini kode programnya.

for dataset in data:
    dataset['relatives'] = dataset['SibSp'] + dataset['Parch']
    dataset.loc[dataset['relatives'] > 0, 'not_alone'] = 0
    dataset.loc[dataset['relatives'] == 0, 'not_alone'] = 1
    dataset['not_alone'] = dataset['not_alone'].astype(int)
for dataset in data:
  dataset['Age_Class'] = dataset['Age'] * dataset['Pclass']
for dataset in data:
  dataset['Fare_Per_Person'] = dataset['Fare']/(dataset['relatives']+1)
  dataset['Fare_Per_Person'] = dataset['Fare_Per_Person'].astype(int)

Hasil Preprocessing Data Kapal Titanic

Berikut ini adalah hasil data terakhir setelah dilakukan proses manipulasi.

train_df.head(10)
Hasil Preprocessing Data Train Kapal Titanic
test_df.head(10)
Hasil Preprocessing Data Test Kapal Titanic

Kesimpulan Preprocessing Data Kapal Titanic

Proses pengelolaan data merupakan hal terpenting sebelum dilakukan proses pembelajaran. Jika proses ini tidak dilakukan dengan benar dan tepat maka proses pembelajaran tidak ada menghasilkan model yang baik dan bisa digunakan.

Rajo Intan

Blogger, pemiliki Onestring Lab, menulis artikel terkait teknologi informasi dan pendidikan. Web Developer, berpengalaman lebih dari 20 tahun mengembangkan berbagai aplikasi dan sistem informasi. Kerjasama kontak di onestringlab@gmail.com atau https://forms.gle/xAGKkpi6B3BzJyzk7

View all posts by Rajo Intan →

One thought on “Belajar Data Science – Preprocessing Data Kapal Titanic (Bagian 3)

Leave a Reply

Your email address will not be published. Required fields are marked *

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock