Tujuan Praktikum
Setelah menyelesaikan praktikum ini, mahasiswa mampu:
- Menjelaskan kelebihan Seaborn dibandingkan Matplotlib.
- Mengatur tema visual dengan
sns.set_theme. - Membuat barplot untuk menemukan kategori terlaris.
-
Menggunakan parameter
hueuntuk memecah data per kategori. - Membuat lineplot tren penjualan per kategori.
Persiapan
Kebutuhan praktikum:
- 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):
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:
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:
- Tema otomatis — tampilan langsung rapi tanpa banyak pengaturan.
-
Bekerja langsung dari DataFrame — cukup
sebutkan nama kolom:
x=,y=,data=. -
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:
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").
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()
Penjelasan parameter:
data=df— sumber data berupa DataFrame.-
x="kategori",y="qty"— cukup nama kolom, tanpagroupbymanual. -
estimator="sum"— Seaborn menjumlahkanqty(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:
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()
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.
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()
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.
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 sebelumplt.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 |
# 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:
- Tema Seaborn aktif (grafik memiliki latar dengan garis bantu).
- Barplot kategori menunjukkan Elektronik lebih tinggi (99) dari Aksesoris (57).
-
Barplot dengan
huemenampilkan dua batang per bulan beserta legenda. - Lineplot menampilkan dua garis tren (Elektronik dan Aksesoris).
Verifikasi nilai data:
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:
-
Barplot total penjualan (rupiah) per kategori —
petunjuk:
y="total". -
Lineplot tren penjualan dengan
hue="produk"(banyak garis, satu per produk). -
Bonus:
boxplotsebaranqtyper 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.