Bab 5 ~4 jam
Visualisasi Data
Pelajari membuat visualisasi yang jelas, akurat, dan menarik yang mengungkap insight tersembunyi dalam data Anda.
5.1 Prinsip Visualisasi
- ›Tunjukkan datanya: Pilih tipe chart yang mengungkap pola, bukan menyembunyikannya. Bar chart untuk perbandingan, line untuk tren, scatter untuk hubungan.
- ›Minimalisasi chartjunk: Hapus gridline, efek 3D, dan dekorasi yang tidak perlu. Setiap piksel harus punya tujuan.
- ›Gunakan warna dengan sengaja: Warna harus mengkodekan informasi, bukan menghias. Gunakan palet ramah buta warna. Batasi 5-7 warna.
- ›Label yang jelas: Sumbu, judul, legenda harus bisa menjelaskan sendiri. Chart harus bisa dibaca tanpa Anda mempresentasikannya.
- ›Pilih chart yang tepat: Perbandingan → bar; Tren → line; Distribusi → histogram/box; Hubungan → scatter; Komposisi → stacked bar.
5.2 Dasar Matplotlib
import matplotlib.pyplot as plt
plt.style.use('seaborn-v0_8-darkgrid')
plt.rcParams['figure.dpi'] = 100
plt.rcParams['font.size'] = 12
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# Line chart
axes[0].plot(bulan, pendapatan, 'o-', color='#f97316', linewidth=2)
axes[0].set_title('Pendapatan Bulanan')
axes[0].set_xlabel('Bulan')
axes[0].set_ylabel('Pendapatan (Rp)')
# Bar chart
axes[1].bar(kategori, nilai, color='#f97316', alpha=0.8)
axes[1].set_title('Penjualan per Kategori')
plt.tight_layout()
plt.savefig('chart.png', dpi=150, bbox_inches='tight')
plt.show()
5.3 Seaborn untuk Plot Statistik
import seaborn as sns
# Distribusi
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
sns.histplot(df, x='usia', ax=axes[0])
sns.boxplot(data=df, x='kelas', y='usia', ax=axes[1])
sns.violinplot(data=df, x='kelas', y='usia', ax=axes[2])
# Heatmap korelasi
fig, ax = plt.subplots(figsize=(8, 6))
sns.heatmap(korelasi, annot=True, cmap='RdBu_r', center=0, ax=ax)
# Scatter dengan regresi
sns.regplot(data=df, x='luas_m2', y='harga',
scatter_kws={'alpha': 0.3}, line_kws={'color': '#f97316'})
# Plot berfaset
g = sns.FacetGrid(df, col='segmen', hue='berhenti')
g.map(sns.kdeplot, 'tenure')
g.add_legend()
5.4 Visualisasi Interaktif
import plotly.express as px
# Scatter interaktif
fig = px.scatter(df, x='gdp_perkapita', y='harapan_hidup',
size='populasi', color='benua',
hover_name='negara', log_x=True,
title='Gapminder')
fig.show()
# Line dengan animasi
fig = px.line(df, x='tahun', y='harapan_hidup',
color='benua', animation_frame='tahun')
fig.show()
5.5 Desain Dashboard
- ›Tata Letak: Gunakan sistem grid. Taruh chart terpenting di kiri atas (urutan baca alami). Angka KPI di bagian atas.
- ›Konsistensi: Gunakan palet warna, ukuran font, dan gaya chart yang sama di seluruh dashboard.
- ›Interaktivitas: Tambahkan filter, tooltip, dan drill-down. Tapi jangan berlebihan — setiap interaksi harus menambah insight.
- ›Alat: Streamlit/Dash untuk dashboard Python. Tableau/Power BI untuk no-code. Plotly Dash untuk web-native.
Latihan: Gunakan dataset Titanic, buat figur 4 panel: (1) bar chart keselamatan per kelas, (2) distribusi usia per kelas, (3) scatter tarif vs usia berwarna keselamatan, (4) heatmap korelasi fitur numerik.