Proyek terakhir course ini mengajak kita membaca penjualan sebagai deret waktu, bukan sekadar tabel transaksi. Studinya jaringan Toko Roti Manis dengan tiga outlet — Cihampelas di Bandung, Kemang di Jakarta, dan Malioboro di Yogyakarta — yang masing-masing mengirim rekap penjualan harian sepanjang 183 hari, 1 April sampai 30 September 2026. Datasetnya dibuat skrip deterministik (np.random.default_rng(19)) dan sengaja ditanami masalah yang lazim pada rekap harian: 8 baris ganda, 11 tanggal hilang, 6 omzet 0 atau negatif, dan 8 nilai kosong. Empat bagian berurutan membawa 546 baris mentah itu menjadi deret harian bersih 549 baris, lalu menjadi ringkasan tren siap lapor:

  • Bagian 1: Mempersiapkan Data Waktu — memuat CSV, menjadikan kolom tanggal sebagai DatetimeIndex yang terurut, mendeteksi tanggal ganda dan tanggal hilang dengan drop_duplicates(), Index.difference(), dan reindex(), lalu mengisi celahnya dengan interpolate(method="time") per outlet.
  • Bagian 2: Mengagregasi Data per Periode — meringkas deret harian ke rekap mingguan (“W”) dan bulanan (“ME”) per outlet lewat groupby().resample() dan pd.Grouper, serta menyusun pivot outlet x bulan dengan pivot_table().
  • Bagian 3: Menganalisis Tren dan Perubahan — menghaluskan deret dengan rolling() 7 dan 30 hari, menghitung perubahan antar bulan dengan pct_change() dan diff(), membandingkan dua semester, dan menandai puncak dengan idxmax()/idxmin().
  • Bagian 4: Menyusun Ringkasan Deret Waktu — membangun tabel ringkasan per outlet (total, rata-rata harian, bulan terbaik, pertumbuhan), narasi temuan bernomor, dan ekspor CSV, sekaligus menutup proyek.

Konsep intinya berasal dari section Data Waktu dan Deret Waktu — terutama chapter Datetime Index, Resampling Data, Rolling Window, Pergeseran Data dengan shift(), Menghitung Perubahan dengan diff(), dan Menangani Data Waktu yang Hilang — sedangkan Dasar DataFrame, GroupBy dan Agregasi, serta Menggabungkan dan Membentuk Data menjadi pendukung. Berbeda dengan proyek-proyek sebelumnya yang berpusat pada transaksi, harga, atau pengukuran, di sini sumbu waktu adalah tokoh utamanya: kelengkapan kalender dan musiman mingguan menentukan cara kita membersihkan dan membaca data. Skrip buat_dataset.py tersedia di folder tiap bagian; sejak Bagian 2, berkas itu juga menyediakan muat_bersih() agar semua bagian memakai dataset bersih yang identik. Kerjakan bagian demi bagian secara berurutan.