Materi 7 ‐ Data Transformation - ThesionMS/Exploratory-Data-Analysis GitHub Wiki

Data transformation, atau transformasi data, merujuk pada proses mengubah data dari satu bentuk atau format ke bentuk atau format lainnya. Tujuannya adalah untuk mempersiapkan data agar sesuai dengan kebutuhan analisis lebih lanjut atau untuk membuat data lebih mudah dipahami dan diinterpretasikan. Transformasi data dapat melibatkan berbagai teknik, termasuk normalisasi, standarisasi, penggabungan variabel, dan lainnya.

Materi 6 Data Transformation

Beberapa tujuan umum dari transformasi data melibatkan:

  1. Normalisasi dan Standarisasi: Mengubah skala atau bentuk distribusi data agar lebih mudah dibandingkan dan diinterpretasikan. Contohnya adalah Z-Score Transformation atau Min-Max Normalization.

  2. Pengelompokan atau Pemisahan Variabel: Menggabungkan atau memisahkan variabel untuk menciptakan fitur baru yang lebih informatif atau relevan untuk analisis.

  3. Reduksi Dimensi: Mengurangi jumlah variabel atau dimensi data untuk mengurangi kompleksitas dan meningkatkan kinerja model atau analisis.

  4. Pembersihan Data: Mengatasi nilai yang hilang atau outlier untuk meningkatkan kualitas data.

  5. Penanganan Skewness atau Transformasi Distribusi: Mengubah distribusi data agar lebih mendekati distribusi normal, seperti yang dilakukan oleh Box-Cox Transformation.

  6. Penanganan Kategori atau Label: Mengubah variabel kategori menjadi bentuk yang dapat diolah oleh model atau analisis tertentu.

Transformasi data adalah bagian integral dari pra-pemrosesan data dalam analisis data dan ilmu data secara umum. Dengan menerapkan transformasi data yang tepat, kita dapat meningkatkan kualitas data, meningkatkan interpretabilitas, dan meningkatkan performa model atau analisis data yang dilakukan.

1. Uji Normalitas untuk Kenormalan Data

Uji normalitas adalah teknik statistik yang digunakan untuk menentukan sejauh mana data mengikuti distribusi normal atau Gaussian. Dalam konteks pengolahan data, uji normalitas sering digunakan untuk memastikan bahwa data memenuhi asumsi distribusi normal sebelum menerapkan teknik analisis atau model tertentu yang memerlukan asumsi tersebut.

Implementasi dengan Python (Menggunakan Tes Shapiro-Wilk):

from scipy.stats import shapiro

def normality_test(data):
    # Melakukan uji normalitas menggunakan tes Shapiro-Wilk
    stat, p_value = shapiro(data)
    
    # Menampilkan hasil uji
    print(f'Statistic = {stat:.3f}, p-value = {p_value:.3f}')
    
    # Menentukan apakah data mengikuti distribusi normal
    if p_value > 0.05:
        print('Data mungkin mengikuti distribusi normal.')
    else:
        print('Data tidak mengikuti distribusi normal.')

# Contoh penggunaan
data_example = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
normality_test(data_example)

Penjelasan:

  1. Import Library:

    • from scipy.stats import shapiro: Menggunakan fungsi shapiro dari library SciPy untuk uji normalitas dengan metode Shapiro-Wilk.
  2. Melakukan Uji Normalitas:

    • shapiro(data): Memanggil fungsi shapiro dengan data sebagai argumen.
  3. Menampilkan Hasil Uji:

    • Menampilkan nilai statistik uji (stat) dan nilai p-value.
  4. Interpretasi Hasil:

    • Jika nilai p-value lebih besar dari 0.05, kita menerima hipotesis nol dan menyatakan bahwa data mungkin mengikuti distribusi normal. Sebaliknya, jika nilai p-value lebih kecil atau sama dengan 0.05, kita menolak hipotesis nol dan menyatakan bahwa data tidak mengikuti distribusi normal.

2. Z-Score Transformation

Z-Score Transformation adalah teknik statistik yang digunakan untuk menstandarisasi data dengan mengubah setiap nilai dalam dataset sehingga memiliki rata-rata 0 dan standar deviasi 1. Ini dilakukan dengan mengurangkan nilai setiap observasi dari rata-rata seluruh dataset dan kemudian membaginya dengan standar deviasi. Hasilnya adalah distribusi data yang terpusat di sekitar nol, dengan sebaran yang diukur dalam satuan standar deviasi.

Implementasi Code:

import numpy as np
from scipy.stats import zscore

# Contoh data
data = np.array([2, 4, 6, 8, 10, 12])

# Melakukan Z-Score Transformation
data_zscore = zscore(data)

# Menampilkan hasil transformasi
print("Original Data:", data)
print("Z-Score Transformed Data:", data_zscore)

Penjelasan Code:

  1. Import Library:

    • numpy digunakan untuk manipulasi array dan data numerik.
    • zscore dari scipy.stats digunakan untuk menghitung Z-Score.
  2. Contoh Data:

    • Membuat array data sebagai contoh data.
  3. Z-Score Transformation:

    • Memanggil fungsi zscore untuk melakukan Z-Score Transformation pada data.
  4. Menampilkan Hasil:

    • Menampilkan data asli dan hasil transformasi Z-Score.

Keuntungan Z-Score Transformation:

  • Memungkinkan perbandingan antar variabel dengan skala yang berbeda.
  • Mengidentifikasi outlier karena nilai yang berada jauh dari 0 mungkin dianggap sebagai outlier.

Z-Score Transformation berguna ketika kita ingin membandingkan atau menggabungkan data yang memiliki skala atau unit yang berbeda. Ini memudahkan interpretasi dan analisis data dengan menghilangkan perbedaan skala yang tidak relevan.

3. Min-Max Normalization

Min-Max Normalization, juga dikenal sebagai Feature Scaling, adalah teknik yang digunakan untuk merubah skala nilai dalam suatu fitur sehingga berada dalam rentang yang telah ditentukan, biasanya antara 0 dan 1. Tujuannya adalah untuk menghilangkan perbedaan skala antar variabel, memastikan bahwa setiap variabel memberikan kontribusi seimbang terhadap analisis atau pemodelan yang dilakukan, terutama jika metode atau algoritma yang digunakan sensitif terhadap skala variabel.

Berikut adalah contoh implementasi Min-Max Normalization menggunakan Python dengan sedikit penjelasan:

from sklearn.preprocessing import MinMaxScaler

# Contoh data
data = [-1, 2], [-0.5, 6], [0, 10], [1, 18](/ThesionMS/Exploratory-Data-Analysis/wiki/-1,-2],-[-0.5,-6],-[0,-10],-[1,-18)

# Membuat objek scaler
scaler = MinMaxScaler()

# Melakukan Min-Max Normalization
data_normalized = scaler.fit_transform(data)

# Menampilkan data yang sudah dinormalisasi
print("Data Asli:")
print(data)
print("\nData Setelah Min-Max Normalization:")
print(data_normalized)

Penjelasan:

  1. MinMaxScaler() adalah objek scaler yang akan digunakan untuk melakukan normalisasi.
  2. fit_transform(data) menghitung nilai minimum dan maksimum dari data dan kemudian mengaplikasikan transformasi Min-Max Normalization.
  3. Hasilnya, data_normalized, adalah data yang sudah dinormalisasi dan dicetak untuk dilihat hasilnya.

Dengan menggunakan Min-Max Normalization, kita dapat memastikan bahwa data memiliki rentang yang seragam, membuatnya lebih mudah untuk dibandingkan dan digunakan dalam berbagai analisis atau pemodelan.

4. Box-Cox Transformation

Box-Cox Transformation:

Box-Cox Transformation adalah metode statistik yang digunakan untuk mengubah distribusi data menjadi lebih mendekati distribusi normal. Metode ini mengandalkan parameter λ (lambda) yang dapat memvariasikan transformasi yang diterapkan pada data. Box-Cox Transformation didefinisikan oleh persamaan:

Implementasi Code:

# Box-cox Transformation of non-normal data

# import modules
import numpy as np
from scipy import stats

# plotting modules
import seaborn as sns
import matplotlib.pyplot as plt

# generate non-normal data (exponential)
original_data = np.random.exponential(size = 1000)

# transform training data & save lambda value
fitted_data, fitted_lambda = stats.boxcox(original_data)

# creating axes to draw plots
fig, ax = plt.subplots(1, 2)

# plotting the original data(non-normal) and 
# fitted data (normal)
sns.distplot(original_data, hist = False, kde = True,
			kde_kws = {'shade': True, 'linewidth': 2}, 
			label = "Non-Normal", color ="green", ax = ax[0])

sns.distplot(fitted_data, hist = False, kde = True,
			kde_kws = {'shade': True, 'linewidth': 2}, 
			label = "Normal", color ="green", ax = ax[1])

# adding legends to the subplots
plt.legend(loc = "upper right")

# rescaling the subplots
fig.set_figheight(5)
fig.set_figwidth(10)

print(f"Lambda value used for Transformation: {fitted_lambda}")

Penjelasan:

  1. Menggunakan fungsi boxcox dari library scipy.stats untuk melakukan Box-Cox Transformation.
  2. Fungsi ini secara otomatis menghitung parameter λ yang dioptimalkan.
  3. Menampilkan hasil transformasi data dan parameter λ.
  4. Menampilkan histogram data asli dan histogram data setelah transformasi untuk membandingkan distribusi.

Melalui Box-Cox Transformation, kita dapat meningkatkan normalitas data, seperti yang tercermin dalam perbandingan histogram sebelum dan sesudah transformasi. Transformasi ini berguna terutama ketika data awalnya tidak terdistribusi normal, dan kita ingin memenuhi asumsi normalitas untuk metode statistik tertentu.