Data Transformation adalah proses mengubah data ke dalam bentuk yang lebih sesuai untuk analisis atau pemodelan. Tujuannya meliputi :
- Meningkatkan kualitas data.
- Memenuhi asumsi model statistik/machine learning.
- Membuat data lebih mudah diinterpretasi.
Kapan Data Transformation Dibutuhkan?
- Data tidak terdistribusi normal (misal : skewness tinggi).
- Ada outlier yang memengaruhi analisis.
- Skala feature sangat berbeda (misal : umur vs gaji).
Metode Utama :
- Normalisasi & Standardisasi
- Transformasi Logaritmik
- Encoding Kategorikal
- Binning (Kategorisasi Numerik)
Normalisasi vs Standardisasi
a. Normalisasi (Min-Max Scaling)
Mengubah data ke range [0, 1].
Rumus :
Xnorm=X−XminXmax−Xmin
Contoh :
import pandas as pd from sklearn.preprocessing import MinMaxScaler data = {'Harga_Rumah': [500, 800, 1000, 200, 1500]} df = pd.DataFrame(data) scaler = MinMaxScaler() df['Harga_Normalized'] = scaler.fit_transform(df[['Harga_Rumah']]) print(df)
Output :
Harga_Rumah Harga_Normalized 0 500 0.230769 1 800 0.461538 2 1000 0.615385 3 200 0.000000 4 1500 1.000000
Kapan Digunakan?
Ketika kita perlu batas fixed (misal : gambar pixel [0, 1]).
b. Standardisasi (Z-Score Scaling)
Mengubah data sehingga mean = 0 dan std dev = 1.
Rumus :
Xstd=X−μσ
Contoh :
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() df['Harga_Standardized'] = scaler.fit_transform(df[['Harga_Rumah']]) print(df[['Harga_Rumah', 'Harga_Standardized']])
Output :
Harga_Rumah Harga_Standardized 0 500 -0.461523 1 800 -0.092305 2 1000 0.184610 3 200 -1.199963 4 1500 1.569182
Kapan Digunakan?
Untuk algoritma yang asumsikan data terdistribusi normal (misal: SVM, Regresi Linier).
Transformasi Logaritmik
Digunakan untuk mengurangi skewness (data miring).
Contoh Data Skewed :
import numpy as np data = {'Pendapatan': [30, 45, 50, 200, 35, 60, 80, 500]} df = pd.DataFrame(data) df['Pendapatan_Log'] = np.log(df['Pendapatan']) print(df)
Output :
Pendapatan Pendapatan_Log 0 30 3.401197 1 45 3.806662 2 50 3.912023 3 200 5.298317 4 35 3.555348 5 60 4.094345 6 80 4.382027 7 500 6.214608
Visualisasi :
import matplotlib.pyplot as plt plt.figure(figsize=(10, 4)) plt.subplot(1, 2, 1) plt.hist(df['Pendapatan'], bins=30, color='blue', alpha=0.7) plt.title('Sebelum Transformasi') plt.subplot(1, 2, 2) plt.hist(df['Pendapatan_Log'], bins=30, color='red', alpha=0.7) plt.title('Setelah Transformasi Log') plt.show()
Kapan Digunakan?
Data dengan distribusi eksponensial (misal: pendapatan, harga rumah).
Encoding Data Kategorikal
a. Label Encoding
Mengubah kategori menjadi angka.
from sklearn.preprocessing import LabelEncoder data = {'Jurusan': ['TI', 'SI', 'DKV', 'TI', 'SI']} df = pd.DataFrame(data) le = LabelEncoder() df['Jurusan_Encoded'] = le.fit_transform(df['Jurusan']) print(df)
Output :
Jurusan Jurusan_Encoded 0 TI 2 1 SI 1 2 DKV 0 3 TI 2 4 SI 1
Masalah :
Bisa dianggap ada hierarki (padahal tidak).
b. One-Hot Encoding
Membuat kolom terpisah untuk tiap kategori.
df_encoded = pd.get_dummies(df, columns=['Jurusan']) print(df_encoded)
Output :
Jurusan_Encoded Jurusan_DKV Jurusan_SI Jurusan_TI 0 2 0 0 1 1 1 0 1 0 2 0 1 0 0 3 2 0 0 1 4 1 0 1 0
Kapan Digunakan?
Untuk model machine learning (misal: Random Forest).
Binning (Kategorisasi Numerik)
Mengelompokkan data numerik ke dalam kategori.
Contoh :
usia = [15, 22, 35, 42, 18, 60, 25, 30] bins = [0, 20, 40, 60] labels = ['Muda', 'Dewasa', 'Tua'] df_usia = pd.DataFrame({'Usia': usia}) df_usia['Kategori_Usia'] = pd.cut(df_usia['Usia'], bins=bins, labels=labels) print(df_usia)
Output :
Usia Kategori_Usia 0 15 Muda 1 22 Dewasa 2 35 Dewasa 3 42 Dewasa 4 18 Muda 5 60 Tua 6 25 Dewasa 7 30 Dewasa
Kapan Digunakan?
Untuk menyederhanakan analisis (misal: kelompok usia).
Transformasi Custom dengan Fungsi
Anda bisa membuat transformasi sendiri.
Contoh :
def custom_transform(x): return x ** 2 # Kuadratkan nilai df['Pendapatan_Kuadrat'] = df['Pendapatan'].apply(custom_transform) print(df[['Pendapatan', 'Pendapatan_Kuadrat']])
Kesimpulan
Metode | Kegunaan | Library Python |
---|---|---|
Normalisasi | Mengubah range ke [0, 1] | sklearn.preprocessing |
Standardisasi | Mean = 0, Std Dev = 1 | sklearn.preprocessing |
Log Transform | Kurangi skewness | numpy |
One-Hot Encoding | Ubah kategori ke kolom biner | pandas.get_dummies |
Binning | Kelompokkan numerik ke kategori | pandas.cut |
Best Practices :
- Selalu cek distribusi data sebelum transformasi.
- Simpan parameter transformasi (misal:
scaler
) untuk data baru.
Latihan :
- Coba standardisasi pada kolom
Harga_Rumah
dengan skewness tinggi. - Bandingkan hasil model sebelum/setelah transformasi log.