Cara Kerja

Cara Kerja: Data Pipeline & Methodology

Bagaimana data dikumpulkan, dibersihkan, dan dianalisis β€” dari scraping hingga visualisasi.

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.

Haversine Formula

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.

Cleaning Flow
Raw: 16,323
β†’
Identifikasi 6 Jenis Anomali
β†’
Remove 95 Anomali
β†’
Clean: 16,229
β†’
Cross-validate vs Master Data
Step Jenis Anomali Jumlah Metode Deteksi
1Duplicate Rows30Hash-based dedup, keep first occurrence
2Price Mismatch20Compare unit_price vs menu master price list
3Missing Outlet ID15NULL/empty check pada kolom outlet_id
4Negative Quantity12quantity < 0 filter
5Zero Total10total_amount = 0 filter
6Future Dates8transaction_date > max_period filter
Total 95 anomali dari 16,323 rows = 0.58% error rate. Data retention 99.42%. Setiap anomali punya alasan realistis β€” ini bukan random noise, tapi masalah umum di POS system multi-outlet.

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.

seed=42
Random Seed
deterministic output
expected_values.json
Source of Truth
semua angka kunci
checker.py
Auto-Grader
verifikasi otomatis

πŸ”„ 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.

⚠️ Halaman ini menjelaskan methodology dan tools yang digunakan. Data transaksi bersifat sintetis untuk keperluan case study. Outlet data (350 lokasi + koordinat) berasal dari scraping API Fore Coffee yang real.