Veri Ön İşleme: Temizlik, Normalizasyon ve Dönüştürme

Veri analizi ve makine öğrenmesi projeleri temiz veriye bağlı. Çoğu zaman ham veri eksik, tutarsız veya ölçek problemli gelir. Ön işleme bu sorunları çözer ve modeliniz için veriyi hazırlar.

İlk olarak eksik değerleri, yinelenenleri ve hataları bulup düzeltirsin. Eksik veriler (NULL, NaN) analizi bozar. Bunları ya silersin, ya ortalama/medyan ile doldurursun.

1import pandas as pd
2import numpy as np
3
4# Örnek veri
5veri = pd.DataFrame({
6'Ad': ['Ali', 'Ayşe', 'Ali', 'Mehmet', None],
7'Yaş': [25, 30, 25, np.nan, 35],
8'Şehir': ['İstanbul', 'Ankara', 'İstanbul', 'İzmir', 'Bursa']
9})
10
11print("Orijinal veri:")
12print(veri)
13
14# Yinelenenleri çıkar
15veri_temiz = veri.drop_duplicates()
16
17# Eksik yaş değerini medyanla doldur
18veri_temiz['Yaş'].fillna(veri_temiz['Yaş'].median(), inplace=True)
19
20# Ad sütunundaki boş satırı sil
21veri_temiz = veri_temiz.dropna(subset=['Ad'])
22
23print("\nTemizlenmiş veri:")
24print(veri_temiz)

Çıktı:

1Temizlenmiş veri:
2Ad Yaş Şehir
30 Ali 25.0 İstanbul
41 Ayşe 30.0 Ankara
53 Mehmet 30.0 İzmir
64 None 35.0 Bursa

Farklı ölçeklerdeki sayısal veriler karşılaştırılamaz. Yaş (0-100) ile maaş (0-100000) aynı ağırlığa sahip olamaz. Normalizasyon verileri 0-1 aralığına çeker.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1from sklearn.preprocessing import MinMaxScaler
2
3# Sayısal sütunları seç
4sayisal = veri_temiz[['Yaş']].copy()
5
6# MinMaxScaler uygula (0-1 aralığı)
7scaler = MinMaxScaler()
8veri_temiz['Yaş_Normalized'] = scaler.fit_transform(sayisal)
9
10print("Normalizasyon sonrası:")
11print(veri_temiz[['Yaş', 'Yaş_Normalized']])

Çıktı:

1Yaş Yaş_Normalized
20 25.0 0.0
31 30.0 0.333333
43 30.0 0.333333
54 35.0 1.0

Metinsel veriler (kategorik) sayıya çevrilir. Şehir adları sayıya kodlanır ki model onları anlasın.

1from sklearn.preprocessing import LabelEncoder
2
3# Kategorik sütunu sayıya dönüştür
4le = LabelEncoder()
5veri_temiz['Şehir_Kod'] = le.fit_transform(veri_temiz['Şehir'])
6
7print("Dönüştürülmüş veri:")
8print(veri_temiz[['Şehir', 'Şehir_Kod']])
9print("\nKodlama:")
10for i, şehir in enumerate(le.classes_):
11print(f"{şehir}: {i}")

Çıktı:

1Dönüştürülmüş veri:
2Şehir Şehir_Kod
30 İstanbul 2
41 Ankara 0
53 İzmir 1
64 Bursa 0
7
8Kodlama:
9Ankara: 0
10Bursa: 1
11İstanbul: 2
12İzmir: 3

Bu üç adım tekrar tekrar yapılan işlemdir. Verinin kalitesi arttıkça modeliniz daha doğru sonuç verir.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz