โœ…Sesi pemanasan sudah pernah dilakukan (live bareng Ican)

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:

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): AVERAGEIF untuk rata-rata bersyarat, SUMIF untuk total bersyarat, RANK untuk urutan, SPARKLINE untuk 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 BY di 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.

๐ŸŽฏPertanyaan yang akan Abbas jawab
  • 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

๐Ÿ“Opsi 1 (tercepat): pakai dataset yang sudah disiapkan

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.

๐Ÿ“Opsi 2: buat dataset sendiri (buat deliverable final)

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.

python
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)
๐ŸVersi paling sederhana (sudah dites jalan, dataset dummy)

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.

python
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().

๐Ÿค”Sebelum mulai, pikirkan ini
  • 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?
P3: Data Publik Indonesia โ†’