Belajar Data Scientist - Python Data Stack
Episode 4 of 28

Belajar Data Scientist - Python Data Stack

Menguasai inti Python data stack: NumPy untuk array & operasi vectorized, Pandas untuk DataFrame, dan kebiasaan menulis kode yang cepat serta idiomatis — lengkap dengan analisis data nyata menggunakan Pandas

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah di episode 3 kita membangun fondasi statistika, pada episode ini kita mempelajari bahasa kerjanya: Python data stack. NumPy dan Pandas adalah dua library yang akan menemani kalian di hampir setiap episode series ini — dan hampir semua library data science dibangun di atas keduanya.

Mengapa penting menguasai stack ini secara mendalam? Karena 80% waktu data science dihabiskan untuk memanipulasi data, bukan melatih model. Kalian yang menguasai NumPy dan Pandas akan bekerja berlipat kali lebih cepat — baik dalam kecepatan eksekusi (vectorized operations) maupun kecepatan menulis kode (idiomatis dan ringkas). Sebaliknya, yang memakai loop Python untuk semua hal akan frustrasi melihat proses lambat.

NumPy: Bahasa Asli Data

NumPy memperkenalkan ndarray — array N-dimensi dengan operasi element-wise yang berjalan di lapisan C. Ini perbedaan krusialnya: operasi vectorized dijalankan tanpa loop Python, sehingga jauh lebih cepat.

Vectorized vs loop
import numpy as np
import time
 
data = np.random.rand(1_000_000)
 
t0 = time.time()
result = [x * 2 + 1 for x in data]       # loop Python
t_loop = time.time() - t0
 
t0 = time.time()
result = data * 2 + 1                     # vectorized
t_vec = time.time() - t0
 
print(f"loop     : {t_loop:.4f}s")
print(f"vectorized: {t_vec:.4f}s")

Perbedaan kecepatan biasanya 10-100x — dan kodenya lebih pendek, lebih jelas, tanpa kesalahan indeks. Aturan emasnya: jika kalian menulis loop di atas data numerik, kemungkinan besar ada cara vectorized yang lebih baik.

Operasi Kunci NumPy

Operasi inti NumPy
import numpy as np
 
a = np.array([[1, 2], [3, 4]])
print(a.shape)          # (2, 2)
print(a.T)              # transpose
print(a @ a)            # perkalian matriks
print(np.linalg.inv(a)) # invers matriks
 
arr = np.array([1, 2, 3, 10, 100])
print(np.log1p(arr))    # log transform yang aman untuk 0

np.linalg, np.log1p, np.where, dan broadcasting adalah tool yang akan muncul terus di series ini — terutama di episode 5 (wrangling) dan 10 (feature engineering).

Pandas: Bahasa Asli Data Tabular

Pandas dibangun di atas NumPy dan memperkenalkan DataFrame — tabel 2D dengan index dan kolom bernama. Sebagian besar analisis data dimulai dan berakhir di sini.

Membangun dan menyelami DataFrame
import pandas as pd
 
df = pd.DataFrame({
    "customer": ["A", "B", "C", "D", "E"],
    "spend":    [120, 340, 90, 500, 210],
    "region":   ["JKT", "BDG", "JKT", "SBY", "BDG"],
})
 
print(df.head(2))
print(df.describe())

df.describe() memberi ringkasan statistik sekaligus — langkah pertama dari setiap EDA (diprediksi episode 6).

Select, Filter, dan GroupBy

Tiga operasi yang akan dipakai terus-menerus:

Select, filter, groupby
df["spend"]                      # pilih kolom → Series
df[df["spend"] > 200]            # filter baris
df.groupby("region")["spend"]    # aggregasi per group
df.groupby("region")["spend"].agg(["mean", "sum", "count"])

groupby adalah jantung analisis agregasi: pertanyaan seperti "rata-rata belanja per kota" atau "jumlah order per segmen" diekspresikan dalam satu baris.

Vectorized di Pandas

Hampir semua operasi kolom bisa ditulis element-wise tanpa loop:

Operasi kolom vectorized
df["spend_plus_tax"] = df["spend"] * 1.11
df["segment"] = np.where(df["spend"] > 250, "high", "low")
df["log_spend"] = np.log1p(df["spend"])

Perhatikan pola yang dihindari: for i, row in df.iterrows(). Itu lambat dan harus dihindari di dataset besar. Gunakan operasi kolom, apply secara bijak, atau groupby.

Praktik: Analisis Data Penjualan

Sekarang kita gabungkan semuanya dalam analisis penjualan sederhana — dataset buatan tiga cabang toko:

Praktik analisis penjualan
import numpy as np
import pandas as pd
 
np.random.seed(7)
n = 2000
df = pd.DataFrame({
    "date": pd.date_range("2026-01-01", periods=n, freq="D"),
    "store": np.random.choice(["Jakarta", "Bandung", "Surabaya"], n),
    "product": np.random.choice(["A", "B", "C"], n),
    "qty": np.random.randint(1, 20, n),
    "price": np.random.choice([50000, 75000, 100000], n),
})
df["revenue"] = df["qty"] * df["price"]
 
revenue_by_store = df.groupby("store")["revenue"].sum()
print(revenue_by_store.sort_values(ascending=False))
 
df["month"] = df["date"].dt.to_period("M")
monthly = df.groupby("month")["revenue"].sum()
print(monthly.head(3))
 
top_product = df.groupby("product")["qty"].sum().idxmax()
print("produk terlaris:", top_product)

Analisis ini memakai hampir semua konsep episode ini: DataFrame, groupby, agg, kolom baru, dan agregasi waktu. Pola yang sama akan kalian pakai di episode 6-8 dengan dataset yang lebih rumit.

Tip

Biasakan menulis pipeline Pandas secara berantai dan berurutan, bukan dalam satu baris raksasa. Notebook yang bisa dibaca orang lain adalah bagian dari nilai seorang data scientist — episode 17 akan membahas komunikasi, dan itu dimulai dari kode yang rapi.

Kesalahan Umum

PitfallDampakSolusi
Loop Python di atas data numerikLambat 10-100xGunakan vectorized operations
iterrows() untuk semua transformasiSangat lambat di dataset besarOperasi kolom / apply
Mengubah data "di tempat" saat eksplorasiKehilangan jejak, sulit debugBuat kolom/salinan baru untuk setiap langkah
Lupa axis di apply/dropnaHasil salah tanpa errorCek dokumentasi, gunakan nama eksplisit
Mengabaikan tipe dataMemori boros, agregasi salahGunakan dtypes, kategori untuk kolom kategorikal

Penutup

Inti yang harus dibawa pulang:

  • NumPy = array + operasi vectorized; tulis operasi element-wise, bukan loop.
  • Pandas = DataFrame; groupby + agg adalah jantung agregasi.
  • Select → filter → groupby → vectorized transform adalah pola kerja harian.
  • Waktu eksekusi & keterbacaan kode adalah bagian dari profesionalisme data science.

Di episode 5 selanjutnya kita akan membahas data wrangling & cleaning — menangani missing values, outlier, dan feature engineering dasar, yang menentukan 80% keberhasilan model. Sampai jumpa di episode 5!

Belajar Data Scientist - Python Data Stack | Belajar Data Scientist