Bagian penutup proyek ini mengumpulkan semua hasil sebelumnya menjadi satu ringkasan yang bisa dilampirkan ke laporan manajemen: satu baris per outlet berisi total, rata-rata harian, bulan terbaik dan terburuk, serta pertumbuhan. Kita juga menyusun pivot bulan x outlet dari sisi sebaliknya, mencetak narasi temuan bernomor yang angkanya dihitung dari data, dan mengekspor tabel ringkasan ke CSV. Setelah itu, proyek sekaligus seluruh rangkaian section proyek course pandas resmi tuntas.
Tabel Ringkasan per Outlet #
"""Menyusun ringkasan deret waktu penjualan Toko Roti Manis.
Membangun tabel ringkasan per outlet (total, rata-rata harian, bulan
terbaik dan terburuk, pertumbuhan), pivot rata-rata harian bulan x
outlet, mencetak narasi temuan bernomor, dan mengekspor ringkasan ke CSV.
"""
import tempfile
from pathlib import Path
import pandas as pd
from buat_dataset import muat_bersih
if __name__ == "__main__":
bersih = muat_bersih()
bulanan = bersih.groupby("outlet").resample("ME")["omzet"].sum()
print("== Tabel ringkasan per outlet ==")
baris = []
for outlet, omzet in bersih.groupby("outlet")["omzet"]:
bulan = bulanan.xs(outlet, level=0)
baris.append({
"outlet": outlet,
"total_juta": round(omzet.sum() / 1_000_000, 1),
"rata_harian": round(omzet.mean() / 1_000_000, 2),
"bulan_terbaik": bulan.idxmax().strftime("%Y-%m"),
"bulan_terburuk": bulan.idxmin().strftime("%Y-%m"),
"tumbuh_pct": round((bulan.iloc[-1] / bulan.iloc[0] - 1) * 100, 1),
})
ringkas = pd.DataFrame(baris)
print(ringkas.to_string(index=False))
print("\n== Pivot rata-rata omzet harian, bulan x outlet (juta rupiah) ==")
harian = bersih.copy()
harian["bulan"] = harian.index.strftime("%Y-%m")
rata = harian.pivot_table(
index="bulan", columns="outlet", values="omzet", aggfunc="mean",
)
print((rata / 1_000_000).round(2).to_string())
print("\n== Temuan utama ==")
total = int(bersih["omzet"].sum())
pangsa = bersih.groupby("outlet")["omzet"].sum() / total * 100
kem = ringkas.loc[ringkas["outlet"] == "Kemang"].iloc[0]
mal = ringkas.loc[ringkas["outlet"] == "Malioboro"].iloc[0]
ci = ringkas.loc[ringkas["outlet"] == "Cihampelas"].iloc[0]
kem_sep = bulanan.xs("Kemang", level=0).iloc[-1] / 1_000_000
print(f"1. Kemang tumbuh tercepat: omzet September {kem_sep:.1f} juta "
f"({kem['tumbuh_pct']:+.1f}% vs April).")
print(f"2. Malioboro menurun: {mal['tumbuh_pct']:+.1f}% sejak April; bulan "
f"terburuknya {mal['bulan_terburuk']}.")
print(f"3. Cihampelas stabil di sekitar {ci['rata_harian']:.2f} juta per hari "
f"({ci['tumbuh_pct']:+.1f}% sejak April).")
posisi_puncak = bersih["omzet"].idxmax()
print("4. Hari terbaik setiap outlet jatuh pada akhir pekan.")
print(f" Puncak jaringan: {posisi_puncak.day_name()} "
f"{posisi_puncak.strftime('%Y-%m-%d')} di Kemang "
f"({int(bersih['omzet'].max()):,}).")
print(f"5. Total enam bulan jaringan: {total:,} dengan kontribusi Kemang "
f"{pangsa['Kemang']:.1f}%.")
print("\n== Ekspor ringkasan ==")
with tempfile.TemporaryDirectory() as folder:
berkas = Path(folder) / "ringkasan_outlet.csv"
ringkas.to_csv(berkas, index=False)
cek = pd.read_csv(berkas)
print(f"ringkasan_outlet.csv: {cek.shape[0]} baris x {cek.shape[1]} kolom "
f"({berkas.stat().st_size} byte)")Output yang Dihasilkan:
== Tabel ringkasan per outlet ==
outlet total_juta rata_harian bulan_terbaik bulan_terburuk tumbuh_pct
Cihampelas 648.2 3.54 2026-07 2026-04 2.4
Kemang 932.4 5.10 2026-09 2026-04 24.2
Malioboro 462.2 2.53 2026-05 2026-09 -11.2
== Pivot rata-rata omzet harian, bulan x outlet (juta rupiah) ==
outlet Cihampelas Kemang Malioboro
bulan
2026-04 3.50 4.53 2.71
2026-05 3.46 4.81 2.65
2026-06 3.60 5.06 2.51
2026-07 3.56 5.14 2.47
2026-08 3.54 5.41 2.41
2026-09 3.59 5.62 2.41
== Temuan utama ==
1. Kemang tumbuh tercepat: omzet September 168.7 juta (+24.2% vs April).
2. Malioboro menurun: -11.2% sejak April; bulan terburuknya 2026-09.
3. Cihampelas stabil di sekitar 3.54 juta per hari (+2.4% sejak April).
4. Hari terbaik setiap outlet jatuh pada akhir pekan.
Puncak jaringan: Sunday 2026-09-27 di Kemang (6,870,800).
5. Total enam bulan jaringan: 2,042,813,200 dengan kontribusi Kemang 45.6%.
== Ekspor ringkasan ==
ringkasan_outlet.csv: 3 baris x 6 kolom (193 byte)Mari kita telaah bagian-bagian pentingnya:
- Loop
bersih.groupby("outlet")["omzet"]: setiap outlet menghasilkan satudict— total dalam juta rupiah, rata-rata harian, bulan terbaik dan terburuk dariidxmax()/idxmin()atas rekap bulanan, dantumbuh_pctyang membandingkan September dengan April. pd.DataFrame(baris): daftardictmenjadi tabel ringkasan 3 baris x 6 kolom; pola kumpulkan-ke-dict-lalu-jadikan-DataFrame ini menjaga setiap metrik tetap mudah diuji.pivot_table(index="bulan", columns="outlet", ...): kini bulan menjadi baris dan outlet menjadi kolom, sehingga laju Kemang (4,53 menjadi 5,62 juta) dan peluruhan Malioboro (2,71 menjadi 2,41 juta) terbaca berdampingan per baris bulan.- Narasi “Temuan utama”: lima temuan dicetak dengan f-string dari angka yang dihitung, bukan ditulis tangan — termasuk puncak jaringan Minggu 2026-09-27 di Kemang (6.870.800) dan pangsa Kemang 45,6% dari total 2.042.813.200.
- Ekspor CSV:
ringkas.to_csv()menulisringkasan_outlet.csvkeTemporaryDirectory, dibaca ulang denganread_csv()untuk memastikan 3 baris x 6 kolom, lalu folder sementara terhapus otomatis.
Menutup Proyek dan Perjalanan Course #
Empat bagian proyek kini tertutup lengkap: Bagian 1 mengubah 546 baris mentah menjadi deret harian bersih 549 baris, Bagian 2 meringkasnya ke periode mingguan dan bulanan, Bagian 3 membaca arah tren tiap outlet, dan Bagian 4 merangkum semuanya menjadi tabel serta narasi siap lapor. Dengan selesainya proyek ini, keenam proyek pada section proyek course pandas — dari Analisis Penjualan hingga Analisis Deret Waktu Penjualan — sudah bisa Anda kerjakan dari ujung ke ujung.
Bila teknik deret waktunya masih terasa rapat, ulangi chapter kunci pada section Data Waktu dan Deret Waktu: Datetime Index, Resampling Data, Rolling Window, dan Menangani Data Waktu yang Hilang. Bila seluruh materi terasa kokoh, section Sumber Belajar menanti dengan lembar contekan, dataset latihan tambahan, dan glosarium untuk menutup perjalanan belajar pandas Anda.
Sumber bacaan resmi: pandas.DataFrame.groupby , pandas.DataFrame.to_csv , dan User Guide: Time series / date functionality .