Pascasarjana Diary

Pertemuan 1 · Matplotlib I

Tugas line chart, Desember 2019

Unique customer per hari dari retail_raw_reduced.csv, diplot dengan Matplotlib.

Soal

Buat line chart jumlah pembelian harian di Desember. Dataset: retail_raw_reduced.csv.

  • Ukuran figure 10×5
  • Sumbu x: tanggal pembelian, 1–31 Desember 2019
  • Sumbu y: jumlah unique customer per tanggal
  • Pakai title dan label sumbu (teks bebas)

Penjelasan

from pathlib import Path
import datetime
import matplotlib.pyplot as plt
import pandas as pd

pandas untuk baca dan olah tabel, matplotlib.pyplot untuk gambar grafik, pathlib untuk cari lokasi CSV dari posisi skrip. datetime ikut diimpor seperti di slide, meski konversi tanggal di sini memakai pandas.

csv_path = Path(__file__).resolve().parents[2] / "retail_raw_reduced.csv"
df = pd.read_csv(csv_path)

Path(__file__) mengambil lokasi file skrip. parents[2] naik dua folder sampai folder sains-data, tempat retail_raw_reduced.csv berada. pd.read_csv() membaca file itu ke DataFrame bernama df.

df["order_month"] = pd.to_datetime(df["order_date"]).dt.month
df["order_date"] = pd.to_datetime(df["order_date"])
df["gmv"] = df["item_price"] * df["quantity"]

order_date diubah ke datetime, lalu bulan transaksi disimpan di kolom order_month sebagai angka 1–12. Kolom gmv dihitung dari item_price dikali quantity, mengikuti langkah di slide. Grafik tugas ini tidak memakai gmv, hanya unique customer.

df_dec = df[df["order_month"] == 12]

Data difilter supaya yang dipakai hanya transaksi bulan Desember.

daily_customers = df_dec.groupby(["order_date"])["customer_id"].nunique()

Data dikelompokkan per tanggal. nunique() menghitung berapa customer_id berbeda di tanggal itu.

full_dates = pd.date_range("2019-12-01", "2019-12-31", freq="D")
daily_customers = daily_customers.reindex(full_dates, fill_value=0)

date_range membuat daftar tanggal 1–31 Desember 2019. reindex memakai daftar itu sebagai sumbu x, sehingga tanggal tanpa transaksi tetap muncul dan diisi 0.

plt.figure(figsize=(10, 5))
plt.plot(daily_customers.index, daily_customers.values, marker=".", linestyle="-", color="b")

Figure dibuat berukuran 10 × 5 inci. plt.plot() menggambar garis biru: sumbu x tanggal, sumbu y jumlah customer unik. marker="." menandai nilai tiap hari.

plt.title("Daily Customers December 2019", loc="center", pad=20, fontsize=15, color="blue")
plt.xlabel("Order Date", fontsize=12)
plt.ylabel("Number of Customers", fontsize=12)

Judul dan label sumbu mengikuti teks di slide. Judul biru, di tengah, dengan padding 20.

plt.grid(color="darkgray", linestyle=":", linewidth=0.5)
plt.ylim(bottom=0)
plt.xticks(daily_customers.index, [d.strftime("%d") for d in daily_customers.index], rotation=45)

Grid putus-putus memudahkan baca nilai. Sumbu y mulai dari 0. Label sumbu x memakai nomor hari (01 sampai 31) dan diputar 45 derajat supaya tidak bertumpuk.

plt.tight_layout()
plt.show()

tight_layout merapikan jarak judul, label, dan ticks, ditampilkan dengan plt.show().