Setiap proyek deep learning bermula dari satu pertanyaan praktis: datanya dari mana? Sebelum arsitektur mana pun ditulis, kita perlu menemukan dataset yang cukup besar, berlabel benar, berlisensi jelas, dan mudah dibaca oleh tooling kita. Chapter ini memetakan sumber dataset publik yang paling sering dipakai, membahas lisensi dan kriteria pemilihan, lalu membangun katalog mini dari sumber lokal yang sudah terpasang di mesin — tanpa melakukan satu pun unduhan.
Peta Sumber Dataset Publik #
Lima platform berikut menutup mayoritas kebutuhan latihan dan riset. Alamat resminya kami cantumkan agar pembaca tidak mendarat di salinan tak resmi:
| Platform | Jenis dataset dominan | Alamat resmi |
|---|---|---|
| Kaggle | tabular, gambar, teks; banyak bekas kompetisi | kaggle.com/datasets |
| Hugging Face Datasets | NLP, audio, gambar; format terstruktur + kartu dataset | huggingface.co/datasets |
| UCI ML Repository | tabular kecil-menengah; klasik machine learning | archive.ics.uci.edu |
| torchvision | gambar standar (MNIST, CIFAR, ImageNet) | pytorch.org/vision/stable/datasets.html |
| sklearn.datasets | dataset mainan + generator sintetis | scikit-learn.org/stable/datasets.html |
Karakter kelima platform tersebut saling melengkapi. Kaggle dan Hugging Face cocok untuk eksperimen yang mendekati skala nyata; UCI untuk pembelajaran algoritma klasik dengan data kecil yang mudah dimengerti; torchvision menyediakan loader siap pakai untuk vision; sedangkan sklearn.datasets tidak memerlukan jaringan sama sekali sehingga menjadi tempat terbaik untuk berlatih deterministik.
Lisensi: Pemeriksaan Sebelum Mengunduh #
Setiap dataset publik membawa aturan pakai. Kaggle memuat lisensi per dataset (CC0, CC-BY, atau ketentuan khusus kompetisi); Hugging Face menuliskannya pada kartu dataset beserta batasan penggunaan komersial; UCI menyatakan izin pemakaian pada halaman masing-masing dataset; koleksi torchvision mengikuti lisensi data aslinya, bukan lisensi kode PyTorch.
Kriteria Memilih Dataset #
Empat pertanyaan berikut menyaring kandidat sebelum kita menginvestasikan waktu:
- Ukuran — cukupkah jumlah sampel untuk arsitektur yang direncanakan? Model besar pada data kecil hanya menghafal.
- Label dan skema anotasi — jelasakah definisi tiap kelas, siapa pelabelnya, dan seberapa konsisten hasilnya?
- Format — dapatkah formatnya dibaca langsung (CSV, Parquet) atau perlu konversi (TFRecord, format biner torchvision)?
- Distribusi dan bias — apakah sampelnya mewakili populasi target? Dataset wajah yang hanya memuat satu wilayah tidak akan bekerja adil di wilayah lain.
Diagram tersebut menekankan urutan keputusan: sumber publik diperiksa lebih dulu karena biayanya paling rendah, sumber internal dan data sintetis menyusul sebagai jalur cadangan.
Format Berkas Umum #
| Format | Kelebihan | Kapan dipakai |
|---|---|---|
| CSV | universal, dapat dibaca manusia | data tabular kecil-menengah |
| Parquet | kolom terkompresi, baca cepat | data tabular besar (ratusan MB ke atas) |
| TFRecord | streaming berurutan untuk tf.data | pipeline TensorFlow berskala besar |
| JSONL | satu objek JSON per baris | data teks dan log |
Dokumentasi pandas untuk kedua format tabular tersedia di pandas IO
, sedangkan pola tf.data dijelaskan di TensorFlow data pipeline
.
Demo: Katalog Mini Tanpa Unduhan #
Contoh berikut membangun katalog sumber sebagai DataFrame, lalu memeriksa dua sumber lokal yang siap dipakai tanpa jaringan. Berkas katalog_sumber.py juga menyertakan daftar periksa lima kriteria dalam bentuk skor:
"""Katalog mini sumber dataset publik + sumber lokal yang siap dipakai.
Tidak ada unduhan: katalog dibangun dari dict sumber, lalu kita cek dua
sumber lokal yang sudah terpasang di mesin (sklearn.datasets) supaya
pembaca bisa langsung berlatih tanpa jaringan.
"""
import pandas as pd
from sklearn.datasets import load_digits, make_classification
# ---------- 1. Katalog sumber dataset publik ----------
katalog = pd.DataFrame(
{
"platform": [
"Kaggle",
"Hugging Face Datasets",
"UCI ML Repository",
"torchvision",
"sklearn.datasets",
],
"jenis_dominan": [
"tabular, gambar, teks (kompetisi)",
"NLP, audio, gambar (terstruktur)",
"tabular kecil-menengah (klasik)",
"gambar standar (MNIST, CIFAR, ImageNet)",
"mainan + generator sintetis",
],
"lisensi_umum": [
"beragam per dataset (CC, open, custom)",
"per dataset, di kartu dataset",
"bebas dipakai, cek halaman dataset",
"BSD untuk kode; gambar per dataset",
"BSD (paket scikit-learn)",
],
"butuh_unduhan": [
"ya", "ya", "ya", "ya", "tidak",
],
}
)
print("===== KATALOG SUMBER DATASET PUBLIK =====")
print(katalog.to_string(index=False))
# ---------- 2. Sumber lokal: digits dan generator sintetis ----------
digits = load_digits()
X_img, y_img = digits.data, digits.target
X_syn, y_syn = make_classification(
n_samples=400,
n_features=8,
n_informative=5,
n_classes=3,
random_state=42,
)
print()
print("===== SUMBER LOKAL TANPA UNDUHAN =====")
print("sklearn digits :", X_img.shape, "sampel,", X_img.shape[1], "fitur",
"| kelas:", sorted(set(y_img.tolist())))
print("make_classification:", X_syn.shape, "| kelas:",
sorted(set(y_syn.tolist())))
# ---------- 3. Daftar periksa sebelum memakai dataset ----------
print()
print("===== DAFTAR PERIKSA (skor 0/1) =====")
cek = pd.DataFrame(
{
"kriteria": [
"ukuran cukup untuk arsitektur?",
"label dan skema anotasi jelas?",
"format bisa dibaca tooling kita?",
"lisensi mengizinkan penggunaan kita?",
"distribusi mewakili kasus produksi?",
],
"digits": [1, 1, 1, 1, 0],
"sintetis": [1, 1, 1, 1, 0],
}
)
print(cek.to_string(index=False))
print("total skor digits :", int(cek["digits"].sum()), "dari", len(cek))
print("total skor sintetis:", int(cek["sintetis"].sum()), "dari", len(cek))Output yang Dihasilkan:
===== KATALOG SUMBER DATASET PUBLIK =====
platform jenis_dominan lisensi_umum butuh_unduhan
Kaggle tabular, gambar, teks (kompetisi) beragam per dataset (CC, open, custom) ya
Hugging Face Datasets NLP, audio, gambar (terstruktur) per dataset, di kartu dataset ya
UCI ML Repository tabular kecil-menengah (klasik) bebas dipakai, cek halaman dataset ya
torchvision gambar standar (MNIST, CIFAR, ImageNet) BSD untuk kode; gambar per dataset ya
sklearn.datasets mainan + generator sintetis BSD (paket scikit-learn) tidak
===== SUMBER LOKAL TANPA UNDUHAN =====
sklearn digits : (1797, 64) sampel, 64 fitur | kelas: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
make_classification: (400, 8) | kelas: [0, 1, 2]
===== DAFTAR PERIKSA (skor 0/1) =====
kriteria digits sintetis
ukuran cukup untuk arsitektur? 1 1
label dan skema anotasi jelas? 1 1
format bisa dibaca tooling kita? 1 1
lisensi mengizinkan penggunaan kita? 1 1
distribusi mewakili kasus produksi? 0 0
total skor digits : 4 dari 5
total skor sintetis: 4 dari 5Contoh di atas diuji nyata dengan pandas 2.2.3 dan scikit-learn 1.5.2 pada mesin CPU. Mari kita telaah kode di atas baris per baris:
- Baris 8-9 (impor):
pandasmenyediakan DataFrame untuk katalog dan daftar periksa; dua fungsi darisklearn.datasetsmenjadi perwakilan sumber lokal. - Baris 11-39 (katalog): DataFrame dibangun dari dict lima kolom — membangun tabel referensi langsung di kode membuat katalog ikut ter-versioning bersama proyek.
- Baris 43-53 (sumber lokal):
load_digits()memuat 1.797 gambar digit tulisan tangan beresolusi 8×8 yang diluruskan menjadi 64 fitur, sedangkanmake_classification(..., random_state=42)menghasilkan dataset klasifikasi sintetis yang identik setiap dijalankan. - Baris 62-79 (daftar periksa): lima kriteria pemilihan dikodekan sebagai skor 0/1 untuk dua kandidat. Kedua kandidat lolos empat kriteria dan gagal pada kriteria terakhir — data latihan memang tidak mewakili populasi produksi, sehingga kesimpulan latihan tidak boleh dibaca sebagai kesimpulan produk.
Dataset terpilih hanyalah bahan mentah. Pada banyak kasus nyata, label yang kita butuhkan belum ada di dalamnya — dan di titik itu muncul pekerjaan pelabelan yang kita bahas pada chapter berikutnya.