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.
"""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")tersimpan: seaborn-statistik.png
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_thememenyatukan gaya antar grafik, dan objek axes tetap tersedia untuk pengaturan matplotlib.- Pembagian kerjanya adalah seaborn untuk bentuk baku dan matplotlib untuk komposisi khusus.
Referensi#
- Seaborn Introduction — seaborn documentation — pengantar resmi keluarga plot dan tema seaborn.
- Seaborn API Reference
—
rujukan parameter
histplot,boxplot, danregplot.