Sessi 6: Exploratory Data Analysis (EDA) dan Visualisasi

Fokus: Penerapan Visualisasi Kuantitatif untuk Penemuan Pola, Asumsi Distribusi, dan Korelasi Data.

A. Peran Visualisasi dalam EDA

Visualisasi mengubah tabel angka menjadi *insight* yang mudah dicerna, memungkinkan kita:

Dalam konteks ilmiah, visualisasi adalah validasi pertama terhadap hipotesis.

B. Visualisasi Distribusi Fitur Tunggal

Untuk memahami sifat data numerik (e.g., apakah data pengukuran mengikuti Distribusi Normal), kita menggunakan:

1. Histogram

Menampilkan frekuensi data dalam rentang (*bins*) tertentu. Ideal untuk melihat bentuk distribusi data.

2. Box Plot (*Box-and-Whisker Plot*)

Menggambarkan lima ringkasan angka: Minimum, Kuartil Pertama (Q1), Median (Q2), Kuartil Ketiga (Q3), dan Maksimum. Sangat efektif untuk **deteksi *outlier*** dan perbandingan distribusi antar kelompok. Batas *outlier* secara visual ditentukan di luar jangkauan 1.5 × IQR.

C. Visualisasi Hubungan Antar Fitur

Untuk menganalisis hubungan sebab-akibat atau korelasi antar variabel:

1. Scatter Plot (Diagram Tebar)

Plot paling dasar untuk melihat hubungan antara dua variabel numerik (X, Y). Dapat mengidentifikasi hubungan **linear**, **non-linear**, dan **kelompok data** (*clustering*).

2. Heatmap Korelasi

Representasi visual dari Matriks Korelasi (dibahas di Sessi 5). Setiap sel mewakili koefisien Korelasi Pearson (r) antara dua fitur, dengan warna yang lebih gelap menunjukkan korelasi yang lebih kuat (|r| → 1).

D. Studi Kasus Praktik: Dataset Iris (UCI)

Dataset Iris adalah dataset klasik untuk Klasifikasi. Kita akan menggunakannya untuk memvisualisasikan distribusi panjang kelopak (*Petal Length*) dan hubungan antara panjang dan lebar kelopak.

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

# 1. Asumsi Data dimuat (Dataset Iris sangat mudah diakses)
# Kita membuat data fiktif yang merepresentasikan dataset Iris
data_iris = {
    'Sepal_Length': [5.1, 4.9, 4.7, 7.0, 6.4, 5.9, 5.0, 6.3],
    'Petal_Length': [1.4, 1.4, 1.3, 4.7, 4.5, 5.1, 1.5, 6.0],
    'Species': ['Setosa', 'Setosa', 'Setosa', 'Versicolor', 'Versicolor', 'Virginica', 'Setosa', 'Virginica']
}
df_iris = pd.DataFrame(data_iris)

# Set style Seaborn agar plot terlihat lebih profesional
sns.set_style("whitegrid")
plt.figure(figsize=(12, 5))

# --- Visualisasi Distribusi (Petal Length) ---
plt.subplot(1, 2, 1)
# Histogram untuk melihat distribusi
sns.histplot(df_iris['Petal_Length'], kde=True, bins=5, color='skyblue')
plt.title('Distribusi Panjang Kelopak (Petal Length)')
plt.xlabel('Petal Length')
plt.ylabel('Frekuensi')

# --- Visualisasi Hubungan (Sepal Length vs Petal Length) ---
plt.subplot(1, 2, 2)
# Scatter Plot dengan pembedaan warna berdasarkan Species (Target Klasifikasi)
sns.scatterplot(x='Sepal_Length', y='Petal_Length', hue='Species', data=df_iris, s=100)
plt.title('Hubungan Panjang Sepal dan Petal')
plt.xlabel('Sepal Length')
plt.ylabel('Petal Length')
plt.legend(title='Spesies')

plt.tight_layout()
plt.show() # Tampilkan plot di Colab

# 2. Analisis Box Plot (Membandingkan Distribusi antar Kelompok)
plt.figure(figsize=(8, 6))
# Box Plot untuk melihat penyebaran Petal Length per Species
sns.boxplot(x='Species', y='Petal_Length', data=df_iris, palette='pastel')
plt.title('Box Plot Panjang Kelopak Berdasarkan Spesies')
plt.show()

# 3. Heatmap Korelasi (Membutuhkan data numerik)
df_numerik = df_iris.drop('Species', axis=1)
korelasi_matriks = df_numerik.corr()

plt.figure(figsize=(6, 5))
sns.heatmap(korelasi_matriks, annot=True, cmap='coolwarm', fmt=".2f", linewidths=.5, linecolor='black')
plt.title('Heatmap Matriks Korelasi Fitur Iris')
plt.show()

# Interpretasi Singkat dari Heatmap:
# Nilai r = 0.87 (tinggi) berarti ada hubungan linear positif kuat antara Sepal_Length dan Petal_Length.