Pertanyaan analisis sudah tersusun; sekarang kita mengenal bahan bakunya. Pada bagian ini kita membedah dari mana angka harga berasal, bagaimana cara pencatatannya, dan bagaimana bentuk berkas harga_komoditas.csv yang akan menemani kita sampai akhir proyek. Mengenal asal data sejak awal membuat kita tahu batas tafsirnya nanti: kesimpulan tidak boleh lebih kuat daripada data yang menopangnya.

Dari Mana Data Ini Berasal #

Data harga warung Bu Warni lahir dari dua sumber yang saling melengkapi. Setiap pekan, Bu Warni mencatat harga yang benar-benar ia bayar saat berbelanja dari nota belanja warung; untuk bahan yang pekan itu tidak ia beli, ia memakai harga rata-rata yang dipapankannya dari satu pasar tradisional di sekitar warung. Dari keduanya, diambil satu angka per bahan per pekan: harga rata-rata pekan tersebut.

SumberPeranKekuatanKelemahan
Nota belanja warungHarga aktual yang dibayarPersis seperti pengeluaran nyataHanya bahan yang memang dibeli
Harga pasar di sekitar warungPembanding dan pengisi bahan yang tidak dibeliTersedia setiap pekanRata-rata, bukan harga transaksi

Pola dua sumber seperti ini umum pada data usaha kecil: sumber utama kaya tetapi berlubang, sumber sekunder melengkapinya. Pada Bagian 3 kita akan melihat bahwa hasil kombinasinya pun masih menyimpan masalah kecil yang perlu diperiksa.

Mencatat Asal-Usul Data #

Asal-usul data (provenance) adalah catatan singkat yang menjawab: siapa yang mencatat, dari mana, kapan, dan dalam satuan apa. Catatan ini kelihatannya sepele untuk dataset 41 baris, tetapi ketika analisis dikerjakan ulang tiga bulan kemudian — oleh kita sendiri atau orang lain — catatan inilah yang membuat angka-angkanya bisa dipercaya. Kita simpan sebagai data juga, bukan sekadar ingatan:

python
provenance = {
    "pencatat": "Bu Warni (pemilik warung)",
    "sumber_utama": "nota belanja mingguan warung",
    "sumber_pembanding": "harga rata-rata satu pasar tradisional di Surabaya",
    "periode": "M1-M8, pekan mulai 5 Januari s.d. 23 Februari 2026",
    "satuan": "ribu rupiah per kilogram",
}
for kunci, nilai in provenance.items():
    print(f"{kunci:18}: {nilai}")

Output yang Dihasilkan:

text
pencatat          : Bu Warni (pemilik warung)
sumber_utama      : nota belanja mingguan warung
sumber_pembanding : harga rata-rata satu pasar tradisional di Surabaya
periode           : M1-M8, pekan mulai 5 Januari s.d. 23 Februari 2026
satuan            : ribu rupiah per kilogram

Lima baris keluaran itu adalah kontrak data kita: siapa pun yang membaca analisis ini tahu bahwa angkanya berlaku untuk satu warung, satu pasar, delapan pekan, dan satuan ribu rupiah per kilogram. Materi tentang memilih dan menimbang sumber data dibahas tuntas pada chapter Sumber Data , dan kebiasaan mencatat asal-usulnya dibahas pada Pencatatan Asal Data .

Struktur Berkas CSV #

Berkas data/harga_komoditas.csv memakai format panjang: satu baris berisi satu pengamatan, yaitu harga satu komoditas pada satu pekan. Format ini disebut juga tidy — tiap kolom adalah satu variabel, tiap baris satu pengamatan — dan merupakan bentuk paling ramah untuk pandas.

KolomTipeMakna
mingguteksPenanda pekan M1–M8; M1 = pekan mulai 5 Januari 2026
komoditasteksNama bahan: beras, cabai merah, bawang merah, ayam broiler, gula pasir
harga_rata_ribuangkaHarga rata-rata pekan itu, ribu rupiah per kilogram

Dengan 8 pekan dan 5 komoditas, kita berharap menemukan 8 × 5 = 40 baris. Kenyataannya, seperti akan kita lihat sebentar lagi, jumlah barisnya tidak persis 40 — dan selisih itulah bahan Bagian 3.

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_komoditas.csv. Berikut bacaan pertama kita:

python
import pandas as pd

df = pd.read_csv("../data/harga_komoditas.csv")
print("Jumlah baris :", df.shape[0])
print("Jumlah kolom :", df.shape[1])
print("Nama kolom   :", list(df.columns))
print()
print(df.head(10))

Output yang Dihasilkan:

text
Jumlah baris : 41
Jumlah kolom : 3
Nama kolom   : ['minggu', 'komoditas', 'harga_rata_ribu']

  minggu     komoditas harga_rata_ribu
0     M1         beras            13.0
1     M1   cabai merah            38.0
2     M1  bawang merah            30.0
3     M1  ayam broiler            33.0
4     M1    gula pasir            17.5
5     M2         beras            13.2
6     M2   cabai merah            40.0
7     M2  bawang merah            34.0
8     M2  ayam broiler            33.5
9     M2    gula pasir            17.6

Mari kita telaah keluaran di atas:

  1. df.shape[0] bernilai 41: harapan kita 40, kenyataannya 41. Ada satu baris lebih, dan kita belum tahu yang mana.
  2. df.head(10): sepuluh baris pertama menampilkan pekan M1 dan M2 utuh — lima komoditas per pekan, harga dalam angka desimal. Semua terlihat sehat di wilayah ini.
  3. Kolom harga_rata_ribu: pada sepuluh baris pertama tampil sebagai angka, tetapi tipe kolomnya belum tentu numerik di seluruh berkas — pandas memutuskan tipe berdasarkan seluruh isi kolom, dan satu sel bermasalah sudah cukup mengubahnya.

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 nota belanja warung yang dilengkapi harga pasar, dengan asal-usul yang tercatat dan struktur panjang tiga kolom. Pembacaan pertama sudah menemukan kejanggalan pertama: 41 baris padahal seharusnya 40, dan tipe kolom harga yang belum tentu numerik.

Kejanggalan itu tidak kita tebak-tebak. Pada Bagian 3: Memvalidasi Data kita memeriksanya secara sistematis: dimensi, tipe kolom, duplikat, sel kosong, dan konsistensi nama komoditas.