Data yang belum dipahami bentuknya hampir selalu diproses dengan cara yang keliru. Topik ini memperkenalkan tiga kacamata yang dipakai sepanjang jalur untuk memahami data, yaitu tingkat strukturnya, tipe variabelnya, dan granularitas barisnya beserta satuannya. Setelah membacanya, sebuah tabel dapat digambarkan secara ringkas dalam satu kalimat, misalnya “satu baris adalah satu jam pengukuran pada satu stasiun, dengan PM2.5 dalam mikrogram per meter kubik”.
Terstruktur, semi terstruktur, dan tidak terstruktur#
Tingkat struktur menentukan seberapa langsung data dapat dimuat ke dalam tabel. Data terstruktur memiliki baris dan kolom yang tetap, seperti tabel hasil pengukuran sensor. Data semi terstruktur membawa strukturnya di dalam isinya, seperti JSON yang kuncinya menyatakan arti setiap nilai, sehingga dapat diratakan menjadi tabel dengan sedikit keputusan tentang kolomnya. Data tidak terstruktur, seperti teks bebas atau gambar, tidak membawa tabel apa pun dan membutuhkan langkah ekstraksi tersendiri.
| Jenis | Contoh | Jalur biasa menuju tabel |
|---|---|---|
| Terstruktur | CSV hasil ekspor, tabel SQL | Langsung dimuat |
| Semi terstruktur | JSON dari API, log JSON Lines | Diratakan dengan memilih kunci |
| Tidak terstruktur | Catatan lapangan, foto, suara | Diekstrak lebih dahulu |
Perbedaan ini menjelaskan mengapa modul akuisisi memperlakukan berkas, API, dan log secara terpisah, sebab tingkat strukturnya berbeda meski pertanyaan analisisnya sama. Data tidak terstruktur sengaja berada di luar lingkup jalur ini, karena ekstraksinya merupakan disiplin tersendiri.
Tipe variabel dan konsekuensinya#
Setiap kolom pada tabel membawa tipe variabel yang menentukan operasi yang sah dilakukan padanya. Empat kelompok yang dipakai sepanjang jalur ini adalah nominal, ordinal, interval, dan rasio. Kualitas udara yang diklasifikasikan menjadi Baik, Sedang, dan Tidak Sehat adalah ordinal karena ada urutan yang bermakna, sedangkan nama stasiun adalah nominal karena tidak ada urutan antarnya.
Skrip berikut memperlihatkan bagaimana pandas mencatat tipe tersebut pada tingkat teknis, sekaligus menjadi kebiasaan pemeriksaan pertama atas setiap tabel baru.
"""Mengenali tipe data kolom pada sebuah DataFrame."""
import pandas as pd
data = pd.DataFrame(
{
"stasiun": ["Stasiun A", "Stasiun B", "Stasiun A"],
"waktu": pd.to_datetime(["2026-03-01", "2026-03-01", "2026-03-02"]),
"pm25": [34.0, 41.5, 28.0],
"jumlah_sensor": [4, 6, 4],
"aktif": [True, True, False],
}
)
print(data.dtypes)
print()
print(data.head(2).to_string(index=False))stasiun object
waktu datetime64[ns]
pm25 float64
jumlah_sensor int64
aktif bool
dtype: object
stasiun waktu pm25 jumlah_sensor aktif
Stasiun A 2026-03-01 34.0 4 True
Stasiun B 2026-03-01 41.5 6 TrueKeluaran tersebut memperlihatkan pemetaan yang perlu dihafalkan, yaitu teks
menjadi object, waktu menjadi datetime64, bilangan pecahan menjadi
float64, bilangan bulat menjadi int64, dan benar salah menjadi bool.
Kolom pm25 yang tersimpan sebagai teks adalah temuan paling umum pada data
nyata, dan mengubahnya menjadi numerik adalah pekerjaan pembersihan yang
dibahas pada modul pembersihan.
Granularitas dan satuan#
Granularitas menyatakan apa yang diwakili satu baris, dan ini adalah pertanyaan pertama yang harus dijawab sebelum agregasi apa pun. Tabel pengukuran dengan satu baris per jam per stasiun tidak dapat dijumlahkan secara langsung dengan tabel yang satu barisnya per peristiwa pengukuran, meskipun kolomnya terlihat sama. Menjumlahkan nilai pada granularitas yang salah adalah kesalahan klasik yang menghasilkan angka tampak masuk akal tetapi tidak bermakna.
Satuan adalah pasangan dari granularitas. PM2.5 dilaporkan dalam mikrogram per
meter kubik, suhu dalam derajat Celsius, dan kelembapan dalam persen, dan
setiap pembanding antar tabel wajib menyatukan satuannya lebih dahulu.
Kebiasaan yang baik adalah menaruh satuan pada nama kolom, misalnya
suhu_c, sehingga salah baca satuan menjadi lebih sulit terjadi.
Granularitas juga menentukan level deduplikasi. Dua baris dengan nilai sama pada granularitas per jam per stasiun adalah duplikat yang mencurigakan, sedangkan pada granularitas per peristiwa keduanya dapat menjadi pengukuran yang sah. Pertanyaan “apa yang diwakili satu baris” selalu mendahului pertanyaan “apakah baris ini ganda”.
Kesalahan umum#
Kesalahan pertama adalah memperlakukan kolom teks yang berisi angka sebagai
angka, sehingga pengurutan menjadi berdasarkan huruf dan perhitungan gagal.
Pemeriksaan dtypes pada tabel baru menangkapnya dalam sepuluh detik.
Kesalahan kedua adalah mencampur granularitas dalam satu tabel, misalnya menambahkan baris ringkasan harian di bawah baris per jam. Ringkasan itu kelak ikut terhitung sebagai data, sehingga rata-ratanya jauh meleset. Ringkasan disimpan pada tabel lain, bukan pada tabel mentahnya.
Kesalahan ketiga adalah mengabaikan satuan saat menggabungkan sumber, misalnya menyatukan suhu Celsius dengan suhu Fahrenheit tanpa konversi. Rata-rata hasil gabungan tersebut masih terlihat wajar, dan itulah yang membuatnya berbahaya. Nama kolom yang membawa satuan adalah penangkalnya.
Ringkasan#
- Tingkat struktur data, yaitu terstruktur, semi terstruktur, dan tidak terstruktur, menentukan jalur menuju tabel.
- Tipe variabel, yaitu nominal, ordinal, interval, dan rasio, menentukan
operasi yang sah, dan
dtypesmemeriksanya secara teknis. - Granularitas menyatakan apa yang diwakili satu baris dan selalu dijawab sebelum agregasi atau deduplikasi.
- Satuan menyertai setiap ukuran, dan nama kolom seperti
suhu_cmenjadi penangkal salah baca.
Referensi#
- User Guide: Intro to data structures — pandas documentation
—
penjelasan resmi tipe data (
dtypes) pada pandas. - Python for Data Analysis, 3rd Edition — Wes McKinney, O’Reilly — bab pembuka yang membahas struktur data dan tipe secara menyeluruh.