Python ile Veri Temizleme: Pratik İpuçları
Gerçek dünya verisi her zaman dağınık gelir. Python ile veri temizleme sürecini hızlandıracak pratik ipuçlarını bu yazıda bir araya topladım.
Veri bilimi projelerinde zamanın büyük bölümü — kimi araştırmalara göre %80'i — veriyi analize hazır hale getirmekle geçer. Model kurmak, güzel grafikler çizmek kadar "çekici" olmasa da veri temizleme, projenin temel taşıdır. Yanlış ya da eksik verilerle kurduğunuz en şık model bile sizi yanıltır. Bu yazıda Python'da sıkça kullandığım pratik ipuçlarını paylaşıyorum.
1. Önce Veriyi Tanıyın
Temizliğe başlamadan önce veriyi genel hatlarıyla görmek şart. Birkaç satır kod bu işi halleder:
import pandas as pd
df = pd.read_csv("veri.csv")
print(df.shape) # Satır ve sütun sayısı
print(df.dtypes) # Veri tipleri
print(df.isnull().sum()) # Sütun bazlı eksik değer sayısı
df.describe() # Temel istatistikler
Bu dört çıktı, nerede durduğunuzu net biçimde gösterir. Sütunların veri tipi yanlışsa (örneğin tarih sütunu object olarak geliyorsa) temizlik yapmadan önce tip dönüşümlerini yapın.
2. Eksik Değerlerle Başa Çıkmak
Eksik değerleri silmek her zaman en doğru yol değildir. Şu yaklaşımları duruma göre değerlendirin:
- Silme: Satırın %30'undan fazlası boşsa gönül rahatlığıyla silin.
- Medyan/Mod ile doldurma: Sayısal sütunlarda medyan, kategorik sütunlarda mod güvenli bir başlangıç noktasıdır.
- İleri/geri doldurma (ffill/bfill): Zaman serisi verilerinde oldukça işe yarar.
# Sayısal sütunu medyanla doldur
df["fiyat"].fillna(df["fiyat"].median(), inplace=True)
# Zaman serisi için ileri doldurma
df["sıcaklık"].fillna(method="ffill", inplace=True)
3. Yinelenen Satırları Temizlemek
Birden fazla kaynaktan gelen veriler sıklıkla tekrar eden kayıtlar içerir. Pandas bunu tek satırda çözer:
df.drop_duplicates(inplace=True)
Bazı durumlarda yalnızca belirli sütunlara göre tekilleştirme yapmak gerekebilir:
df.drop_duplicates(subset=["müşteri_id", "sipariş_tarihi"], inplace=True)
4. Aykırı Değerleri (Outlier) Yakalamak
Aykırı değerler hem istatistiksel analizleri hem de makine öğrenmesi modellerini olumsuz etkiler. IQR yöntemi hızlı ve güvenilirdir:
Q1 = df["gelir"].quantile(0.25)
Q3 = df["gelir"].quantile(0.75)
IQR = Q3 - Q1
alt_sinir = Q1 - 1.5 * IQR
ust_sinir = Q3 + 1.5 * IQR
df = df[(df["gelir"] >= alt_sinir) & (df["gelir"] <= ust_sinir)]
Aykırı değerleri silmeden önce iş kurallarına danışın; bazen o değerler hata değil, gerçek bir anomalidir.
5. Metin Verilerini Standartlaştırmak
Metin sütunlarında küçük büyük harf farkları, baştaki/sondaki boşluklar ve tutarsız yazımlar veri kalitesini ciddi biçimde düşürür:
df["şehir"] = df["şehir"].str.strip().str.lower()
df["şehir"] = df["şehir"].str.replace("i̇stanbul", "istanbul") # Karakter sorunu düzeltme
Düzenli ifadeler (regex) daha karmaşık temizlikler için güçlü bir seçenektir:
import re
df["telefon"] = df["telefon"].str.replace(r"\D", "", regex=True) # Yalnızca rakam bırak
6. Veri Tiplerini Doğru Atamak
Tip dönüşümleri bellek kullanımını ve işlem süresini doğrudan etkiler:
df["tarih"] = pd.to_datetime(df["tarih"], format="%Y-%m-%d")
df["kategori"] = df["kategori"].astype("category") # Bellek tasarrufu
---
Sonuç
Veri temizleme, "bir kere yap bitir" türünden bir iş değildir; veri geliştikçe pipeline'ınızın da gelişmesi gerekir. Yukarıdaki adımları işlevlere (function) dönüştürüp tekrar kullanılabilir bir temizleme modülü oluşturmak, uzun vadede hem zaman hem de hata payı açısından büyük fark yaratır. Temiz veri, iyi modelin yarısıdır.