Setiap eksperimen kini meninggalkan jejak, tetapi jejak itu bertumpu pada satu benda yang paling sering luput dari dokumentasi: dataset itu sendiri. Berkas transaksi.csv terbuka dengan rapi di layar kita hari ini karena kita yang membangunnya; enam bulan dari sekarang, rekan yang mengambil alih proyek akan menatap kolom yang sama dengan pertanyaan — satuan total rupiah atau ribuan rupiah? Kenapa ada nilai nonmember? Sejak kapan pencatatannya rapi? Dokumentasi dataset menjawab semua itu lebih dulu. Bab ini membangun dua artefaknya: kamus data yang memetakan setiap kolom, dan README yang menjelaskan dataset sebagai satu kesatuan — pengantar, isi, dan cara memakainya.

Kamus Data: Peta Setiap Kolom #

Kamus data (data dictionary) adalah tabel kecil dengan satu baris per kolom, memuat setidaknya empat hal: nama kolom, tipe datanya, artinya, dan satu contoh nilainya. Empat informasi itu menjawab pertanyaan yang pasti muncul saat orang lain (atau kita sendiri, lusa) membuka berkas: kolom apa saja yang ada, bagaimana cara membacanya, dan seperti wujud isinya. Untuk dataset transaksi kita, kamusnya terlihat seperti ini:

KolomTipeDeskripsiContoh
tanggalobjecttanggal transaksi, format YYYY-MM-DD2026-01-05
pelangganobjectnama panggilan anggota; nonmember bila bukan anggotaBudi
menuobjectmenu yang dipesankopi susu
totalint64nilai transaksi dalam rupiah penuh24000

Perhatikan bahwa deskripsi terbaik menyebut satuan dan nilai khusus — “rupiah penuh” (bukan ribuan), “nonmember bila bukan anggota” (bukan sekadar “nama pelanggan”). Kamus yang menulis “nama pelanggan” saja akan meninggalkan pertanyaan terbesar justru tak terjawab: kenapa ada baris yang bukan nama.

Generator Kamus Data Otomatis #

Menulis kamus dengan tangan terasa ringan pada empat kolom, tetapi dataset nyata punya puluhan kolom dan rawan usang begitu data berubah. Kebiasaan yang lebih sehat: menghasilkan kerangka kamus langsung dari DataFrame, lalu menambahkan deskripsi yang hanya bisa ditulis manusia. Tiga dari empat kolom kamus — nama, tipe, dan contoh nilai — adalah fakta yang bisa dibaca mesin; hanya deskripsi yang benar-benar pekerjaan kita.

python
import pandas as pd

transaksi = pd.DataFrame({
    "tanggal": ["2026-01-05", "2026-01-05", "2026-01-06", "2026-01-06",
                "2026-01-07", "2026-01-07", "2026-01-07", "2026-01-08"],
    "pelanggan": ["Budi", "Siti", "Dewi", "Siti", "Budi", "Dewi", "nonmember", "Agus"],
    "menu": ["kopi susu", "americano", "matcha", "teh melati",
             "kopi susu", "matcha", "americano", "kopi susu"],
    "total": [24000, 18000, 28000, 18000, 24000, 28000, 22000, 32000],
})

deskripsi = {
    "tanggal": "tanggal transaksi (YYYY-MM-DD)",
    "pelanggan": "nama panggilan anggota; nonmember bila bukan anggota",
    "menu": "menu yang dipesan",
    "total": "nilai transaksi dalam rupiah penuh",
}

kamus = pd.DataFrame({
    "kolom": list(transaksi.columns),
    "tipe": [str(t) for t in transaksi.dtypes],
    "hilang": [int(transaksi[k].isna().sum()) for k in transaksi],
    "contoh": [transaksi[k].iloc[0] for k in transaksi],
})
kamus["deskripsi"] = [deskripsi[k] for k in transaksi.columns]

print(kamus.to_string(index=False))

Output yang Dihasilkan:

text
    kolom   tipe  hilang     contoh                                            deskripsi
  tanggal object       0 2026-01-05                       tanggal transaksi (YYYY-MM-DD)
pelanggan object       0       Budi nama panggilan anggota; nonmember bila bukan anggota
     menu object       0  kopi susu                                    menu yang dipesan
    total  int64       0      24000                   nilai transaksi dalam rupiah penuh

Mari kita bedah cara kerjanya:

  1. transaksi.dtypes dan isna().sum() membaca fakta langsung dari data — tipe kolom dan jumlah nilai hilang — sehingga kamus tidak pernah berbeda dengan kondisi data. Begitu kolom baru muncul atau tipe berubah, generator ikut berubah tanpa perlu diingatkan.
  2. deskripsi tetap ditulis tangan karena hanya manusia yang tahu makna: kenapa nonmember ada, dan bahwa total berdenar rupiah penuh. Pemisahan fakta-mesin dan makna-manusia inilah pola yang tepat: otomatis yang bisa diotomatisasi, tulis yang memang harus ditulis.
  3. Kolom contoh diambil dari iloc[0] — baris pertama memadai untuk gambaran; untuk dataset nyata, contoh bisa diambil dari unique() yang sudah disaring nilainya sensitif.
  4. Kamus berupa DataFrame berarti bisa ikut mengalir dalam pipeline: disimpan ke CSV bersama dataset, dibuka di notebook, atau diperiksa otomatis — misalnya membandingkan tipe kamus dengan tipe data hari ini sebagai alarm perubahan.

README Dataset: Dokumen Sambutan #

Kamus menjelaskan kolom; README menjelaskan dataset sebagai satu benda. Isinya menjawab pertanyaan yang muncul sebelum kolom pertama dibaca: dari mana data ini, periode kapan, bagaimana memuatnya, dan boleh dibagikan ke siapa. Satu halaman pendek sudah memadai bila setiap barisnya informatif:

text
# Dataset Transaksi Toko Kopi Kita

Asal        : ekspor sistem kasir kedai, diambil 9 Januari 2026
Periode     : 5-8 Januari 2026 (uji coba pencatatan keanggotaan)
Cara memuat : pd.read_csv("transaksi.csv") - koma pemisah, UTF-8
Bentuk      : satu baris = satu transaksi; 8 baris, 4 kolom
Catatan     : kolom total dalam rupiah penuh; "nonmember" menandai
              pelanggan tanpa keanggotaan; tanggal sebelum Oktober 2025
              tidak dipakai (pencatatan belum rapi)
Lisensi     : internal kedai - tidak dibagikan ke luar tanpa izin

Perhatikan bahwa README jujur pada keterbatasan — “tanggal sebelum Oktober 2025 tidak dipakui” adalah informasi yang menyelamatkan analisis orang lain dari kekeliruan yang pernah kita hindari. Dokumentasi yang baik bukan brosur; dokumentasi adalah hasil profil data yang ditulis ulang untuk pembaca berikutnya.

Metafora yang Tepat: Metadata #

Kamus data adalah anggota paling konkret dari keluarga yang lebih luas: metadata, yaitu data tentang data. Konsep ini sudah kita kenal pada chapter Metadata — di sana kita membedakan metadata deskriptif (judul, asal, periode), struktural (format, tipe), dan administratif (lisensi, akses). README dan kamus kita memuat ketiganya: baris “Asal” dan “Periode” adalah metadata deskriptif, tabel tipe kolom adalah metadata struktural, dan baris “Lisensi” adalah metadata administratif. Menyebut istilahnya memberi kita bahasa bersama saat berdiskusi dengan pustakawan data atau tim tata kelola.

Rangkuman #

  • Dokumentasi dataset adalah jembatan kepada pengguna berikutnya; tanpanya, hanya pembuat yang bisa membaca — dan hanya selama ia ingat.
  • Kamus data memetakan setiap kolom: nama, tipe, deskripsi, dan contoh nilai; deskripsi terbaik menyebut satuan dan nilai khusus seperti nonmember.
  • Generator otomatis mengambil fakta (tipe, nilai hilang, contoh) langsung dari DataFrame, sementara deskripsi tetap ditulis manusia — pemisahan yang menjaga kamus tidak usang.
  • README menjawab pertanyaan sebelum kolom dibaca: asal, periode, cara memuat, catatan penting, dan lisensi — termasuk kejujuran soal keterbatasan data.
  • Kamus dan README adalah metadata deskriptif, struktural, dan administratif dalam wujud paling praktis, dan disimpan satu folder bersama datanya.

Dataset kita kini bisa dipahami orang lain. Satu syarat reproduksi masih menggantung: orang itu juga harus bisa menjalankan kodenya di komputernya sendiri — dengan versi pustaka yang sama seperti saat analisis dibuat. Menutup celah itu adalah pekerjaan chapter berikutnya: Pengelolaan Dependensi .

Referensi #

  1. pandas — pandas.read_csv