Data Cleanup : Data Transformation

Data Cleanup : Data Transformation

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 :

  1. Normalisasi & Standardisasi
  2. Transformasi Logaritmik
  3. Encoding Kategorikal
  4. Binning (Kategorisasi Numerik)

Normalisasi vs Standardisasi

a. Normalisasi (Min-Max Scaling)

Mengubah data ke range [0, 1].
Rumus :

Xnorm=X−XminXmax−Xmin

Contoh :

python
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 :

python
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 :

python
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 :

python
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.

python
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.

python
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 :

python
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 :

python
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 :

  1. Coba standardisasi pada kolom Harga_Rumah dengan skewness tinggi.
  2. Bandingkan hasil model sebelum/setelah transformasi log.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *