Analisis Penjualan Kantin
Kantin sekolah punya data penjualan harian tapi belum pernah dianalisis. Abbas diminta membantu: menu apa yang paling laris, kapan jam tersibuk, dan bagaimana optimasi stok agar tidak ada sisa makanan yang terbuang.
Sebelum ngerjain deliverable lengkap di bawah, Abbas sudah pernah coba versi ringan dari studi kasus ini pakai dataset dummy kecil (4 hub kantin, 14 hari, 10 menu), tujuannya ngerasain alurnya dulu sebelum kerja dengan dataset penuh. Materinya masih bisa dibuka dan dipelajari ulang kapan saja:
- Google Sheet: Data Penjualan Kantinmu (Materi Lengkap - 8 tab): dataset, latihan formula, kunci jawaban, ringkasan pivot, jembatan SQL (QUERY), chart storytelling, dan preview kode Pandas, semua dalam 1 file
- Folder LEARN: kumpulan materi semua proyek P1โP6
Cara mulai: buka Sheet di atas, baca tab Panduan dulu (2 menit), lalu kerjakan tab Latihan_Formula soal demi soal. Jangan lompat ke Kunci_Jawaban sebelum benar-benar coba sendiri minimal 5 menit per soal. Di situ letak belajarnya, bukan di jawabannya.
Pola yang dipakai: 1 pertanyaan bisnis dijawab pakai 5 cara berbeda, makin lama makin canggih tapi logikanya sama (filter, group, aggregate, sort). Setiap tahap sengaja pakai tool yang beda supaya Abbas ngerti bahwa fungsi-fungsi ini cuma "kosakata" berbeda untuk pertanyaan yang identik:
- Formula Spreadsheet (tab Latihan_Formula + Kunci_Jawaban):
AVERAGEIFuntuk rata-rata bersyarat,SUMIFuntuk total bersyarat,RANKuntuk urutan,SPARKLINEuntuk mini-grafik tren dalam satu sel. Titik masuk paling ramah karena Abbas sudah biasa pakai Sheets. - Pivot Table (tab Ringkasan_Pivot): meringkas data berdasarkan 2 kriteria sekaligus (Hub x Kategori) tanpa nulis formula manual satu-satu. Jembatan konsep ke
GROUP BYdi SQL: pivot table sebenarnya adalah GROUP BY yang dibungkus antarmuka drag-and-drop. - SQL (tab Query_SQL): function
QUERY()di Google Sheets memakai bahasa mirip SQL asli (SELECT/WHERE/GROUP BY/ORDER BY). Soal yang identik dengan tab Formula, tapi ditulis sebagai satu baris query, lebih ringkas begitu datanya makin besar. - Python/Pandas (tab Lanjutan_Pandas_Looker): soal yang sama, ditulis ulang pakai
.groupby()di Google Colab. Di sinilah logika yang sama akhirnya jadi kode yang bisa diskalakan ke data jutaan baris, sesuatu yang mustahil dikerjakan manual di spreadsheet. - Dashboard (Looker Studio): sambungkan langsung ke tab Data, chart update otomatis tanpa nulis ulang formula atau kode setiap kali datanya berubah. Ini "muara" dari seluruh proses, biar hasil analisis bisa dilihat orang lain tanpa perlu buka spreadsheet.
Detail lengkap tiap tahap, termasuk urutan mengerjakan yang disarankan, ada di tab Panduan pada Sheet di atas.
- Menu apa yang paling banyak terjual per minggu?
- Hari apa dan jam berapa penjualan paling tinggi?
- Apakah ada tren penurunan penjualan di akhir bulan?
- Menu apa yang sering habis terjual dan perlu ditambah stoknya?
- Berapa estimasi pendapatan bulanan kantin?
Deliverable (output wajib)
- Database SQLite dari data transaksi
- Minimal 10 SQL query untuk menjawab pertanyaan bisnis
- Dashboard Google Sheets dengan pivot table
- Rekomendasi 3 hal konkret untuk manajemen kantin
Dataset
Tab Data di Google Sheet pada bagian atas halaman ini sudah berisi 255 baris transaksi dummy siap pakai: 4 hub kantin, 14 hari, 10 menu (kolom: Tanggal, Hub, Produk, Kategori, Qty, Harga_Satuan, Omzet). Download tab itu ke CSV (File > Download > Comma Separated Values) kalau mau langsung dipakai di Colab.
Buat dataset transaksi harian selama 1 bulan: tanggal, jam, nama_menu, harga, jumlah. Minimal 5 menu, 200+ baris transaksi. Pakai random number untuk simulasi.
Scaffold Kode
Ini kerangka awal. Abbas kembangkan sendiri sesuai kebutuhan analisis.
import sqlite3
import pandas as pd
import matplotlib.pyplot as plt
# Setup database
conn = sqlite3.connect('kantin.db')
# Buat tabel
conn.execute("""
CREATE TABLE IF NOT EXISTS transaksi (
id INTEGER PRIMARY KEY,
tanggal TEXT,
jam TEXT,
menu TEXT,
harga INTEGER,
jumlah INTEGER
)
""")
# Load data ke SQLite
df = pd.read_csv('transaksi_kantin.csv')
df.to_sql('transaksi', conn, if_exists='replace', index=False)
# Query: menu terlaris
query = """
SELECT menu,
SUM(jumlah) as total_terjual,
SUM(harga * jumlah) as total_pendapatan
FROM transaksi
GROUP BY menu
ORDER BY total_terjual DESC
"""
result = pd.read_sql(query, conn)
print(result)
Ini bukan pengganti scaffold SQLite di atas. Ini versi pemanasan pakai .groupby() di Pandas, cocok buat ngerasain polanya dulu sebelum masuk ke SQL beneran. Kode ini sudah dites langsung di Colab dan jalan tanpa error.
import pandas as pd
df = pd.read_csv("data_penjualan_kantinmu.csv") # export tab "Data" di Sheet ke CSV dulu
# rata-rata omzet per transaksi tiap hub
df.groupby("Hub")["Omzet"].mean()
# produk paling laku (total Qty)
df.groupby("Produk")["Qty"].sum().sort_values(ascending=False).head(1)
# total omzet per hub + ranking (rank 1 = paling perlu diperhatikan)
df.groupby("Hub")["Omzet"].sum().rank(ascending=True)
# tren omzet harian salah satu hub
hub1 = df[df["Hub"] == "Hub 1"].groupby("Tanggal")["Omzet"].sum()
hub1.plot(kind="line", title="Tren Omzet Harian - Hub 1")
Catatan: di Jupyter/Colab, cuma baris terakhir dalam satu cell yang otomatis ditampilkan hasilnya. Kalau mau lihat semua hasil sekaligus, pecah jadi cell terpisah per soal, atau bungkus tiap baris dengan print().
- Apa yang Abbas harapkan akan ditemukan? Tulis hipotesis awal sebelum melihat data.
- Siapa yang akan membaca hasil analisis ini? Bagaimana cara penyajian yang paling tepat untuk mereka?
- Apa yang akan Abbas lakukan jika data tidak mendukung hipotesis awal?