Pandas Kütüphanesi ile Veri Temizleme (Data Cleaning) Rehberi

müfettiş

Moderatör
Katılım
20 Ocak 2024
Mesajlar
325
Tepkime puanı
1
Puanları
18
Veri bilimi ve makine öğrenmesi projelerinde harcanan vaktin yaklaşık %80'i veri temizleme ve ön işleme süreçlerine gider. Kirli veriyle kurulan en sofistike modeller bile "Çöp içeri, çöp dışarı" (Garbage In, Garbage Out) prensibi gereği başarısız olmaya mahkumdur.


1. Veriyi Tanıma ve İlk Bakış (Exploratory Data Analysis - EDA)​

Veri temizlemeye başlamadan önce elinizdeki "malzemeyi" tanımanız gerekir. Pandas, veri setinin genel yapısını anlamak için birkaç kritik fonksiyon sunar.

  • df.head() ve df.tail(): Verinin ilk ve son satırlarına bakarak genel yapıyı, sütun isimlerini ve olası bariz hataları görmenizi sağlar.
  • df.info(): Hangi sütunda kaç tane boş değer (null) olduğunu ve her sütunun veri tipini (int, float, object vb.) gösterir. Bellek kullanımını takip etmek için de kritiktir.
  • df.describe(): Sayısal sütunların istatistiksel özetini (ortalama, standart sapma, min, max, çeyreklikler) verir. Burada, örneğin bir "Yaş" sütununda minimum değerin -5 olması gibi mantıksal hataları yakalayabilirsiniz.
  • df.shape: Veri setinin kaç satır ve sütundan oluştuğunu söyler.

2. Eksik Verilerle Mücadele (Handling Missing Values)​

Eksik veriler (NaN - Not a Number), analizlerin sapmasına veya modellerin hata vermesine neden olur. Bu sorunu çözmek için üç temel stratejimiz vardır:

A. Eksik Verileri Tespit Etme​

df.isnull().sum() komutu, her sütundaki toplam eksik değer sayısını verir. Bu, hangi sütunların "sorunlu" olduğunu anlamanın en hızlı yoludur.

B. Eksik Verileri Silme (Dropping)​

Eğer bir satırın veya sütunun büyük çoğunluğu boşsa, o veriyi tutmak gürültü yaratabilir.

  • df.dropna(): İçinde en az bir NaN olan tüm satırları siler.
  • df.dropna(axis=1): Eksik değer içeren sütunları tamamen kaldırır.
  • thresh parametresi: Belirli bir sayıdan fazla dolu değeri olan satırları tutmanızı sağlar.

C. Eksik Verileri Doldurma (Imputation)​

Veriyi silmek, veri kaybına yol açar. Bunun yerine mantıklı değerlerle doldurmak (impute etmek) daha yaygındır:

  • İstatistiksel Doldurma: Sayısal verilerde mean() (ortalama) veya median() (medyan) kullanılır.
  • Kategorik Doldurma: En sık tekrar eden değer olan mode() ile doldurma yapılır.
  • df.fillna(method='ffill'): Bir önceki geçerli değeri kullanarak doldurma yapar (zaman serileri için idealdir).

3. Yanlış Veri Tiplerini Düzeltme​

Pandas bazen sayısal olması gereken verileri (örneğin fiyatlar veya tarihler) "object" (string) olarak okuyabilir. Bu durum, matematiksel işlemler yapmanızı engeller.

  • Sayısal Dönüşüm: pd.to_numeric(df['fiyat'], errors='coerce') komutu, sayıya dönüşemeyen hatalı değerleri NaN yaparak işlemi güvenli hale getirir.
  • Tarih Dönüşümü: Tarih verileriyle çalışırken pd.to_datetime() fonksiyonu hayati önem taşır. Bu sayede veriyi gün, ay, yıl veya haftanın günü bazında kolayca filtreleyebilirsiniz.
  • Kategorik Veriler: Çok fazla tekrar eden metin verilerini (örneğin "Şehir" isimleri) astype('category') ile dönüştürmek, bellek kullanımını ciddi oranda azaltır.

4. Yinelenen Verilerin (Duplicates) Temizlenmesi​

Aynı kaydın birden fazla kez veri setinde yer alması, istatistiksel sonuçları (ortalama gibi) bozar.

  • df.duplicated().sum(): Kaç tane mükerrer satır olduğunu sayar.
  • df.drop_duplicates(): Yinelenen satırları kaldırır. subset parametresi ile sadece belirli sütunlara göre (örneğin kullanıcı ID'si) tekilleştirme yapabilirsiniz.

5. Aykırı Değerlerin (Outliers) Tespiti ve Yönetimi​

Aykırı değerler, veri setinin geri kalanından önemli ölçüde farklı olan gözlemlerdir. Bir kişinin maaşının 1 milyon TL girilmesi ama geri kalan herkesin 30-50 bin TL bandında olması gibi.

pandas.jpeg


Aykırı değerleri yönetmek için şu yöntemler kullanılır:

  1. Z-Skoru: Verinin ortalamadan kaç standart sapma uzaklıkta olduğunu ölçer. Genelde 3 standart sapmadan uzak veriler aykırı kabul edilir.
  2. Interquartile Range (IQR): $Q3 - Q1$ formülü ile hesaplanır. $1.5 \times IQR$ sınırlarının dışındaki değerler temizlenir.
  3. Baskılama (Winsorization): Aykırı değerleri silmek yerine, onları belirlenen üst veya alt sınır değerine eşitleme yöntemidir.

6. Metin Verilerini Temizleme ve Düzenleme​

Metin (string) verileri genellikle düzensizdir; büyük/küçük harf karışıklığı, gereksiz boşluklar veya özel karakterler içerebilir.

  • Boşlukları Temizleme: df['isim'].str.strip() ile metnin başındaki ve sonundaki boşluklar atılır.
  • Harf Standardizasyonu: str.lower() veya str.upper() ile tüm metin tek bir formata getirilir.
  • Değer Değiştirme: df['sehir'].replace('Ist', 'İstanbul') komutuyla yanlış veya kısaltılmış yazımlar düzeltilir.
  • Parçalama (Splitting): "Ad Soyad" sütununu str.split(' ', expand=True) ile iki ayrı sütuna bölebilirsiniz.

7. Veri Formatlama ve Standardizasyon​

Farklı kaynaklardan gelen veriler farklı birimlerde olabilir. Örneğin bir sütun "Litre" cinsindenken diğeri "Mililitre" olabilir.

  • Birim Dönüşümü: Tüm sütunu belirli bir katsayı ile çarparak birimleri eşitleyin.
  • Sütun İsimlerini Düzenleme: Analiz kolaylığı için sütun isimlerindeki boşlukları alt tire (_) ile değiştirmek ve Türkçe karakterlerden kaçınmak (örn: dogum_tarihi) iyi bir pratiktir:

    df.columns = [col.lower().replace(' ', '_') for col in df.columns]

8. Veriyi Yeniden Şekillendirme (Reshaping)​

Bazen verinin yapısı analize uygun değildir. Geniş (wide) bir tabloyu uzun (long) hale getirmek veya tam tersini yapmak gerekebilir.

  • df.pivot_table(): Veriyi özetlemek ve Excel benzeri pivot tablolar oluşturmak için kullanılır.
  • df.melt(): Sütunları satır haline getirerek veriyi "derli toplu" (tidy data) formatına sokar.
  • df.groupby(): Belirli kategorilere göre veriyi gruplayıp (örn: şehirlere göre satış toplamı) analiz etmeyi sağlar.

9. Veri Temizleme İş Akışı (Best Practices)​

Başarılı bir veri temizleme süreci şu adımları izlemelidir:

  1. Ham Veriyi Koruyun: Asla orijinal dosyanın üzerinde işlem yapmayın. Önce df.copy() ile bir kopya oluşturun.
  2. Küçük Başlayın: Önce en büyük sorunları (boş değerler, yanlış tipler) çözün.
  3. Görselleştirin: Matplotlib veya Seaborn kullanarak verinin dağılımını görün; grafikler hataları gözle görmenizi sağlar.
  4. Dokümantasyon: Hangi veriyi neden sildiğinizi veya nasıl doldurduğunuzu kodun içine yorum satırı olarak ekleyin.

Sonuç​

Pandas ile veri temizleme, sadece teknik bir işlem değil, aynı zamanda verinin hikayesini anlama sürecidir. Temiz bir veri seti, daha doğru tahminler, daha net görseller ve daha güvenilir iş kararları demektir. Bu rehberdeki teknikleri uygulayarak, karmaşık ve kirli veri setlerini profesyonel birer veri varlığına dönüştürebilirsiniz.
 
Geri
Üst