pythonnumpyarrayMenengah4 mnt baca

NumPy: Fondasi Komputasi Data

Array NumPy dan vectorization: hitung jutaan angka tanpa loop yang lambat.

List Python itu gerobak, NumPy itu truk kontainer

Analogi: list bawaan Python seperti gerobak dorong, bisa angkut apa saja tapi lambat dan tiap barang dibungkus satu-satu. NumPy array seperti truk kontainer: semua muatan sejenis, tersusun rapat, diangkut sekaligus. Untuk data kecil bedanya tidak terasa, tapi untuk sejuta angka, loop for Python bisa 50-100x lebih lambat dibanding operasi NumPy yang berjalan di kode C yang dioptimasi.

Kenapa penting buat data analyst? Tiga alasan: pertama, pandas dibangun di atas NumPy, jadi paham array berarti paham separuh cara kerja pandas. Kedua, ringkasan statistik (rata-rata, standar deviasi) jadi satu baris. Ketiga, kecepatan: dataset 100 ribu baris yang di-loop manual bisa bikin notebook ngadat, versi NumPy selesai sekejap.

Contoh pertama, operasi langsung ke seluruh array (ini yang disebut vectorization):

python
import numpy as np

harga = np.array([15000, 8000, 12000, 25000, 10000])
print(harga * 2)        # diskon? tinggal kali, semua elemen kena
print(harga + 2000)     # tambah ongkir ke semua
print(harga > 10000)    # [ True False  True  True False]

Bandingkan dengan list biasa: [15000, 8000] * 2 malah menggandakan isi list, bukan mengalikan angkanya. Itu jebakan klasik yang dibahas di bawah.

Contoh kedua, lebih realistis: normalisasi nilai ujian 5 siswa ke skala 0-100 dan hitung statistiknya, tanpa satu pun loop:

python
nilai = np.array([70, 85, 90, 60, 95])
skala = nilai / nilai.max() * 100   # vectorization penuh

print("Ternormalisasi:", skala.round(1))
print("Rata-rata:", skala.mean().round(1))
print("Tertinggi:", skala.max(), "| Terendah:", skala.min())
print("Std dev:", skala.std().round(2))

Satu ekspresi nilai / nilai.max() * 100 menggantikan loop lima baris. Inilah pola pikir yang harus dilatih: kalau kamu menulis for untuk mengutak-atik angka satu per satu, biasanya ada cara NumPy yang lebih singkat.

Array juga punya bentuk. Data tabel 2 baris x 3 kolom:

python
m = np.array([[1, 2, 3], [4, 5, 6]])
print(m.shape)         # (2, 3)
print(m.reshape(3, 2)) # ubah jadi 3 baris x 2 kolom

Tidak heran DataFrame pandas pada dasarnya adalah array 2D yang diberi label baris dan kolom.

Jebakan umum

SALAH: pakai list untuk operasi matematika.

python
harga = [15000, 8000, 12000]
print(harga * 2)   # [15000, 8000, 12000, 15000, 8000, 12000] (!!)

BENAR: ubah ke array dulu, baru operasikan.

python
harga = np.array([15000, 8000, 12000])
print(harga * 2)   # [30000 16000 24000]

SALAH: campur tipe data dalam satu array dan berharap angkanya tetap angka.

python
campur = np.array([10, 20, "tiga puluh"])
print(campur * 2)  # ['1010' '2020' 'tiga puluhtiga puluh'] (jadi string semua!)

BENAR: jaga satu tipe per array. NumPy memaksa satu tipe untuk semua elemen demi kecepatan, jadi satu string liar menular ke semuanya. Bersihkan data dulu sebelum masuk NumPy.

Catatan teknis: Fungsi seperti np.mean() dan method .mean() hasilnya sama untuk array NumPy. Bedanya terasa saat data mencapai ratusan ribu elemen: NumPy menyimpan data rapat dalam satu tipe (misal semua int64), sedangkan list Python menyimpan objek terpisah yang boros memori.

Tantangan

Normalisasi nilai

Diberi array nilai [70, 85, 90, 60, 95]. Dengan vectorization (tanpa loop), ubah ke skala 0-100 relatif terhadap nilai max: nilai / max * 100. Print hasilnya dan rata-ratanya.