Gereksinimler ve Ön Hazırlık
Çalışmaya başlamadan önce sisteminizde Python 3.10 veya daha güncel bir sürümün yüklü olması önerilir. Veri işleme süreçlerinde performans ve kararlılık için Pandas kütüphanesinin güncel sürümünü (2.0+) kullanmalısınız. Ortamınızı hazırlamak için aşağıdaki komutları terminalinizde çalıştırabilirsiniz.
# Gerekli kütüphaneleri yükleme
pip install pandas numpy
Kurulumu doğruladıktan sonra, veri setlerimizi okumak ve manipüle etmek için Pandas'ı projenize dahil edebilirsiniz. Projenizde pandas kütüphanesini pd takma adıyla kullanmak, kodunuzun okunabilirliğini artıracaktır.
Veri Setini Yükleme ve Genel Bakış
Veri temizleme sürecinin ilk adımı, verinin yapısını anlamaktır. Veri setindeki sütun isimlerini, veri tiplerini ve eksik değerlerin yoğunluğunu kontrol etmek, temizleme stratejinizi belirlemenizi sağlar.
import pandas as pd
# Örnek veri setini yükleme
df = pd.read_csv('veri_seti.csv')
# İlk 5 satırı ve genel bilgileri görüntüleme
print(df.head())
print(df.info())
df.info() metodu, sütunların veri tiplerini ve bellek kullanımını gösterir. Burada "object" tipi olarak görünen ancak aslında sayısal olması gereken sütunları tespit etmek, temizlik aşaması için kritik bir öneme sahiptir.
Eksik Verilerle (Missing Values) Çalışma
Veri setlerinde boş bırakılan hücreler (NaN - Not a Number), analiz sonuçlarınızı doğrudan saptırır. Eksik verileri silmek veya anlamlı bir değerle (ortalama, medyan, mod) doldurmak, temizleme işleminin en yaygın aşamasıdır.
# Eksik değerleri kontrol etme
print(df.isnull().sum())
# Eksik değerleri sütun ortalaması ile doldurma
df['yas'] = df['yas'].fillna(df['yas'].mean())
# Eksik değeri olan satırları tamamen silme
df_temiz = df.dropna(subset=['kullanici_id'])
Eksik verileri doldururken verinin dağılımını bozmamaya dikkat etmelisiniz. Eğer bir sütunda çok fazla eksik veri varsa, o sütunu tamamen bırakmak (drop) daha sağlıklı bir karar olabilir.
Yinelenen (Duplicate) Kayıtların Temizlenmesi
Veri giriş hataları veya sistem birleştirme işlemleri sonucunda aynı satırın birden fazla kez kaydedilmesi yaygın bir sorundur. Pandas'ın duplicated() fonksiyonu bu kayıtları tespit etmenize, drop_duplicates() ise bunları temizlemenize olanak tanır.
# Yinelenen satırları kontrol etme
print(df.duplicated().sum())
# Yinelenen satırları silme
df = df.drop_duplicates()
Bu işlem, özellikle müşteri veri tabanları veya log kayıtları gibi tekil olması gereken veri setlerinde veri kalitesini artırmak için zorunludur.
Veri Tipi Dönüşümleri ve Format Düzeltme
Bazen tarihler "string" (metin) olarak, sayılar ise "object" olarak tanımlanmış olabilir. Bu durum, matematiksel işlemler yapmanızı engeller. astype() veya to_datetime() fonksiyonları ile bu hataları düzeltebilirsiniz.
# Tarih formatını düzeltme
df['kayit_tarihi'] = pd.to_datetime(df['kayit_tarihi'])
# Sayısal sütunu float tipine çevirme
df['fiyat'] = df['fiyat'].astype(float)
Veri tiplerinin doğruluğu, özellikle büyük veri setlerinde bellek yönetimi ve hesaplama hızı açısından da büyük avantaj sağlar.
Sütun İsimlerini ve Kategorik Verileri Standartlaştırma
Veri setindeki sütun isimlerinde boşluklar veya Türkçe karakterler olması, kod yazarken hata almanıza neden olabilir. Ayrıca kategorik verilerdeki (örneğin "Evet", "evet", "EVET") yazım farklılıklarını gidermek, analizlerinizi tutarlı kılar.
# Sütun isimlerini düzenleme
df.columns = df.columns.str.lower().str.replace(' ', '_')
# Kategorik verileri standartlaştırma
df['durum'] = df['durum'].str.strip().str.lower()
Bu işlemler, veri setinizin "temiz" ve "analize hazır" hale gelmesindeki son dokunuşlardır.
Veri Temizleme Yöntemleri Karşılaştırma Tablosu
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
fillna() |
Veri kaybını önler | Yanlış değer ataması riski |
dropna() |
Kesin ve güvenilir sonuç | Veri kaybına yol açar |
drop_duplicates() |
Tekrarları engeller | Bazen verinin kendisi aynı olabilir |
astype() |
Hesaplama hızını artırır | Hatalı dönüşümde veri kaybı |
Güvenlik Uyarısı: Veri temizleme işlemlerini asla orijinal dosyanız üzerinde doğrudan uygulamayın. Daima verinin bir kopyası (
df_copy = df.copy()) üzerinden çalışın. Ayrıca, dış kaynaklardan gelen verilerde XSS veya SQL injection riskine karşı verileri temizlerken her zaman filtreleme (sanitization) uygulayın.
Sıkça Sorulan Sorular
Pandas'ta veriyi temizlerken orijinal veriyi nasıl korurum?
Orijinal veri setini korumak için her zaman df.copy() metodunu kullanarak veriyi yeni bir değişkene atayın. Böylece bir hata durumunda orijinal dosyayı tekrar okumak zorunda kalmazsınız.
Eksik değerleri doldurmak mı yoksa silmek mi daha iyidir?
Bu, eksik verinin oranına bağlıdır. Eğer verinin %5'inden azı eksikse silmek genellikle kabul edilebilir. Ancak %30'dan fazla eksiklik varsa, veriyi doldurmak veya o sütunu analiz dışı bırakmak daha doğrudur.
Tarih formatı hatalarını nasıl çözerim?
pd.to_datetime() fonksiyonu, Pandas'ın en güçlü araçlarından biridir. 'errors=coerce' parametresini kullanarak hatalı tarihleri 'NaT' (Not a Time) değerine dönüştürebilir ve ardından bunları temizleyebilirsiniz.
Kategorik verilerdeki yazım hatalarını nasıl topluca düzeltirim?
str.lower() ve str.strip() metodlarını zincirleme kullanarak tüm metinsel ifadeleri küçük harfe çevirebilir ve baş/son boşluklardan kurtulabilirsiniz.
Büyük veri setlerinde temizlik yaparken nelere dikkat etmeliyim?
Bellek kullanımı için category veri tipini kullanabilir ve gereksiz sütunları usecols parametresiyle veri setini okurken yüklemeyebilirsiniz.
Pandas ile Veri Temizleme Süreçlerinde Performans Optimizasyonu
Veri setleriniz büyüdükçe, standart Pandas fonksiyonları bellek üzerinde ciddi bir yük oluşturabilir. Özellikle milyonlarca satırlık verilerle çalışırken, temizleme işlemlerini optimize etmek hem zaman kazandırır hem de sistemin çökmesini engeller. Bellek kullanımını düşürmek için ilk adım, veri tiplerini "downcasting" yöntemiyle küçültmektir.
Bellek Verimliliği İçin Veri Tipi Optimizasyonu
Pandas, varsayılan olarak sayısal verileri 64-bit olarak tanımlar. Ancak çoğu zaman 16 veya 32-bit yeterli olacaktır. pd.to_numeric fonksiyonunu downcast parametresi ile kullanarak bellek kullanımını yarı yarıya düşürebilirsiniz.
import pandas as pd
import numpy as np
# Büyük bir veri seti yüklendiğini varsayalım
df = pd.read_csv("buyuk_veri.csv")
# Sayısal sütunları optimize etme
df['yas'] = pd.to_numeric(df['yas'], downcast='integer')
df['maas'] = pd.to_numeric(df['maas'], downcast='float')
# Kategorik verileri 'category' tipine çevirme
# Bu işlem, tekrarlayan metin verilerini indeksleyerek bellekten büyük tasarruf sağlar
df['sehir'] = df['sehir'].astype('category')
print(df.info())
Veri Temizleme İşlemlerinde Hata Ayıklama ve Doğrulama
Temizleme komutlarını zincirleme (method chaining) şeklinde yazmak okunabilirliği artırsa da, hataların kaynağını bulmayı zorlaştırabilir. Karmaşık temizleme işlemlerinde, her adımın sonucunu doğrulamak için ara kontroller eklemek profesyonel bir yaklaşımdır.
Assert İfadeleri ile Veri Kalitesi Kontrolü
Temizleme işleminizin beklendiği gibi sonuçlandığından emin olmak için assert ifadelerini kullanın. Bu yöntem, kodunuzun bir sonraki aşamaya geçmeden önce verinin doğruluğunu garanti altına almasını sağlar.
# Temizleme fonksiyonu örneği
def temizle_veriseti(df):
df = df.dropna(subset=['email'])
# Kontrol: E-posta sütununda hiç boş değer kalmamalı
assert df['email'].isnull().sum() == 0, "Hata: E-posta sütununda hala eksik değer var!"
# Kontrol: Yaş sütunu negatif değer içeremez
assert (df['yas'] >= 0).all(), "Hata: Negatif yaş değeri tespit edildi!"
return df
# Fonksiyonu uygulama
df_temiz = temizle_veriseti(df)
print("Veri temizleme doğrulaması başarıyla tamamlandı.")
İleri İpucu: Vectorized String İşlemleri
Metin verilerini temizlerken apply(lambda x: ...) kullanmak yerine, Pandas'ın yerleşik .str erişimcisini kullanmak çok daha hızlıdır. .str metodları, C dilinde optimize edildiği için Python döngülerinden kat kat daha performanslı çalışır.
- Yavaş yöntem:
df['isim'].apply(lambda x: x.strip().lower()) - Hızlı yöntem:
df['isim'] = df['isim'].str.strip().str.lower()
Bu yöntemleri kullanarak, veri temizleme hattınızı (pipeline) daha dayanıklı ve üretim ortamına hazır hale getirebilirsiniz. Unutmayın, temizlik aşamasında yapılan her bir doğrulama, analiz aşamasında karşılaşacağınız hataları minimize eder.
Sonuç
Python ile Pandas kullanarak veri temizleme işlemi, veri bilimi yolculuğunuzun en kritik becerilerinden biridir. Bu rehberde öğrendiğiniz yöntemler, verilerinizi karmaşadan kurtarıp anlamlı sonuçlar çıkarmanız için gerekli olan temel araçlardır. Unutmayın, iyi bir analiz, temiz bir veri setiyle başlar.
Bir sonraki adım olarak, temizlediğiniz bu verileri matplotlib veya seaborn kütüphaneleriyle görselleştirerek verideki gizli desenleri keşfetmeye başlayabilirsiniz. Kodlarınızın güvenliğini sağlamak için her zaman girdi verilerini doğrulamayı (validation) ihmal etmeyin.
Kod Güvenliği Sorumluluk Reddi: Bu makalede yer alan kod örnekleri eğitim amaçlıdır. Üretim ortamında (production) kullanacağınız veriler üzerinde işlem yaparken, veri gizliliği kurallarına uyunuz ve hassas verileri (şifre, kişisel kimlik bilgisi vb.) işlemden önce maskeleyiniz.


Yorumlar (0)
Yorum Yaz