Prediksi menempel pada data: model hanya bisa belajar dari pola yang pernah tercatat. Pada bagian ini kita mengenal bahan bakunya — dari mana angka harga mingguan cabai merah berasal, bagaimana cara pencatatannya, dan bagaimana bentuk berkas harga_mingguan.csv yang akan menopang seluruh proyek. Mengenal asal data sejak awal menentukan batas tafsir prakiraan nanti: prediksi 4 minggu ke depan tidak boleh terdengar lebih pasti daripada data yang menopangnya.
Dari Mana Data Ini Berasal #
Setiap minggu selama 36 pekan, Bu Warni mencatat satu angka: harga rata-rata cabai merah di pasar tradisional tempat ia biasa berbelanja. Angka itu bukan harga satu transaksi, melainkan rata-rata kisaran harga yang ia catat dari beberapa pedagang pada pekan tersebut — cara yang sederhana, murah, dan cukup stabil untuk kebutuhan warung. Hasilnya satu deret: W1 sampai W36, dari minggu yang dimulai 2 Juni 2025 sampai minggu yang dimulai 2 Februari 2026.
| Aspek | Keterangan |
|---|---|
| Pencatat | Bu Warni, pemilik warung |
| Sumber | Harga rata-rata mingguan satu pasar tradisional di Surabaya |
| Periode | 36 minggu, W1 (2 Juni 2025) sampai W36 (2 Februari 2026) |
| Selang waktu | Tetap 7 hari; tiap baris bertanggal Senin tempat minggu dimulai |
| Satuan | Ribu rupiah per kilogram |
Mengapa 36 minggu? Untuk horizon 4 minggu, kita butuh riwayat yang memuat beberapa putaran pola musiman agar model punya contoh untuk belajar — sekaligus cukup panjang untuk menyisihkan 6 minggu uji tanpa menggerus data latih. Materi tentang menimbang sumber data dibahas tuntas pada chapter Sumber Data .
Mencatat Asal-Usul Data #
Asal-usul data (provenance) adalah catatan singkat yang menjawab: siapa yang mencatat, dari mana, kapan, dan dalam satuan apa. Praktik ini membuat analisis dapat dipercaya ketika dijalankan ulang berbulan-bulan kemudian — oleh kita sendiri maupun orang lain:
provenance = {
"pencatat": "Bu Warni (pemilik warung)",
"sumber_utama": "harga rata-rata mingguan satu pasar tradisional di Surabaya",
"periode": "W1-W36, minggu mulai 2 Juni 2025 s.d. 2 Februari 2026",
"selang": "7 hari (mingguan, tanggal mulai Senin)",
"satuan": "ribu rupiah per kilogram",
}
for kunci, nilai in provenance.items():
print(f"{kunci:12}: {nilai}")Output yang Dihasilkan:
pencatat : Bu Warni (pemilik warung)
sumber_utama: harga rata-rata mingguan satu pasar tradisional di Surabaya
periode : W1-W36, minggu mulai 2 Juni 2025 s.d. 2 Februari 2026
selang : 7 hari (mingguan, tanggal mulai Senin)
satuan : ribu rupiah per kilogramLima baris itu adalah kontrak data kita: siapa pun yang membaca prakiraan ini tahu bahwa angkanya berlaku untuk satu komoditas, satu pasar, 36 minggu, dan satuan ribu rupiah per kilogram. Kebiasaan mencatat asal-usul data dibahas lebih jauh pada chapter Pencatatan Asal Data .
Struktur Berkas CSV #
Berkas data/harga_mingguan.csv berbentuk deret waktu: baris-barisnya adalah pengamatan yang sama jenisnya, berurutan waktu, dengan selang tetap 7 hari. Tiga kolomnya:
| Kolom | Tipe | Makna |
|---|---|---|
minggu | teks | Penanda minggu W1–W36; W1 = minggu mulai 2 Juni 2025 |
tanggal_mulai | teks tanggal | Senin tempat minggu itu dimulai, format YYYY-MM-DD |
harga_ribu | angka | Harga rata-rata minggu itu, ribu rupiah per kilogram |
Dengan 36 minggu, kita berharap menemukan tepat 36 baris. Kenyataannya, seperti terlihat sebentar lagi, jumlahnya lebih dari itu — dan selisihnya bukan kebetulan, melainkan bahan Bagian 3. Konsep dasar data berurutan waktu dibahas pada chapter Pengenalan Deret Waktu .
Membaca Sekilas dengan pandas #
Ketika kode pada bagian-bagian proyek ini dijalankan, direktori kerjanya adalah folder bagian, sehingga berkas data berada satu tingkat di atasnya — itulah sebabnya path yang dipakai adalah ../data/harga_mingguan.csv. Berikut bacaan pertama kita:
import pandas as pd
df = pd.read_csv("../data/harga_mingguan.csv")
print("Jumlah baris :", df.shape[0])
print("Jumlah kolom :", df.shape[1])
print("Nama kolom :", list(df.columns))
print()
print(df.head(12))Output yang Dihasilkan:
Jumlah baris : 38
Jumlah kolom : 3
Nama kolom : ['minggu', 'tanggal_mulai', 'harga_ribu']
minggu tanggal_mulai harga_ribu
0 W1 2025-06-02 40.1
1 W2 2025-06-09 40.1
2 W3 2025-06-16 40.1
3 W4 2025-06-23 38.8
4 W5 2025-06-30 36.4
5 W6 2025-07-07 35.9
6 W7 2025-07-14 37.2
7 W8 2025-07-21 38.6
8 W9 2025-07-28 39.9
9 W10 2025-08-04 41.4
10 W10 2025-08-04 41.4
11 W10 2025-08-04 41.4Mari kita telaah keluaran di atas:
df.shape[0]bernilai 38: harapan kita 36, kenyataannya 38. Ada dua baris lebih — dan dua baris itu sudah terlihat telanjang dihead(12): W10 tercatat tiga kali dengan isi yang persis sama, hasil entri ulang yang lupa dihapus.- Kolom
harga_ribu: pada dua belas baris pertama tampil sebagai angka, tetapi di suatu tempat di bawah ada satu sel yang bukan angka — satu tanda-pada W27 yang membuat pandas membaca seluruh kolom sebagai teks. Kita belum melihatnya di sini; itulah mengapa validasi sistematis pada Bagian 3 tidak bisa digantikan oleh pandangan sekilas. tanggal_mulaiberformatYYYY-MM-DD: format ini mengurutkan benar sebagai teks — sifat yang akan kita pakai saat membersihkan data tanpa harus mengubahnya ke tipe tanggal.
Fungsi read_csv() punya banyak opsi untuk berkas yang tidak rapi; daftar lengkapnya ada di dokumentasi pandas untuk read_csv
. Kita sengaja tidak memakai opsi khusus apa pun saat memuat: kita ingin melihat data sekecil apa adanya sebelum memperlakukannya.
Ringkasan Bagian 2 #
Data harga berasal dari catatan mingguan Bu Warni atas satu pasar di Surabaya: 36 minggu dari Juni 2025 sampai Februari 2026, satu angka rata-rata per minggu, satuan ribu rupiah per kilogram, dengan asal-usul yang tercatat. Pembacaan pertama sudah menemukan kejanggalan pertama: 38 baris padahal seharusnya 36, dengan W10 tercatat tiga kali.
Kejanggalan itu tidak kita biarkan begitu saja. Pada Bagian 3: Memvalidasi Data kita memeriksanya secara sistematis: urutan minggu, duplikat, sel tidak wajar, dan rentang harga.