Python ile Veri Temizleme: Pratik İpuçları
Ham veri nadiren kullanıma hazır gelir. Python'un güçlü kütüphaneleriyle veri temizleme sürecinizi hızlandıracak pratik ipuçlarını keşfedin.
Veri analizi projelerinde zamanın büyük bir kısmı —kimi araştırmalara göre %80'e kadar— veriyi analiz etmekle değil, onu kullanılabilir hâle getirmekle geçer. Ham veri; eksik değerler, tutarsız biçimler, tekrarlayan satırlar ve aykırı noktalarla dolu olabilir. Python, bu kaotik tabloyu düzene sokmak için inanılmaz derecede zengin bir araç seti sunar. Gelin, günlük iş akışıma en çok giren pratik ipuçlarını paylaşayım.
1. Önce Veriye Genel Bakış Atın
Temizliğe başlamadan önce ne ile uğraştığınızı anlamanız şart. Pandas ile birkaç satırda temel bir tablo oluşturabilirsiniz:
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()) # Eksik değer sayıları
print(df.describe()) # Temel istatistikler
Bu dört komut, sonraki adımlarınız için bir yol haritası çıkarır. Hangi sütunlarda eksik veri yoğun, hangi tiplerde uyumsuzluk var — hepsi burada görünür.
2. Eksik Değerlerle Başa Çıkın
Eksik veriyi körü körüne silmek yerine, önce neden eksik olduğunu anlamaya çalışın. Sonrasında aşağıdaki stratejilerden birini seçin:
- Silme: Eksiklik oranı düşükse (
< %5) satırı veya sütunu düşürebilirsiniz.
df.dropna(subset=["kritik_sutun"], inplace=True)
- Doldurma (Imputation): Sayısal verilerde medyan, kategorik verilerde mod genellikle güvenli bir tercihtir.
df["fiyat"].fillna(df["fiyat"].median(), inplace=True)
df["kategori"].fillna(df["kategori"].mode()[0], inplace=True)
- İleri/Geri Doldurma: Zaman serisi verilerinde
ffillveyabfillhayat kurtarır.
df["sicaklik"].fillna(method="ffill", inplace=True)
3. Veri Tiplerini Düzeltin
CSV dosyaları her şeyi metin olarak okuyabilir. Tarihler object, sayılar string gelebilir. Bunları doğru tipe çevirmek hem belleği hem de işlem hızını ciddi ölçüde iyileştirir:
df["tarih"] = pd.to_datetime(df["tarih"], errors="coerce")
df["miktar"] = pd.to_numeric(df["miktar"], errors="coerce")
df["durum"] = df["durum"].astype("category")
errors="coerce" parametresi, dönüştürülemeyen değerleri NaN'a çevirir; bu sayede sessiz hatalar yerine görünür eksiklikler elde edersiniz.
4. Tekrarlayan Satırlardan Kurtulun
Veri birleştirme veya sistem hataları sonucu oluşan mükerrer kayıtlar analizinizi bozabilir:
print(df.duplicated().sum()) # Kaç tane var?
df.drop_duplicates(inplace=True)
Bazen tam satır değil, belirli bir anahtar sütun bazında tekrar kontrol etmek gerekir:
df.drop_duplicates(subset=["musteri_id", "siparis_no"], inplace=True)
5. Metin Verilerini Standartlaştırın
Kategorik sütunlardaki "istanbul", "İstanbul", " istanbul " gibi varyasyonlar gruplamayı mahveder. Basit bir temizlik rutini şöyle görünür:
df["sehir"] = (
df["sehir"]
.str.strip()
.str.lower()
.str.replace("i̇", "i") # Türkçe karakter hassasiyeti!
)
6. Aykırı Değerleri Tespit Edin
IQR (çeyrekler arası aralık) yöntemi, dağılımdan bağımsız ve sağlam bir yaklaşımdır:
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_temiz = df[(df["gelir"] >= alt_sinir) & (df["gelir"] <= ust_sinir)]
Aykırı değerleri silmeden önce mutlaka görselleştirin; bazen o "aykırı" noktalar aslında en değerli bilgiyi taşır.
Son Söz
Veri temizleme; tek seferlik bir görev değil, tekrar eden ve belgelenmeye değer bir süreçtir. Yaptığınız her adımı bir fonksiyona sarın, pipeline'ınıza ekleyin ve versiyonlayın. Temiz veri, sağlıklı modelin ve güvenilir kararın temelidir. Sorularınız veya farklı deneyimleriniz varsa yorumlarda buluşalım.