Data Sources
Analisis ini menggunakan 4 sumber data utama yang saling melengkapi β dari data outlet real hingga laporan keuangan publik.
| Sumber | Deskripsi | Volume | Penggunaan |
|---|---|---|---|
| Fore Coffee API | Endpoint outlet dengan koordinat lat/lng | 350 outlets | Anchor data outlet, proximity analysis |
| Transaction Data | Data transaksi sintetis (generated) | 16,323 rows | Revenue analysis, outlet ranking, menu performance |
| Menu Master | Daftar menu + harga + kategori | 34 items | Price validation, category analysis |
| IDX Financial Reports | Laporan keuangan publik FORE | FY21βFY25 | Revenue anchor, growth validation |
Scraping Pipeline
Data outlet di-scrape dari api.fore.coffee/store/all_with_token menggunakan autentikasi wp-token. Endpoint ini mengembalikan JSON array berisi semua outlet aktif beserta metadata: nama, alamat, kota, koordinat latitude/longitude, dan tipe outlet (Store, Leisure, Fore Go, Grab & Go).
Dari scraping ini, didapatkan 350 outlet dengan koordinat real β menjadi anchor untuk proximity analysis dan geographic distribution. Setiap outlet punya koordinat GPS yang akurat, memungkinkan perhitungan jarak antar outlet menggunakan Haversine formula.
π Autentikasi API
API Fore Coffee menggunakan WordPress-based token authentication. Request dikirim dengan header wp-token yang valid. Response berupa JSON array β tidak perlu pagination karena semua outlet dikembalikan dalam satu response.
Haversine Distance
Untuk mengukur jarak antar outlet, digunakan Haversine formula β menghitung jarak great-circle antara dua titik di permukaan bumi berdasarkan koordinat latitude dan longitude.
a = sinΒ²(ΞΟ/2) + cos(Οβ) Β· cos(Οβ) Β· sinΒ²(ΞΞ»/2)
c = 2 Β· atan2(βa, β(1βa))
d = R Β· c
R = 6,371 km (radius bumi) Β· Ο = latitude Β· Ξ» = longitude
Dengan 350 outlet, total pasangan jarak yang dihitung: 350 Γ 349 / 2 = 61,075 distance pairs. Dari perhitungan ini, bisa diidentifikasi outlet-outlet yang terlalu dekat satu sama lain (cannibalization risk) β khususnya outlet dalam radius 500m.
β οΈ Catatan Haversine
Haversine mengasumsikan bumi sebagai sphere sempurna dan mengukur jarak "as the crow flies" β bukan jarak jalan. Untuk analisis proximity outlet di area urban, ini cukup akurat sebagai screening tool. Untuk keputusan final, perlu validasi dengan actual driving distance.
Data Cleaning Pipeline
Pipeline cleaning berjalan sequential β setiap step bergantung pada output step sebelumnya.
| Step | Jenis Anomali | Jumlah | Metode Deteksi |
|---|---|---|---|
| 1 | Duplicate Rows | 30 | Hash-based dedup, keep first occurrence |
| 2 | Price Mismatch | 20 | Compare unit_price vs menu master price list |
| 3 | Missing Outlet ID | 15 | NULL/empty check pada kolom outlet_id |
| 4 | Negative Quantity | 12 | quantity < 0 filter |
| 5 | Zero Total | 10 | total_amount = 0 filter |
| 6 | Future Dates | 8 | transaction_date > max_period filter |
Tools & Stack
| Tool | Peran | Detail |
|---|---|---|
| Python | Data generation & scraping | requests, pandas, numpy, json β generate dataset + scrape API |
| Excel / Google Sheets | Analysis & reporting | Cleaning, pivot tables, ranking, formula-based analysis |
| Chart.js | Visualization | Bar, doughnut, scatter, line charts β canvas-based, responsive |
| HTML / CSS / JS | Portfolio website | Pure HTML5 + CSS3 + vanilla JS β no framework, self-contained |
Reproducibility
Semua script data generation menggunakan random.seed(42) dan np.random.seed(42) β output deterministic dan reproducible. Setiap kali script dijalankan, dataset yang dihasilkan identik.
π Reproducibility Chain
generate_data.py β dataset (CSV) β build_answer_key.py β answer key (XLSX) β build_template.py β template (XLSX) β checker.py verifikasi. Satu pipeline, satu source of truth. Semua angka di portfolio ini bisa di-trace balik ke expected_values.json.
β οΈ Data Limitations
Data transaksi adalah sintetis (generated) β bukan data internal Fore Coffee yang sebenarnya. Namun, data di-anchor ke informasi real: jumlah outlet dari API scraping, harga dari menu resmi, revenue scale dari laporan keuangan IDX. Framework analisis yang dibangun tetap applicable ke data real.