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.