Episode ini memperkenalkan Python sebagai pisau bedah analis: DataFrame pandas, filtering & selection, groupby untuk agregasi, peran NumPy, dan workflow di Jupyter, ditutup dengan praktik EDA (exploratory data analysis) pertama yang lengkap dari dataset penjualan

Setelah di episode 5 kalian punya lensa statistika, sekarang saatnya mengambil pisau bedahnya: Python. SQL hebat untuk menarik dan merangkum data, tetapi Python membuka pintu yang tidak bisa dibuka SQL — cleaning yang fleksibel, transformasi kompleks, statistika lanjutan, dan visualisasi. Di dunia kerja, analis yang hanya bisa SQL dan analis yang bisa SQL+Python bekerja di dua level yang berbeda.
Episode ini membangun fondasi pandas — library Python untuk data tabular — plus NumPy dan Jupyter. Targetnya jelas: kalian bisa melakukan eksplorasi data (EDA) sederhana dari nol di akhir episode. Konsep di sini menjadi dasar untuk episode 7 (cleaning) sampai 9 (visualisasi).
DataFrame adalah struktur inti pandas: seperti tabel/spreadsheet — punya baris dan kolom bernama. Kalian bisa membuatnya dari file CSV, database, atau secara langsung:
import pandas as pd
df = pd.DataFrame({
"nama": ["Budi", "Sari", "Andi", "Dewi"],
"kota": ["Jakarta", "Bandung", "Jakarta", "Surabaya"],
"revenue":[150, 25, 12, 45],
})
df.head()df = pd.read_csv("orders.csv")
df.shape # (baris, kolom)
df.info() # ringkasan tipe data per kolom
df.describe() # ringkasan statistika numerikTiga perintah di atas (shape, info, describe) adalah pembuka EDA standar yang akan kalian pakai terus-menerus.
Note
Wajib bedakan dua dimensi data: baris adalah observasi (satu order, satu customer), kolom adalah variabel (amount, status, tanggal). Hampir semua error analisis berakar dari tertukarnya dua konsep ini.
Memilih kolom dan menyaring baris dengan kondisi:
import pandas as pd
df = pd.read_csv("orders.csv")
df["amount"] # satu kolom → Series
df[["product", "amount"]] # beberapa kolom → DataFrame
completed = df[df["status"] == "completed"] # filter baris
besar = df[(df["amount"] > 1000000) & (df["status"] == "completed")]Perhatikan dua hal: kondisi ganda memakai & (bukan and) dan setiap kondisi dibungkus tanda kurung. Kesalahan paling umum pemula pandas justru di sini.
Untuk menangani NaN dan memilih berdasarkan posisi:
df[df["amount"].notna()] # baris tanpa nilai hilang
df[df["city"].isin(["Jakarta", "Bandung"])]
df.iloc[0:5] # 5 baris pertama berdasarkan posisigroupby mengelompokkan baris lalu menerapkan agregasi — padanan persis GROUP BY SQL:
df.groupby("product")["amount"].sum().sort_values(ascending=False)df.groupby("product").agg(
total=("amount", "sum"),
jumlah=("amount", "count"),
rata_rata=("amount", "mean"),
)Contoh kedua menampilkan gaya modern pandas (agg dengan nama kolom hasil). Hasilnya DataFrame rapi yang siap divisualisasi — inilah bentuk "ringkasan" yang akan kalian bawa ke dashboard.
pandas dibangun di atas NumPy — pustaka array multidimensi dengan operasi matematika cepat. Kalian akan sering bertemu dengannya untuk kalkulasi element-wise:
import numpy as np
orders = np.array([150, 25, 12, 45])
print(orders * 1.1) # naik 10% semua elemen
print(orders.mean()) # rata-rata
print(np.percentile(orders, [25, 50, 75])) # kuartilAnda tidak perlu menguasai NumPy sedalam engineer — yang penting paham bahwa operasi vektor berjalan cepat dan pandas memakainya di bawah kap.
Jupyter memungkinkan kode berjalan per-sel, dengan hasil (termasuk grafik) langsung tampil di bawah kode. Alur kerja analis biasanya:
df.head(), df.info() — mengenal data.jupyter notebookTulis setiap langkah sebagai sel terpisah. Jupyter adalah tempat bekerja, bukan tempat berhasil — notebook pertama kalian boleh berantakan, asalkan alurnya bisa diikuti.
Gabungkan semua konsep dalam satu alur EDA pada dataset penjualan:
import pandas as pd
df = pd.read_csv("orders.csv")
# 1. Struktur dan tipe data
print(df.shape)
print(df.info())
# 2. Ringkasan numerik
print(df.describe())
# 3. Cek nilai hilang per kolom
print(df.isna().sum())
# 4. Cek duplikat
print("duplikat:", df.duplicated().sum())
# 5. Revenue per produk (top 5)
print(df.groupby("product")["amount"].sum().sort_values(ascending=False).head(5))
# 6. Status order
print(df["status"].value_counts())Tujuh langkah kecil ini sudah menghasilkan gambaran besar: ukuran data, kualitas data (nilai hilang & duplikat), pemain terbesar, dan kesehatan operasional. Inilah kerangka EDA yang akan kalian sempurnakan di episode 8.
and/or alih-alih &/| saat filtering — error klasik pandas.groupby tanpa memilih kolom — hasilnya agregasi semua kolom numerik, sering kali bukan yang diinginkan.inplace dan chaining. Pandas umumnya mengembalikan DataFrame baru; selalu simpan hasilnya ke variabel.info() dan isna(). Memulai analisis tanpa tahu tipe data dan nilai hilang = membangun di atas pasir.Inti yang harus dibawa pulang:
&/| dengan kondisi dalam kurung; iloc untuk posisi.groupby + agg adalah padanan SQL GROUP BY yang fleksibel.shape, info, describe, isna, duplicated, value_counts.Di episode 7 selanjutnya kita masuk ke topik yang memakan 60-80% waktu analis: Data Cleaning & Preparation — menangani missing values, duplikat, outlier, tipe data yang salah, dan normalisasi pada dataset yang kotor. Pisau bedah Python sudah di tangan; sekarang kita belajar membersihkan medan perangnya!