Tabel transaksi Toko Kopi Kita rapi: setiap kolom punya nama, setiap baris patuh pada pola yang sama. Namun begitu kita melangkah keluar dari aplikasi kasir, wajah data berubah total — ulasan pelanggan berupa kalimat bebas, foto unggahan pelanggan di media sosial, pesan WhatsApp pemesanan antar, sampai berkas log aplikasi yang panjangnya tidak menentu. Semua itu tetap data, tetapi berada pada titik berbeda dari sebuah spektrum: terstruktur, semi-terstruktur, dan tidak terstruktur. Chapter ini memetakan ketiganya beserta konsekuensinya pada cara penyimpanan dan alat analisis.
Tiga Kelompok pada Satu Spektrum #
Data terstruktur punya kerangka yang baku sebelum data direkam: jumlah kolom tetap, setiap kolom bernama dan bertipe, setiap baris mengikuti pola yang sama. Contohnya tabel di basis data SQL dan berkas CSV yang disiplin — kerangkanya sudah dinyatakan lebih dulu, sehingga mesin tahu persis di mana setiap nilai berada.
Data semi-terstruktur punya label tetapi tidak punya kerangka baku: setiap catatan membawa penanda nama medannya sendiri (self-describing), boleh ada medan yang tidak seragam antar catatan, dan isi boleh bertingkat. Contohnya JSON dan XML — respons API kasir daring, berkas konfigurasi, hasil ekspor aplikasi pengiriman.
Data tidak terstruktur tidak punya kerangka sama sekali — isinya adalah konten mentah: teks bebas (ulasan pelanggan, catatan pesanan “tanpa gula, less ice”), gambar (foto produk), audio (rekaman pesanan telepon), video, dan berkas log berformat bebas. Struktur, kalau ada, tersembunyi di dalam konten dan harus diekstraksi lebih dulu sebelum bisa dianalisis angka.
| Aspek | Terstruktur | Semi-terstruktur | Tidak terstruktur |
|---|---|---|---|
| Skema | baku, dinyatakan di awal | label per catatan, longgar | tidak ada |
| Contoh | tabel SQL, CSV disiplin | JSON, XML | teks, gambar, audio, video |
| Cara akses | query kolom dan baris | telusuri medan bertingkat | ekstraksi fitur lebih dulu |
| Alat khas | SQL, pandas | json, pandas | pemrosesan teks, computer vision |
| Siap analisis | langsung | perlu perataan | paling banyak kerja persiapan |
Berapa Banyak Data Tidak Terstruktur #
Berbagai survei industri yang umum dikutip memperkirakan sekitar 80% data yang dihasilkan organisasi berbentuk tidak terstruktur — email, dokumen, obrolan, rekaman, foto, video. Angka ini adalah perkiraan kasar yang berubah-ubah antar survei, bukan hasil sensus resmi, tetapi arah pesannya konsisten: mayoritas informasi berada dalam wujud yang tidak langsung bisa dianalisis dengan SELECT dan groupby(). Karena itu bidang pemrosesan bahasa alami dan computer vision berkembang pesat — keduanya adalah jembatan pengubah konten mentah menjadi fitur terstruktur yang bisa dihitung.
Praktik: Baris CSV vs JSON Bertingkat #
Mari kita rasakan bedanya langsung di tangan. Kita baca satu baris transaksi dari berkas CSV dengan memecah teks, lalu bandingkan dengan satu catatan JSON yang merekam transaksi serupa:
import json
# Data terstruktur: satu baris CSV, posisi kolom menentukan makna
baris_csv = "2026-01-15,kopi susu,2,24000"
nama_kolom = ["tanggal", "produk", "jumlah", "harga"]
print("Hasil parse baris CSV:", dict(zip(nama_kolom, baris_csv.split(","))))
# Data semi-terstruktur: JSON dengan medan bertingkat
teks_json = """
{
"tanggal": "2026-01-15",
"produk": "kopi susu",
"jumlah": 2,
"total": 48000,
"pelanggan": {"nama": "Budi", "member": true}
}
"""
data = json.loads(teks_json)
print("Medan produk :", data["produk"])
print("Medan bertingkat:", data["pelanggan"]["nama"], "| member:", data["pelanggan"]["member"])Output yang Dihasilkan:
Hasil parse baris CSV: {'tanggal': '2026-01-15', 'produk': 'kopi susu', 'jumlah': '2', 'harga': '24000'}
Medan produk : kopi susu
Medan bertingkat: Budi | member: TrueMari kita telaah hasil di atas:
- Baris CSV tanpa kerangka bawaan: makna setiap potongan ditentukan posisinya, sehingga kita harus menyediakan daftar
nama_kolomdari luar berkas. Pemecahan manualsplit(",")juga menghasilkan semua nilai berupa teks — angka2dan24000belum berupa bilangan sampai dikonversi. Pembaca yang disiplin sepertipd.read_csv()menangani konversi ini otomatis, tetapi intinya sama: kerangka harus datang dari luar. - JSON membawa nama medannya sendiri:
json.loads()mengubah teks menjadi struktur data Python tanpa kita memberi skema apa pun. Nilainya pun menyimpan jenisnya —2sudah bilangan,truesudah boolean. - Medan bertingkat
pelangganmemperlihatkan kekuatan sekaligus konsekuensi semi-terstruktur: satu catatan bisa memuat struktur di dalam struktur, tapi perataan ke bentuk tabel (misalnya kolomnama_pelanggan) menjadi pekerjaan tambahan sebelum analisis tabular bisa mulai.
Untuk data tidak terstruktur, langkah pertamanya lebih panjang lagi: teks ulasan perlu dipecah menjadi kata lalu dihitung, foto perlu diubah menjadi vektor fitur. Prinsip kerjanya tetap sama — ubah konten mentah menjadi kolom-kolom terstruktur, barulah alat analisis klasik bekerja.
Rangkuman #
- Spektrum data: terstruktur (skema baku), semi-terstruktur (berlabel dan bisa bertingkat), tidak terstruktur (konten mentah).
- Perkiraan yang umum dikutip menyebut sekitar 80% data organisasi tidak terstruktur; angka ini kasar, tetapi arahnya jelas — mayoritas informasi butuh ekstraksi sebelum dianalisis.
- CSV menuntut kerangka dari luar dan nilai mentah berupa teks; JSON membawa nama medan dan tipe datanya sendiri, dengan biaya perataan sebelum masuk tabel.
Kelompok data menentukan cara kita menyimpannya. Pada babak berikutnya kita berkenalan dengan format berkas yang menyertai setiap kelompok tersebut — CSV, JSON, Excel, Parquet, sampai SQL dump — pada chapter Format Data .