Data Handling & Preprocessing (Part 1): Fondasi, Collection, dan Data Cleaning

Bagian 1 dari 2: kenapa preprocessing penting, cara data dikumpulkan & disimpan, pengenalan Pandas, eksplorasi data, dan proses cleaning secara mendalam.
Sebelum model AI belajar apa pun, ia harus "makan" data dulu. Masalahnya, data mentah hampir selalu berantakan — ada yang kosong, ada yang duplikat, ada yang formatnya beda-beda. Bagian 1 catatan ini membahas fondasi data handling sampai tuntas proses cleaning-nya. Bagian 2 akan lanjut ke transformation, versioning, dan best practices.
Daftar Isi
1. Kenapa Data Preprocessing Itu Penting?
Model AI paling sophisticated sekalipun tidak akan menghasilkan prediksi akurat kalau dilatih dengan data yang buruk. Preprocessing bukan cuma langkah teknis — ini fondasi kesuksesan proyek AI.
Prinsip emas: Garbage In, Garbage Out (GIGO) — kalau datanya kotor, output AI-nya akan salah terus.
🤔 Coba Tebak Dulu: Menurutmu, dari total waktu sebuah proyek data science, berapa persen yang dihabiskan untuk preprocessing data dibanding membangun model?
Lihat Jawaban
80% waktu proyek dihabiskan untuk mempersiapkan & membersihkan data, hanya 20% untuk membangun & melatih model. Ini formula kesuksesan AI yang sering diremehkan pemula.
| Statistik | Makna |
|---|---|
| 80% | Dari total waktu proyek data science dihabiskan untuk preprocessing |
| 70% | Peningkatan akurasi yang bisa dicapai dengan data cleaning yang baik |
| 90% | Success rate proyek AI yang menerapkan preprocessing secara proper |
Catatan: angka-angka di atas (termasuk statistik "80% unstructured data" di bagian berikutnya) adalah figur yang umum dikutip di materi data science, bukan dari satu studi akademis tunggal yang bisa dirujuk langsung. Baca sebagai ilustrasi skala/urgensi, bukan statistik presisi.
Contoh Nyata: Ketika Data Jelek Merusak AI
Kasus 1 — Chatbot Gagal
Chatbot customer service dilatih dengan data percakapan penuh typo & bahasa tidak baku → bot tidak memahami pertanyaan pelanggan, jawaban jadi tidak relevan.
Kasus 2 — Prediksi Harga Salah
Model prediksi harga properti dilatih dengan data banyak nilai kosong & duplikat → rumah senilai Rp 500 juta diprediksi Rp 2 miliar.
Definisi Kunci
Data Preprocessing: proses menyiapkan data sebaik dan sebagus mungkin agar siap digunakan oleh AI.
Data Cleaning: bagian dari Data Preprocessing yang bertugas membersihkan data (missing values, duplikat, format tidak konsisten, tipe data salah, dll).
Alur Kerja Data Preprocessing
Data Mentah — dataset kotor dengan berbagai masalah dan inkonsistensi.
Pembersihan — hapus null, perbaiki format, handle outlier.
Transformasi — normalisasi, encoding, feature engineering.
Model Ready — data siap dipakai untuk training AI.
2. Data Collection & Storage
A. Data Collection
Data Collection adalah skema untuk mengumpulkan data untuk keperluan pembuatan AI. Ada dua jenis besar:
1. Unstructured Data
Karakteristik: manusia dapat memahami maksud data (contoh: mengenali jenis hewan) dan punya kemampuan reasoning terhadap data tersebut (contoh: memahami maksud sebuah paragraf).
Sumber data: boleh pakai generated data, tapi lebih baik pakai real-world data yang sesuai masalah — pastikan kondisi data sesuai kondisi di lapangan.
Contoh: teks, gambar, video.
Fakta: sekitar 80% data di dunia merupakan unstructured data.
2. Structured Data
Karakteristik: manusia awam tidak punya kemampuan reasoning terhadap maksud data; bersifat unik pada tiap kasus — kasus yang serupa bisa memakai data berbeda (contoh: optimasi inventory berbeda tergantung business objective).
Contoh: data tabular, CSV, kolom dan baris (row).
Catatan penting: jika sistem end-to-end belum tersedia, jangan langsung menggunakan AI.
Bangun Data Pipeline terlebih dahulu agar terbentuk alur data end-to-end (libatkan Data Engineer jika perlu).
AI sebaiknya digunakan sebagai tooling, bukan sebagai senjata utama.
B. Data Storage
| Jenis Data | Media Penyimpanan | Contoh |
|---|---|---|
| Unstructured Data | File Storage System — mendukung versioning, mudah diakses, aman | Amazon S3, Google Cloud Storage (GCS) |
| Structured Data | Database (SQL/NoSQL) — sebaiknya ada data terpisah khusus keperluan ML dengan prinsip sama: mudah disimpan, versioning, mudah diakses, aman | PostgreSQL, MariaDB |
| Object Storage | Media untuk data berbentuk objek, umumnya file besar; mendukung skalabilitas, versioning, keamanan yang baik | Gambar, video, dokumen, dataset ML |
3. Pandas: Tools Utama Data Handling
Pandas adalah salah satu library Python paling populer untuk manipulasi dan analisis data — ibarat Excel, tapi dengan kekuatan super dan fleksibilitas coding.
Cepat — memproses jutaan baris dalam hitungan detik.
Powerful — operasi kompleks dengan kode singkat.
Fleksibel — bisa menangani berbagai format data (CSV, Excel, JSON, dll).
Ekosistem Tools Data Lain
Dunia data umumnya hanya menggunakan Python dan SQL. Selain Pandas, ada beberapa library lain:
PySpark — dipakai jika data disimpan di Apache Spark.
Polars — ditulis ulang memakai Rust sehingga lebih cepat.
DuckDB — untuk online analytical processing (OLAP) database.
Catatan: kalau data masih berupa CSV, Pandas saja sudah cukup.
Format File yang Didukung Pandas
| Format | Fungsi Pandas | Catatan |
|---|---|---|
| CSV | pd.read_csv() |
Salah satu format paling umum & ringan untuk data tabular; TSV mirip, beda pada delimiter |
| Excel (XLSX/XLS) | pd.read_excel() |
File spreadsheet |
| JSON | pd.read_json() |
Format data web; untuk dataset unstructured yang butuh labeling |
| SQL Database | pd.read_sql() |
Query langsung dari database |
Load Dataset
pd adalah alias dari Pandas, sehingga penulisan kode lebih singkat. Pandas bisa membaca hampir semua format data yang umum dipakai dalam data science.
import pandas as pd
df = pd.read_csv('retail_data_raw.csv')
print(f"Jumlah baris: {len(df)}")
Tips praktis:
Selalu cek encoding jika ada karakter aneh.
Gunakan parameter
sepuntuk delimiter custom.Parameter
nrowsuntuk preview data besar.Perhatikan delimiter dan decimal separator.
Catatan: variabel
dfadalah singkatan dari "DataFrame", struktur data utama Pandas berbentuk tabel dengan baris & kolom.
Struktur Data: Series vs DataFrame
Series: array 1 dimensi dengan index. Contoh:
pd.Series([1, 2, 3, 4])DataFrame: tabel 2 dimensi dengan baris dan kolom — struktur yang paling sering dipakai.
4. Eksplorasi Data Sebelum Cleaning
Prinsip "Understand before fix": seorang AI engineer harus memahami "wajah" datanya — struktur kolom, jenis nilai, dan pola umum — sebelum mulai membersihkannya.
| Method | Fungsi |
|---|---|
df.head() / df.head(10) |
Preview baris pertama dataset (default 5 baris) |
df.tail() |
Preview baris terakhir; kadang ada pola berbeda di bagian akhir |
df.info() |
Jumlah baris & kolom, nama kolom, tipe data, jumlah non-null, memory usage |
df.describe() |
Statistik deskriptif kolom numerik: mean, median, min, max, standard deviation |
df.shape |
Ukuran dataset dalam format (rows, columns) |
df.columns |
Daftar seluruh nama kolom dalam dataset |
5. Data Cleaning (Deep Dive)
5.1 Masalah Umum dalam Dataset
| Masalah | Deskripsi | Contoh / Dampak |
|---|---|---|
| Missing Values (Null) | Data yang hilang atau tidak lengkap | Bisa bikin model error atau hasil prediksi jadi bias |
| Outliers | Nilai yang terlalu ekstrem / tidak masuk akal | Umur 250 tahun, gaji negatif |
| Duplikat | Baris yang sama muncul berkali-kali | Bisa membuat model overfitting ke data tertentu |
| Format Tidak Konsisten | Tanggal berbagai format, spasi berlebih, kapitalisasi acak | "Jakarta" vs "jakarta" vs "JAKARTA " |
| Tipe Data Salah | Angka tersimpan sebagai teks, atau kategori sebagai angka | Kolom harga bertipe object, tidak bisa dihitung |
5.2 Tipe Data & Konversi
Salah satu masalah klasik data cleaning adalah tipe data yang salah — misalnya angka tersimpan sebagai teks, atau tanggal tersimpan sebagai string. Tipe data penting ditransformasi tanpa mengubah makna aslinya (data numerik bersifat ratio/interval, beda penanganan dengan data kategorikal).
| Tipe Data | Keterangan |
|---|---|
int64 |
Bilangan bulat |
float64 |
Bilangan desimal |
object |
Teks / String |
datetime64 |
Tanggal dan waktu |
bool |
True / False |
Catatan: kalau kolom harga tersimpan sebagai
object(teks), kamu tidak bisa menghitung rata-rata atau menjumlahkannya — AI juga akan bingung.
# Konversi ke numerik
df['quantity'] = df['quantity'].astype(int)
df['price'] = pd.to_numeric(df['price'], errors='coerce')
# Konversi ke datetime
df['date'] = pd.to_datetime(df['date'], format='%d/%m/%Y')
# Konversi ke string
df['customer_id'] = df['customer_id'].astype(str)
Catatan: parameter
errors='coerce'akan mengubah nilai yang gagal dikonversi menjadiNaN, sehingga kode tidak error.
5.3 Membersihkan Data Teks (Tabular)
Operasi string umum untuk merapikan kolom bertipe teks:
df['nama'] = df['nama'].str.strip() # hapus whitespace
df['kota'] = df['kota'].str.lower() # lowercase semua
df['telp'] = df['telp'].str.replace('-', '') # replace karakter
df['nomor'] = df['text'].str.extract(r'(\d+)') # extract angka saja
Tips text cleaning:
Selalu standardisasi case (upper/lower).
Hapus whitespace di awal & akhir.
Hapus karakter spesial jika tidak perlu.
Cek typo dengan
value_counts().Konsisten dengan format ("Jakarta" vs "jakarta").
Catatan: ini adalah pembersihan teks pada kolom tabel (general string cleanup). Berbeda dengan persiapan teks untuk model NLP (text vectorization) di bawah ini, yang butuh langkah tambahan.
5.4 Data Cleaning Khusus NLP
Sebelum teks divektorisasi untuk model NLP, ada kata-kata yang dianggap kurang memberi informasi penting dan perlu dihilangkan:
Link atau URL
Tag (mention atau hashtag)
Stopwords, seperti: the, a, an, or, for, dan kata umum lainnya
Alasan: link/tag tidak relevan untuk pembelajaran model; stopwords sering muncul berulang, memperberat komputasi, dan tidak membedakan satu dokumen dengan lainnya.
5.5 Missing Values
Missing values adalah salah satu masalah paling umum dalam dataset real-world — bisa terjadi karena error input, sensor rusak, atau data memang tidak ada.
Kenapa berbahaya:
AI tidak bisa belajar dari data yang kosong.
Bisa menyebabkan error saat training model.
Mengurangi akurasi prediksi.
Deteksi:
df.isnull().sum()→ jumlah null per kolom.df.isnull().mean() * 100→ persentase missing values.
Strategi menangani missing values:
Hapus baris (
df.dropna()) — jika missing values sedikit (<5%) dan data masih banyak.Hapus kolom (
df.dropna(axis=1)) — jika satu kolom punya terlalu banyak missing values (>50%).Isi dengan nilai tertentu (
df.fillna(...)) — gunakan 0, mean, median, atau mode tergantung konteks; dipakai jika data hilang cukup banyak tapi kolomnya penting.Forward fill / backward fill — untuk data time series, isi dengan nilai sebelum/sesudahnya (
method='ffill').
# 1. Hapus baris dengan null
df_clean = df.dropna()
# 2. Hapus kolom dengan >50% null
threshold = len(df) * 0.5
df_clean = df.dropna(axis=1, thresh=threshold)
# 3. Isi dengan nilai tertentu / mean
df['age'].fillna(0, inplace=True)
df['price'].fillna(df['price'].mean(), inplace=True)
# 4. Forward fill (time series)
df.fillna(method='ffill', inplace=True)
Prinsip: "No blanks for brains" — AI butuh data lengkap untuk belajar dengan baik.
5.6 Data Duplikat
Data duplikat terjadi ketika satu observasi muncul lebih dari sekali dalam dataset — biasanya akibat error input atau merge dataset yang tidak hati-hati.
Bahaya duplikat: model AI bisa overfitting ke data tertentu, bias dalam prediksi, training lebih lama, dan metrics evaluasi jadi tidak akurat.
# Deteksi duplikat
df.duplicated().sum()
df[df.duplicated()]
# Hapus duplikat
df_clean = df.drop_duplicates()
df_clean = df.drop_duplicates(subset=['customer_id', 'date'])
df_clean = df.drop_duplicates(keep='first') # atau 'last'
Best practice: selalu simpan dataset asli terpisah dari dataset yang sudah dibersihkan (nama file berbeda) — jangan overwrite data original.
Prinsip: "One truth per row" — setiap baris harus merepresentasikan satu observasi unik (unique and clean).
5.7 Outlier
Definisi: data yang bersifat anomali / nilainya jauh berbeda dari sebagian besar data lain. Contoh: gaji karyawan umumnya 5–15 juta, tapi ada yang 500 juta — itu outlier.
Deteksi sederhana: Boxplot, scatter plot, IQR (Interquartile Range) method, Z-Score method, atau domain knowledge.
Kapan outlier dihapus: ketika kemungkinan kemunculannya sangat kecil, atau ketika keberadaannya tidak berdampak ke proses bisnis. Jika outlier mewakili kondisi bisnis nyata, jangan langsung dihapus — perlu di-treatment.
Teknik Advanced: Deteksi Outlier dengan Variational Autoencoder (VAE)
Apa itu Autoencoder?
Neural network yang dilatih dengan input dan output yang sama, sehingga belajar merekonstruksi data dan memahami distribusi data bersih (normal).
Cara kerja untuk deteksi outlier:
VAE membandingkan hasil rekonstruksi dengan input asli.
Makin besar perbedaannya (diukur dengan Mean Squared Error / MSE), makin besar kemungkinan data tersebut outlier.
Data di luar distribusi yang dipelajari → hasil rekonstruksi berbeda jauh → nilai MSE tinggi → indikator data outlier.
Metode lain: Z-Score, Interquartile Range (IQR), Isolation Forest.
Implementasi Praktis — Deteksi & Hapus Outlier dengan IQR:
Q1 = df['price'].quantile(0.25)
Q3 = df['price'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df_clean = df[(df['price'] >= lower_bound) & (df['price'] <= upper_bound)]
Catatan: IQR method adalah salah satu cara paling umum digunakan untuk deteksi outlier — tapi tetap perlu divalidasi dengan konteks bisnis (lihat poin "Kapan outlier dihapus" di atas). Angka 1.5 adalah konstanta standar, tapi bisa disesuaikan kebutuhan.
5.8 Data yang Membingungkan Model
Selain outlier numerik, ada kategori "data kotor" yang lebih halus: data yang secara aktif membingungkan proses belajar model.
Tujuan cleaning di sini: menghilangkan data yang jarang muncul dan tidak merepresentasikan kondisi sebenarnya.
Adversarial attack: data yang sengaja dimodifikasi agar model AI menghasilkan prediksi salah.
Catatan penting: menghapus sebagian kecil objek dalam sebuah gambar masih bisa diterima jika objek tersebut justru menurunkan kualitas data latih — tujuannya menjaga model belajar dari pola yang benar.
🤔 Coba Tebak Dulu: Kalau ada 1 objek kecil di pojok foto yang tidak relevan dan malah bikin model salah belajar, apakah boleh dihapus dari gambar training?
Lihat Jawaban
Boleh. Selama tujuannya menjaga model belajar dari pola yang benar dan objek tersebut memang menurunkan kualitas data latih, penghapusan sebagian kecil objek masih bisa diterima.
5.9 Rename Kolom
Kenapa penting: nama kolom sering tidak konsisten, spasi & karakter spesial bikin ribet, nama yang descriptive lebih mudah dipahami, dan menstandarkan naming convention.
Best practice: gunakan snake_case (huruf kecil, underscore untuk spasi), nama jelas dan singkat, hindari karakter spesial.
# Rename kolom tertentu
df.rename(columns={'Nama Lengkap': 'nama', 'Umur (tahun)': 'usia'}, inplace=True)
# Rename semua kolom sekaligus
df.columns = ['nama', 'usia', 'gaji']
# Lowercase & hilangkan spasi
df.columns = df.columns.str.lower()
df.columns = df.columns.str.replace(' ', '_')
6. Quiz Check — Part 1
Q1. Kenapa data tipe kategorikal seperti "warna rambut" sebaiknya di-encode pakai One-Hot Encoding, bukan diubah jadi angka urut biasa (0, 1, 2, ...)?
Jawaban: Karena "warna rambut" adalah data nominal — tidak punya urutan/tingkatan. Jika diubah jadi angka urut biasa, model bisa salah mengira ada hubungan tingkatan antar kategori (misalnya angka 2 dianggap "lebih besar" dari 1), padahal tidak ada makna urutan di sana. (Detail lengkap dibahas di Part 2.)
Q2. Kapan sebaiknya kamu menghapus SATU KOLOM penuh, bukan cuma baris yang ada missing value-nya?
Jawaban: Ketika kolom tersebut punya lebih dari 50% nilai missing. Kalau missing values-nya sedikit (di bawah 5%) dan datanya masih banyak, cukup hapus barisnya saja dengan df.dropna().
Q3. Outlier gaji karyawan sebesar Rp 500 juta ditemukan di dataset HR. Apakah otomatis harus dihapus?
Jawaban: Tidak otomatis. Perlu dicek dulu apakah nilai itu representasi kondisi bisnis nyata (misalnya memang gaji direktur) atau murni error input. Kalau mewakili kondisi bisnis nyata, jangan langsung dihapus — perlu di-treatment terlebih dahulu.
Q4. Apa bedanya "data cleaning teks pada kolom tabel" dengan "data cleaning teks untuk NLP"?
Jawaban: Cleaning teks pada kolom tabel fokus ke general string cleanup (strip whitespace, lowercase, replace karakter). Cleaning teks untuk NLP butuh langkah tambahan yang lebih spesifik: menghapus link/URL, tag (mention/hashtag), dan stopwords — karena elemen ini tidak informatif dan memperberat komputasi model bahasa.
Lanjut ke Part 2 — kita akan bahas Data Transformation lengkap (encoding, dimensionality reduction, normalisasi, text vectorization, image sebagai data numerik), cara menyimpan dataset bersih, Data Versioning & Management Strategies, Best Practices & Error Handling, sampai gambaran besar Data Pipeline Flow end-to-end.






