Keterampilan NumPy hanya melekat bila dilatih pada data nyata, bukan sekadar array buatan bab. Kabar baiknya, sumber data latihan tersedia dalam tiga bentuk yang saling melengkapi: dataset kecil yang sudah terpasang bersama pustaka, portal data resmi yang bisa diunduh, dan dataset sintetis yang kita hasilkan sendiri dengan seed.

Bab ini menunjukkan cara mengakses ketiganya, lengkap dengan saran ukuran yang masuk akal untuk latihan pada mesin sehari-hari.

Dataset Bawaan scikit-learn #

Paket scikit-learn membawa sejumlah dataset kecil yang sudah bersih dan siap dimuat — tanpa unduhan, tanpa akun. Daftar lengkapnya ada di halaman toy datasets , dan ringkasan modulnya di scikit-learn.org/stable/datasets . Dua di antaranya kita muat berikut:

python
import numpy as np
from sklearn.datasets import load_wine, load_diabetes

wine = load_wine()
diabetes = load_diabetes()
print("wine   :", wine.data.shape, wine.data.dtype)
print("diabetes:", diabetes.data.shape)
print("target :", wine.target_names)
print("3 fitur awal:", wine.feature_names[:3])

Output yang Dihasilkan:

text
wine   : (178, 13) float64
diabetes: (442, 10)
target : ['class_0' 'class_1' 'class_2']
3 fitur awal: ['alcohol', 'malic_acid', 'ash']

Mari kita bedah baris demi baris:

  1. Baris 1-2 (impor): numpy kita pakai untuk membaca dtype, dan modul sklearn.datasets adalah bagian scikit-learn yang terpasang terpisah dari NumPy (pip install scikit-learn bila belum ada).
  2. Baris 4-5 (load_wine(), load_diabetes()): setiap fungsi load_* mengembalikan objek mirip dictionary (Bunch) yang berisi data terukur: data (ndarray 2-D berisi fitur), target (label per baris), feature_names, dan target_names.
  3. Baris 6-7 (wine.data.shape): shape menunjukkan (jumlah_sampel, jumlah_fitur) — wine berisi 178 sampel × 13 fitur, diabetes 442 × 10; dtype-nya float64, tanda data siap diolah NumPy tanpa konversi.
  4. Baris 8-9: nama target dan fitur tercetak sebagai array string; feature_names[:3] memotong tiga nama pertama.

Dataset lain di kelompok yang sama: load_iris, load_digits, dan load_breast_cancer. Ukurannya kecil (puluhan sampai ratusan baris), sehingga cocok untuk melatih indexing, agregasi, dan boolean masking tanpa menunggu proses lama — keterampilan dari bab Indexing Array Multidimensi dan NaN-aware Aggregation.

Portal Data Resmi #

Untuk data yang lebih “hidup”, portal resmi menyediakan unduhan gratis:

SumberJenis dataCara mengakses
data.go.idData pemerintah Indonesia: harga pangan, kesehatan, pendidikan, dan lainnyaUnduh file CSV/Excel, lalu muat dengan np.genfromtxt
toy datasets scikit-learnDataset kecil terkurasi, sudah bersihTerpasang bersama scikit-learn, dimuat via fungsi load_*
modul datasets scikit-learnToy datasets + generator sampel sintetis + loader kategori besarModul sklearn.datasets

Di luar tabel, dua sumber yang sering disebut komunitas tanpa kami tautkan: repositori dataset universitas (kumpulan dataset klasik untuk pembelajaran mesin) dan situs kompetisi data yang menyediakan dataset dari berbagai industri. Keduanya kadang meminta akun; periksa lisensinya sebelum dipakai.

Dataset Sintetis dengan Generator Ber-seed #

Untuk latihan tertentu — menguji performa, membangun pipeline, atau menuliskan soal — dataset sintetis sering lebih tepat daripada data nyata. Resep berikut membuat file CSV penjualan kecil yang hasilnya selalu sama di mesin mana pun:

python
import numpy as np

rng = np.random.default_rng(42)
jumlah = rng.integers(10, 100, size=5)
harga = rng.integers(10, 60, size=5) * 1000
data = np.column_stack((jumlah, harga))
np.savetxt("penjualan.csv", data, fmt="%d", delimiter=",", header="jumlah,harga")
with open("penjualan.csv") as f:
    print(f.read().rstrip())

Output yang Dihasilkan:

text
# jumlah,harga
18,52000
79,14000
68,44000
49,20000
48,14000

Mari kita bedah baris demi baris:

  1. Baris 3 (default_rng(42)): generator ber-seed menjamin baris angka yang sama persis setiap file dijalankan — prinsip dari bab Reproducibility dan Random Seed.
  2. Baris 4-5 (rng.integers(...)): dua kolom acak dibuat terpisah; harga dikalikan 1000 agar bernuansa rupiah.
  3. Baris 6 (np.column_stack): dua array 1-D disusun berdampingan menjadi matriks 5×2.
  4. Baris 7 (np.savetxt(...)): matriks disimpan sebagai CSV; fmt="%d" memaksa bilangan bulat, dan header menambah baris judul kolom dengan awalan # bawaan.
  5. Baris 8-9 (open(...)): file hasilnya dibaca ulang untuk membuktikan isinya.

Keunggulan dataset sintetis: ukurannya bebas (ganti size=5 menjadi size=1_000_000 untuk latihan performa seperti pada bab Mengukur Waktu Eksekusi), datanya bebas masalah lisensi, dan hasil eksperimen mudah dibagikan karena pembaca lain bisa menghasilkan angka yang sama.

Mulai dari yang Kecil #

Mesin latihan sehari-hari biasanya punya RAM terbatas, jadi urutan yang efektif:

  1. Mulai dari dataset di bawah 10 MB — seluruh pipeline (muat, bersihkan, analisis, simpan) berjalan dalam hitungan detik, sehingga iterasi belajar cepat.
  2. Latih alur lengkap pada data kecil terlebih dahulu, termasuk penanganan nilai hilang seperti pada bab Penanganan Data Numerik yang Tidak Valid.
  3. Perbesar ukuran secara bertahap hanya saat tujuannya melatih performa dan manajemen memori — bukan saat masih menyusun logika.

Dengan tiga sumber di atas — dataset bawaan, portal resmi, dan data sintetis — kita tidak akan kehabisan bahan latihan untuk semua bab course ini, termasuk proyek-proyek pada section Proyek.