Pertemuan 05 - Visualisasi Data Lanjutan

Pertemuan 05 - Visualisasi Data Lanjutan

Membuat visualisasi statistik yang lebih kaya dengan Seaborn, termasuk pengelompokan data per kategori menggunakan hue.

Tujuan Praktikum

Setelah menyelesaikan praktikum ini, mahasiswa mampu:

  1. Menjelaskan kelebihan Seaborn dibandingkan Matplotlib.
  2. Mengatur tema visual dengan sns.set_theme.
  3. Membuat barplot untuk menemukan kategori terlaris.
  4. Menggunakan parameter hue untuk memecah data per kategori.
  5. Membuat lineplot tren penjualan per kategori.

Persiapan

Kebutuhan praktikum:

text
- Akun Google
- Google Colab
- Koneksi internet
- Dataset penjualan.csv (data bersih, sama seperti Pertemuan 04)

Buat notebook Pertemuan05_NamaAnda.ipynb. Siapkan kembali data (jika belum ada di runtime):

python
data_csv = """tanggal,produk,kategori,qty,harga
2025-01-05,Keyboard,Aksesoris,8,250000
2025-01-05,Mouse,Aksesoris,4,150000
2025-01-08,Keyboard,Aksesoris,8,250000
2025-01-11,Keyboard,Aksesoris,3,250000
2025-01-11,Laptop,Elektronik,8,8500000
2025-01-11,Printer,Elektronik,3,1500000
2025-01-14,Keyboard,Aksesoris,1,250000
2025-01-17,Mouse,Aksesoris,8,150000
2025-01-17,Keyboard,Aksesoris,3,250000
2025-01-17,Keyboard,Aksesoris,1,250000
2025-01-20,Laptop,Elektronik,1,8500000
2025-01-20,Laptop,Elektronik,4,8500000
2025-01-20,Monitor,Elektronik,1,2000000
2025-01-23,Printer,Elektronik,8,1500000
2025-01-23,Keyboard,Aksesoris,4,250000
2025-01-26,Monitor,Elektronik,5,2000000
2025-01-26,Mouse,Aksesoris,1,150000
2025-01-26,Laptop,Elektronik,8,8500000
2025-01-29,Printer,Elektronik,7,1500000
2025-01-29,Keyboard,Aksesoris,2,250000
2025-01-29,Printer,Elektronik,6,1500000
2025-02-01,Keyboard,Aksesoris,5,250000
2025-02-04,Laptop,Elektronik,2,8500000
2025-02-07,Laptop,Elektronik,5,8500000
2025-02-07,Mouse,Aksesoris,2,150000
2025-02-10,Laptop,Elektronik,4,8500000
2025-02-13,Laptop,Elektronik,8,8500000
2025-02-16,Mouse,Aksesoris,7,150000
2025-02-16,Laptop,Elektronik,4,8500000
2025-02-19,Printer,Elektronik,6,1500000
2025-02-19,Laptop,Elektronik,5,8500000
2025-02-19,Printer,Elektronik,1,1500000
2025-02-22,Laptop,Elektronik,3,8500000
2025-02-22,Monitor,Elektronik,2,2000000
2025-02-25,Laptop,Elektronik,8,8500000
"""

with open("penjualan.csv", "w") as f:
    f.write(data_csv)

print("File penjualan.csv siap digunakan.")

Impor library. Seaborn sudah terpasang di Google Colab, jadi cukup diimpor:

python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

Konsep Singkat

Seaborn adalah library visualisasi yang dibangun di atas Matplotlib. Ia tidak menggantikan Matplotlib, melainkan menyederhanakannya. Pada Pertemuan 04 kita harus meringkas data dengan groupby lebih dulu, baru menggambar. Seaborn bisa melakukan keduanya dalam satu perintah.

Tiga kelebihan utama Seaborn:

  1. Tema otomatis — tampilan langsung rapi tanpa banyak pengaturan.
  2. Bekerja langsung dari DataFrame — cukup sebutkan nama kolom: x=, y=, data=.
  3. Pengelompokan dengan hue — memecah data per kategori hanya dengan satu parameter. Inilah kemampuan baru yang paling penting di pertemuan ini.

Karena Seaborn berdiri di atas Matplotlib, kita tetap memakai perintah Matplotlib untuk judul dan menampilkan grafik (plt.title, plt.show, plt.savefig).

Langkah 1 - Mengatur Tema

Cukup satu baris untuk mengaktifkan tampilan Seaborn yang lebih bersih (garis bantu, warna lembut). Atur sekali di awal notebook:

python
sns.set_theme(style="whitegrid")

Pilihan style lain: "darkgrid", "white", "ticks". Setelah ini, semua grafik mengikuti tema tersebut.

Langkah 2 - Kategori Terlaris

Untuk menjawab "kategori mana yang paling laku", kita pakai barplot. Perhatikan: kita memberikan DataFrame mentah langsung; Seaborn yang menjumlahkan qty per kategori (estimator="sum").

python
df = pd.read_csv("penjualan.csv")
df["total"] = df["qty"] * df["harga"]

sns.barplot(data=df, x="kategori", y="qty", estimator="sum",
            errorbar=None, color="#4C8BF5")
plt.title("Kategori Terlaris (Total Barang Terjual)")
plt.ylabel("Jumlah (unit)")
plt.show()
Barplot kategori terlaris

Penjelasan parameter:

  • data=df — sumber data berupa DataFrame.
  • x="kategori", y="qty" — cukup nama kolom, tanpa groupby manual.
  • estimator="sum" — Seaborn menjumlahkan qty (defaultnya rata-rata).
  • errorbar=None — menyembunyikan garis interval yang belum kita perlukan.

Hasilnya jelas: Elektronik lebih laris (99 unit) dibanding Aksesoris (57 unit).

Memecah per Kategori dengan hue

Inilah kekuatan Seaborn. Dengan satu parameter hue, kita bisa membandingkan dua kategori per bulan sekaligus. Siapkan dulu kolom bulan:

python
df["tanggal"] = pd.to_datetime(df["tanggal"])
df["bulan"] = df["tanggal"].dt.strftime("%b")   # Jan, Feb

sns.barplot(data=df, x="bulan", y="qty", hue="kategori",
            estimator="sum", errorbar=None)
plt.title("Barang Terjual per Bulan Dipecah per Kategori")
plt.ylabel("Jumlah (unit)")
plt.show()
Barplot grouped dengan hue

Dengan hue="kategori", tiap bulan kini memiliki dua batang berdampingan (Aksesoris dan Elektronik) lengkap dengan legenda otomatis. Untuk membuat grafik seperti ini di Matplotlib murni, dibutuhkan kode yang jauh lebih panjang.

Langkah 3 - Trend Penjualan

Sama seperti barplot, lineplot juga mendukung hue. Dengan satu parameter, kita memperoleh satu garis tren untuk tiap kategori.

python
sns.lineplot(data=df, x="tanggal", y="total", hue="kategori",
             estimator="sum", errorbar=None, marker="o")
plt.title("Tren Total Penjualan per Kategori")
plt.ylabel("Total Penjualan (Rp)")
plt.xticks(rotation=45, ha="right")
plt.tight_layout()
plt.show()
Lineplot tren per kategori

Hasilnya memperlihatkan cerita yang tidak terlihat pada Pertemuan 04: garis Elektronik melonjak tinggi dan berfluktuasi (didorong penjualan Laptop), sementara garis Aksesoris stabil di bawah. Penjualan toko sangat bergantung pada produk elektronik bernilai tinggi.

Langkah 4 - Kustomisasi dan Menyimpan

Seaborn menerima banyak penyesuaian, dan kita tetap menyimpan dengan Matplotlib.

python
plt.figure(figsize=(8, 4.5))
sns.barplot(data=df, x="kategori", y="qty", hue="kategori",
            estimator="sum", errorbar=None,
            palette={"Aksesoris": "#F5A623", "Elektronik": "#4C8BF5"},
            legend=False)
plt.title("Kategori Terlaris", fontsize=14, fontweight="bold")
plt.ylabel("Jumlah (unit)")
plt.tight_layout()
plt.savefig("grafik_kategori.png", dpi=120)   # sebelum show()
plt.show()
  • palette={...} — menentukan warna spesifik tiap kategori.
  • figsize, fontsize, fontweight — sama seperti di Matplotlib.
  • plt.savefig(...) — menyimpan grafik, diletakkan sebelum plt.show().

Referensi Fungsi Penting

Tema dan Gaya

Perintah Fungsi
sns.set_theme(style="whitegrid") Mengatur tema global
sns.color_palette("pastel") Memilih palet warna
palette= Menentukan warna per kategori

Jenis Plot Seaborn

Perintah Grafik
sns.barplot(data, x, y) Batang (dengan agregasi otomatis)
sns.countplot(data, x) Batang frekuensi (menghitung jumlah baris)
sns.lineplot(data, x, y) Garis (tren)
sns.scatterplot(data, x, y) Titik sebar (hubungan dua variabel)
sns.boxplot(data, x, y) Sebaran nilai (median, kuartil, pencilan)
sns.histplot(data, x) Histogram (sebaran satu variabel)

Parameter Kunci

Parameter Fungsi
data= DataFrame sumber
x=, y= Kolom untuk sumbu X dan Y
hue= Memecah data menjadi beberapa warna per kategori
estimator="sum" Cara meringkas ("sum", "mean", "median")
errorbar=None Menyembunyikan garis interval kepercayaan
palette= Daftar/peta warna
python
# contoh: sebaran qty tiap kategori dengan boxplot
sns.boxplot(data=df, x="kategori", y="qty")
plt.title("Sebaran Jumlah Pembelian per Kategori")
plt.show()

Pengujian

Pastikan hasil praktikum sesuai berikut:

  1. Tema Seaborn aktif (grafik memiliki latar dengan garis bantu).
  2. Barplot kategori menunjukkan Elektronik lebih tinggi (99) dari Aksesoris (57).
  3. Barplot dengan hue menampilkan dua batang per bulan beserta legenda.
  4. Lineplot menampilkan dua garis tren (Elektronik dan Aksesoris).

Verifikasi nilai data:

python
qty_kat = df.groupby("kategori")["qty"].sum()
assert qty_kat.idxmax() == "Elektronik"
assert qty_kat["Elektronik"] == 99 and qty_kat["Aksesoris"] == 57
print("Data dasar grafik sudah benar.")

Troubleshooting

Masalah Penyebab Solusi
barplot menampilkan rata-rata, bukan jumlah estimator default adalah "mean" Tambahkan estimator="sum"
Muncul garis hitam kecil di ujung batang Itu interval kepercayaan Tambahkan errorbar=None
FutureWarning soal palette palette dipakai tanpa hue Tambahkan hue= dan legend=False
Grafik tidak muncul Lupa plt.show() Tambahkan plt.show()
Label tanggal bertumpuk Terlalu banyak label plt.xticks(rotation=45)

Tugas Praktikum

Buat laporan (format PDF) berisi tiga grafik Seaborn dengan interpretasi singkat tiap grafik:

  1. Barplot total penjualan (rupiah) per kategori — petunjuk: y="total".
  2. Lineplot tren penjualan dengan hue="produk" (banyak garis, satu per produk).
  3. Bonus: boxplot sebaran qty per kategori, lalu jelaskan kategori mana yang pembeliannya lebih bervariasi.
Tips: ekspor notebook ke PDF melalui menu File → Print → Save as PDF.

Kesimpulan

Pada pertemuan ini mahasiswa naik dari Matplotlib ke Seaborn, yang menghasilkan visualisasi statistik lebih kaya dengan kode lebih ringkas. Kemampuan paling penting yang dipelajari adalah hue — memecah data per kategori hanya dengan satu parameter, sehingga perbandingan antar kelompok dan tren per kategori dapat ditampilkan dengan mudah. Seluruh keterampilan visualisasi dari Pertemuan 04 dan 05 ini akan dirangkai menjadi satu dashboard penjualan pada pertemuan berikutnya.