Plot Statistik dengan Seaborn

Plot distribusi, kategorikal, dan tampilan regresi dengan sedikit baris kode.

Daftar isi

Seaborn melapisi plot statistik di atas matplotlib dengan menghitung ringkasannya sendiri, sehingga distribusi, sebaran per kelompok, dan tren linear tergambar dalam satu pemanggilan per panel. Topik ini mempraktikkan tiga keluarga plot yang paling sering dipakai pada EDA pada dataset latihan yang sama, lalu menjelaskan kapan kembali ke matplotlib. Setelah membacanya, tiga panel statistik lengkap dengan tema yang terbaca dihasilkan dari satu skrip pendek.

Distribusi dengan histplot#

histplot menggambar histogram beserta pemecahan warna per kategori melalui argumen hue, dan penghitungan bin serta penumpukannya dilakukan seaborn. Pada dataset latihan ini, distribusi PM2.5 per stasiun menjadi panel pertama, dan puncaknya yang terpisah tegas antar stasiun langsung terbaca tanpa menulis satu baris agregasi pun.

Argumen yang paling sering disetel adalah bins untuk kehalusan pengelompokan, stat yang mengganti jumlah dengan kepadatan atau proporsi, dan kde=True yang menambahkan garis estimasi kepadatan di atas batangnya. Untuk dua distribusi yang harus dibandingkan bentuknya, element="step" menghindari tumpukan yang menyembunyikan satu sama lain.

Bentuk distribusi yang tergambar di sini menyambung pelajaran eksplorasi univariat, yaitu sebaran yang miring ke kanan dengan dua puncak antar stasiun, dan perbedaannya adalah seaborn yang menghitung semua itu di dalam plot, bukan di luar kode grafik.

Sebaran per kelompok dengan boxplot#

boxplot meringkas setiap kelompok menjadi kotak antarkuartil dengan garis median dan titik-titik di luar batasnya, sehingga perbandingan antar kelompok terbaca dalam sekali pandang. Panel kedua membandingkan PM2.5 antar stasiun, dan kotak Stasiun B yang berdiri sepenuhnya di atas kotak Stasiun A menyatakan perbedaan itu tanpa satu angka pun.

Pembacaan kotak mengikuti aturan tetap, yaitu garis tengah adalah median, batas kotak adalah kuartil pertama dan ketiga, dan antena memanjang paling jauh 1.5 kali lebar kuartil, dengan titik di luarnya ditandai sebagai kandidat outlier sebagaimana aturan IQR pada modul EDA.

Untuk kelompok kecil, stripplot atau swarmplot yang menaruh setiap pengukuran sering lebih jujur daripada kotak, sebab kotak yang dibangun dari empat baris menampilkan ringkasan yang lebih tegas daripada buktinya. Kombinasi keduanya, yaitu kotak dengan titik di atasnya, menjadi pilihan yang seimbang untuk laporan.

Tren linear dengan regplot#

regplot menggambar sebar dengan garis tren linear beserta pita kepercayaan yang mengelilinginya, dan panel ketiga memakainya pada pasangan suhu dengan PM2.5. Pita yang melebar di ujung menyatakan data yang menipis di sana, dan itu adalah jujurnya, karena kepastian tren memang menurun di tempat yang jarang terukur.

Garis regresi pada grafik ini adalah tampilan, bukan pengujian. Koefisiennya, kepercayaannya, dan asumsi modelnya dihitung dan diuji pada modul statistik dan modul machine learning, sedangkan peran regplot di sini adalah membuat tren terlihat sebelum angkanya dibicarakan.

Argumen scatter_kws dan line_kws meneruskan pengaturan matplotlib ke dalam plot, dan inilah jembatan yang membuat kontrol penuh tetap tersedia meski sebagian besar pekerjaan sudah diambil seaborn.

Tema dan batas seaborn#

sns.set_theme(style="whitegrid") mengatur latar, garis kisi, dan font sekali di awal skrip, dan seluruh grafik setelahnya mengikuti tema yang sama. Konsistensi tema antar grafik pada satu laporan adalah bagian dari kejujuran visual, karena pembaca menghabiskan perhatiannya pada data, bukan pada perbedaan gaya.

Batasnya muncul ketika grafik butuh komposisi khusus, misalnya anotasi pada satu titik tertentu atau dua sumbu dengan skala berbeda. Di titik itu kode kembali ke objek axes milik matplotlib sebagaimana topik sebelumnya, karena seaborn selalu mengembalikan objek yang sama untuk diatur lebih lanjut.

Aturan pembagian kerjanya sederhana, yaitu seaborn untuk plot statistik yang bentuknya baku dan cepat, serta matplotlib untuk komposisi yang tidak baku. Keduanya dipakai pada proyek yang sama tanpa saling menggantikan.

python plot_seaborn.py
"""Plot statistik dengan seaborn: distribusi, kategorikal, dan regresi."""
import matplotlib

matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

sns.set_theme(style="whitegrid")

data = pd.read_csv(
    "ukuran_udara.csv",
    na_values=["kosong", "-999.0"],
    dtype={"pm25": "string", "kelembapan": "string"},
)
data["pm25"] = data["pm25"].astype("float")
data["stasiun"] = (
    data["stasiun"].str.strip().str.replace(r"\s+", " ", regex=True).str.title()
)
sah = data[data["pm25"] < 500]

fig, axes = plt.subplots(1, 3, figsize=(10.5, 3.4), constrained_layout=True)

sns.histplot(data=sah, x="pm25", hue="stasiun", bins=20, ax=axes[0])
axes[0].set_title("Distribusi")

sns.boxplot(data=sah, x="stasiun", y="pm25", ax=axes[1])
axes[1].set_title("Sebaran per stasiun")

sns.regplot(data=sah, x="suhu_c", y="pm25", scatter_kws={"s": 14, "alpha": 0.6},
            line_kws={"color": "#c44e52"}, ax=axes[2])
axes[2].set_title("Tren linear")

fig.savefig("seaborn-statistik.png", dpi=110)
print("tersimpan: seaborn-statistik.png")
text Keluaran
tersimpan: seaborn-statistik.png

Tiga panel seaborn
Tiga panel seaborn

Tiga panel di atas dihasilkan dari tiga pemanggilan, dan setiap panel menjawab satu pertanyaan statistik yang telah dikerjakan secara manual pada modul EDA, sehingga hubungan antara eksplorasi dan tampilannya terlihat berdampingan.

Kesalahan umum#

Kesalahan pertama adalah memakai hue pada kategori dengan banyak nilai, misalnya setiap jam sebagai satu warna. Legendanya melebihi ruang dan warna yang berdekatan tidak terbedakan, sedangkan pemenggalan yang lebih kasar menjaga grafiknya terbaca.

Kesalahan kedua adalah membaca kotak pada kelompok kecil sebagai bukti yang tegas. Ringkasan lima angka dari empat baris menipu kemantapan, dan titik mentahnya ditampilkan bersama kotak agar buktinya ikut terlihat.

Kesalahan ketiga adalah memperlakukan garis regplot sebagai pengujian hipotesis. Pita kepercayaan pada gambar tidak menyebut ambang apa pun, dan klaim yang lebih kuat menunggu pengujian formal dengan angka pada modul statistik.

Ringkasan#

  • Seaborn menghitung ringkasan statistik di dalam plot, dari histogram berwarna per kelompok sampai garis regresi beserta pitanya.
  • Boxplot dibaca dengan aturan tetap, yaitu median, kuartil, dan antena 1.5 kali IQR, dan kelompok kecil ditampilkan bersama titik mentahnya.
  • sns.set_theme menyatukan gaya antar grafik, dan objek axes tetap tersedia untuk pengaturan matplotlib.
  • Pembagian kerjanya adalah seaborn untuk bentuk baku dan matplotlib untuk komposisi khusus.

Referensi#