visualisasimatplotlibMahir5 mnt baca

Scatter Plot dan Histogram dengan Matplotlib

Scatter plot untuk melihat hubungan dua variabel dan histogram untuk melihat distribusi, termasuk cara memilih jumlah bins yang tepat.

Kenapa analyst butuh dua chart ini

Bar dan line chart menjawab "berapa" dan "kapan". Scatter plot dan histogram menjawab pertanyaan yang lebih dalam: "apakah dua hal ini berhubungan?" dan "seperti apa sebaran datanya?". Dua pertanyaan ini adalah pintu masuk ke semua analisis lanjutan, dari segmentasi pelanggan sampai deteksi anomali. Kalau kamu melewatkan tahap ini, kamu berisiko membangun kesimpulan di atas data yang belum kamu pahami bentuknya.

Analogi: scatter itu peta bintang, histogram itu sensus penduduk

Scatter plot seperti memotret langit malam: tiap titik adalah satu observasi dengan dua koordinat, dan polanya (berkerumun, membentuk garis, menyebar acak) langsung terlihat. Histogram seperti sensus: kamu mengelompokkan penduduk ke dalam rentang umur (bins), lalu menghitung berapa orang di tiap kelompok. Hasilnya menunjukkan bentuk distribusi, normal, miring, atau punya dua puncak.

Contoh 1: scatter plot sederhana, diskon vs penjualan

python
import matplotlib.pyplot as plt

diskon = [0, 5, 10, 15, 20, 25, 30]      # persen
penjualan = [40, 55, 70, 95, 130, 175, 230]  # unit

plt.scatter(diskon, penjualan)
plt.title("Diskon vs Penjualan")
plt.xlabel("Diskon (%)")
plt.ylabel("Unit terjual")
plt.show()

Titik-titiknya naik ke kanan atas. Itu sinyal hubungan positif: makin besar diskon, makin banyak unit terjual. Satu gambar langsung menjawab tanpa perlu uji statistik dulu.

Contoh 2: scatter realistis dengan warna kategori

python
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)
harga = np.random.uniform(10, 100, 200)          # ribu rupiah
rating = np.clip(5 - harga / 40 + np.random.normal(0, 0.5, 200), 1, 5)
kategori = np.random.choice(["Kopi", "Teh", "Snack"], 200)
warna = {"Kopi": "#8B5CF6", "Teh": "#22c55e", "Snack": "#f59e0b"}

fig, ax = plt.subplots(figsize=(7, 5))
for kat in warna:
    mask = kategori == kat
    ax.scatter(harga[mask], rating[mask], c=warna[kat],
               label=kat, alpha=0.6)
ax.set_title("Harga vs Rating per Kategori Produk")
ax.set_xlabel("Harga (ribu Rp)")
ax.set_ylabel("Rating")
ax.legend()
plt.tight_layout()
plt.show()

Di versi realistis ini ada tiga upgrade: data acak yang menyerupai data asli, alpha=0.6 supaya titik yang bertumpuk tetap terlihat (transparansi itu penting saat ada ratusan titik), dan warna per kategori plus legend. Sekarang kamu bisa melihat pola per segmen, bukan cuma pola global.

Contoh 3: histogram dan pilihan bins

python
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(7)
belanja = np.random.normal(150, 40, 1000)  # ribu rupiah per transaksi

fig, axes = plt.subplots(1, 3, figsize=(12, 3.5))
for ax, b in zip(axes, [5, 30, 100]):
    ax.hist(belanja, bins=b, edgecolor="white")
    ax.set_title(f"bins = {b}")
    ax.set_xlabel("Nilai belanja (ribu Rp)")
fig.suptitle("Distribusi Nilai Belanja: efek jumlah bins")
plt.tight_layout()
plt.show()

Tiga panel ini memakai data yang sama persis. Dengan bins=5, distribusi terlihat terlalu halus dan detail hilang. Dengan bins=100, chart jadi bergerigi dan noisy. Dengan bins=30, bentuk loncengnya (mendekati normal) terlihat jelas. Jumlah bins bukan sekadar preferensi estetika, ia menentukan insight apa yang bisa kamu lihat.

Jebakan umum 1: bins histogram ngawur

SALAH: memakai bins default tanpa berpikir, atau memakai terlalu banyak bins sampai chart terlihat seperti sisir. Akibatnya kamu bisa melewatkan distribusi bimodal (dua puncak) yang justru sinyal penting, misalnya ada dua segmen pelanggan yang berbeda.

BENAR: coba beberapa nilai bins (aturan praktis: akar kuadrat dari jumlah data sebagai titik awal), dan pilih yang memperlihatkan bentuk distribusi dengan jujur. Untuk 1000 data, mulai dari sekitar 30 bins.

Jebakan umum 2: korelasi dianggap kausalitas

Scatter plot menunjukkan dua variabel bergerak bersama, bukan bahwa yang satu menyebabkan yang lain. Contoh klasik: penjualan es krim dan kasus tenggelam naik bersamaan di musim panas, tapi penyebabnya sama-sama cuaca panas, bukan es krim menyebabkan tenggelam. Di bisnis: iklan dan penjualan naik bersamaan bisa jadi keduanya didorong musim liburan.

BENAR: pakai scatter plot untuk menemukan hipotesis hubungan, lalu validasi dengan logika bisnis atau eksperimen sebelum mengklaim sebab akibat.

Catatan teknis: plt.hist mengembalikan tiga nilai (counts, bin edges, patches) yang bisa kamu pakai untuk analisis lanjutan. Dan kalau datamu di atas 10 ribu titik, pertimbangkan plt.hexbin sebagai pengganti scatter agar render tetap cepat dan pola kepadatan justru lebih jelas.

Ringkasan cepat

  • Scatter plot untuk hubungan dua variabel, histogram untuk bentuk distribusi satu variabel.
  • Scatter dengan banyak titik: pakai alpha di bawah 1 dan warnai per kategori.
  • Histogram: coba beberapa bins, mulai dari akar kuadrat jumlah data.
  • Korelasi bukan kausalitas, scatter itu alat pembuat hipotesis.

Tantangan

Hubungan dan distribusi

Dari dataset transaksi warkop (kolom: jam, total_bayar, metode), buat scatter plot jam vs total_bayar yang diwarnai per metode bayar, plus histogram distribusi total_bayar dengan 3 pilihan bins berbeda. Tulis apa yang kamu temukan dari kedua chart.