๐ŸงฌPraktikum 1

Exploratory Data Analysis (EDA)

Pengantar

Pada prarktikum ini kita akan belajar tentang dasar-dasar EDA. Dataset yang digunakan adalah dataset publik Titanic.

โฌ‡๏ธ Download โฌ‡๏ธ

Langkah 0 - Persiapan Lingkungan

(Opsional) Lakukan instalasi library pandas, numpy, dan matplotlib. Pandas merupakan library untuk manipulasi data tabular. Numpy digunakan untuk manipulasi angka. Matplotlib digunakan untuk kebutuhan visualisasi data.

!pip install -q pandas matplotlib numpy

Import library tersebut pada cell notebook

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

Langkah 1 - Memuat Data

Jika Anda menggunakan Google Colab, lakukan proses unggah data pada instance Google Colab terlebih dahulu.

Lakukan pemuatan data dengan perintah,

df = pd.read_csv('Titanic-Dataset.csv')

Cek 5 data pertama dengan menggunakan perintah,

df.head()

Maka akan muncul tampilan dibawah ini,

Jika Anda membutuhkan preview lebih banyak data, Anda dapat memberikan parameter jumlah. Contoh, untuk menampilkan 100 data pertama, gunakan,

df.head(100)

Langkah 2 - Inspeksi Data

Pada tahap ini, kita lakukan pemahaman terhadap data berdasarkan nilai-nilai stastik dan kondisi data. Beberapa hal yang biasa dilakukan diantara adalah,

  1. Pengecekan dimensi โ†’ Untuk mengetahui jumlah baris dan kolom dari data. Pada data tabular, cara ini berguna untuk mendapatkan informasi jumlah data dan variabel.

  2. Pengecekan tipe data โ†’ Untuk mengetahui tipe data setiap variabel. Bermanfaat untuk proses pengolahan selanjutnya

  3. Pengecekan nilai statistik deskriptif โ†’ Untuk mengetahui ukuran kecenderuangan memusat atau menyebarnya suatu data.

Pengecekan Dimensi

df.shape

Anda akan mendapatkan hasil,

(891, 12)

Nilai ini menunjukkan bahwa data Titanic memiliki 891 baris dan 12 kolom.

Pengecekan Tipe Data

df.info()

Perhatikan hasil dari perintah yang telah dijalankan.

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB

Dari df.info() kita dapat mengetahui jumlah data untuk setiap kolom. Selain itu, kita mengetahui bahwa,

  • "Age" berjenis float64

  • "Cabin" berjenis object

  • "Embarked" berjenis object

Pada Pandas, object sering kali mewaliki tipe data string. Kita harus cermat dalam hal ini. Hal ini berkaitan dengan teknik imputasi yang akan kita gunakan nantinya.

Selanjutnya, untuk lebih mengetahui jumlah data yang hilang untuk setiap kolom, gunakan perintah,

df.isnull().sum()

Didapatkan informasi seperti berikut,

PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64

Dari informasi ini, kita dapat mengetahui data yang hilang sejumlah,

  • 177 data "Age"

  • 687 data "Cabin"

  • 2 data "Embarked"

Informasi ini akan kita gunakan pada praktikum selanjutnya.

Ringkasan Nilai Statistik

Untuk mendapatkan ringkasan nilai statistik, gunakan,

df.describe()

Anda akan mendapatkan informasi penting seperti,

  1. Jumlah data

  2. Nilai mean

  3. Nilai simpangan baku (standard deviation)

  4. Nilai min dan max

  5. Nilai Q1 (25%), Q2 (50%), dan Q3 (75%).

Langkah 3 - Inspeksi Visual

Inspeksi visual dilakukan untuk mengetahui pola data secara visual. Dengan cara ini kita dapat menentukan langkah pra pengolahan data dengan lebih tepat. Inspeksi visual yang akan dilakukan adalah,

  1. Inspeksi distribusi data melalui histogram

  2. Inspeksi outlier melalui boxplot

  3. Inspeksi korelasi antar variabel dengan heatmap dan scatterplot

Inspeksi Distribusi Data

Lakukan inspeksi distribusi data terhadap variabel Age dan Fare.

num_cols = ['Age','Fare']
for col in num_cols:
    plt.figure()
    plt.hist(df[col], bins=30)
    plt.title(f'Distribusi {col}')
    plt.xlabel(col); plt.ylabel('Frekuensi')
    plt.show()

Anda akan mendapatkan histogram untuk Age dan Fare seperti berikut,

Secara sekilas, kita dapat menyimpulkan terjadi fenomena skew pada distribusi Age dan Fare.

Inspeksi Outlier

Inspeksi terhadap nilai-nilai outlier juga penting dalam proses EDA. Outlier dapat mengakibatkan pergeseran distribusi data yang dapat berdampak pada proses pelatihan model. Pada praktikum ini kita akan melakukan pengecekan outlier pada 1 variabel saja, yaitu Fare.

Visualisasi yang paling mudah untuk digunakan dalam mendeteksi outlier adalah dengan menggunakan boxplot.

plt.figure()
plt.boxplot(df['Fare'].dropna(), vert=True)
plt.title('Boxplot Fare')
plt.ylabel('Fare')
plt.show()

Anda akan mendapatkan hasil seperti berikut,

Boxplot hanya dapat digunakan untuk data kuantitatif.

Inspeksi Komposisi Variabel Kualitatif

Dengan menggunakan boxplot, kita hanya mampu melakukan inspeksi pada variabel kuantitatif. Namun terkadang kita juga perlu melakukan inspeksi pada variabel kualitatif. Salah satu inspeksi yang dapat kita lakukan pada variabel kualitatif adalah mencari tahu jumlah data tiap kategorinya. Kita dapat menggunakan barchart dalam konteks ini.

Sebagai contoh, kita akan inspeksi variabel Survived, Pclass, Sex, Embarked.

cat_cols = ['Survived','Pclass','Sex','Embarked']

fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes = axes.flatten()

for i, col in enumerate(cat_cols):
    df[col].value_counts(dropna=False).plot(kind='bar', ax=axes[i])
    axes[i].set_title(f'Distribusi {col}')
    axes[i].set_xlabel(col)
    axes[i].set_ylabel('Jumlah')

plt.tight_layout()
plt.show()

Hasilnya,

Informasi yang kita dapatkan dari sini adalah, apakah jumla tiap kategorinya berimbang atau bahkan ada yang bernilai kosong (NaN).

Inspeksi Korelasi

Nilai korelasi digunakan untuk mengetahui apakah terdapat hubungan saling mempengaruhi antar variabel. Nilai ini cukup penting untuk melihat hubungan antara variabel independen dengan dependennya. Jika nilai korelasi tidak cukup, maka kita perlu melakukan tindakan lanjutan salah satunya dengan tidak menggunakan variabel independen tersebut dalam proses selanjutnya.

Dalam praktikum ini kita akan menggunakan 2 visualisasi untuk melakukan inspeksi korelasi, yaitu heatmap dan scatterplot.

Heatmap

Kita akan mennggunakan library Seaborn pada visualisasi heatmap.

import seaborn as sns # Import seaborn for enhanced visualization

num_only = df.select_dtypes(include=[np.number])
corr = num_only.corr(numeric_only=True)

plt.figure(figsize=(8, 6)) # Increased figure size for better readability
sns.heatmap(corr, cmap='coolwarm', vmin=-1, vmax=1, annot=True, fmt=".2f") # Use seaborn.heatmap with annotation
plt.title('Heatmap Korelasi (numerik)')
plt.tight_layout()
plt.show()

Hasil dari analisis heatmap adalah sebagai berikut,

Secara ringkat kita juga dapat melakukan inspeksi korelasi dengan hasil data tabular. Sebagai contoh, variabel Survived adalah variabel dependen yang akan menjadi fokus. Gunakan perintah,

corr['Survived'].sort_values(ascending=False)

Maka Anda akan mendapatkan informasi nilai korelasi variabel lain terhadap Survived.

Scatter Plot

Scatter plot biasanya digunakan untuk mendapatkan informasi distribusi variabel dan juga dapat digunakan untuk mengetahui hubungan antar variabel. Hubungan ini dapat dijelaskan melalui pola-pola linier maupun non-linier.

Contoh, kita akan melakukan inspeksi pada variabel Age dan Fare.

plt.figure()
surv_map = {0:'No', 1:'Yes'}
plt.scatter(df['Age'], df['Fare'], alpha=0.7)
plt.xlabel('Age'); plt.ylabel('Fare')
plt.title('Scatter Age vs Fare')
plt.show()

Anda akan mendapatkan hasil,

Berdasarkan hasil scatterplot, Age dan Fare tidak menunjukkan hubungan korelasi yang cukup kuat. Hal ini nampak pada setiap rentang usia memiliki harga tiket yang tidak jauh bervariasi.

Last updated