Python İle Pandas Kütüphanesi Kullanarak Büyük Veri Seti Analizi Nasıl Yapılır?

Python İle Pandas Kütüphanesi Kullanarak Büyük Veri Seti Analizi Nasıl Yapılır?
Python İle Pandas Kütüphanesi Kullanarak Büyük Veri Seti Analizi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Çalışmaya başlamadan önce sisteminizde Python 3.12 veya üzeri bir sürümün yüklü olduğundan emin olmalısınız. Pandas kütüphanesi, veri manipülasyonu için optimize edilmiş C tabanlı bir altyapıya sahiptir. Kurulum için terminal veya komut satırınızı kullanarak aşağıdaki komutu çalıştırın:

pip install pandas numpy pyarrow

Burada numpy sayısal hesaplamalar için, pyarrow ise büyük veri setlerini belleğe daha hızlı yüklemek ve saklamak için kullanılan bir "engine" (motor) görevi görür. Kurulumun başarıyla tamamlandığını doğrulamak için Python ortamında import pandas as pd komutunu çalıştırabilirsiniz.

Büyük Veri Setlerini Parçalı Okuma (Chunking)

Büyük bir CSV dosyasını tek seferde RAM'e yüklemek, sistemin kilitlenmesine veya "MemoryError" hatası almanıza neden olabilir. Pandas, chunksize parametresi ile dosyayı küçük parçalar halinde okumanıza olanak tanır. Bu yöntem, veriyi işlerken bellek kullanımını sabit tutmanızı sağlar.

import pandas as pd

# 100 bin satırlık parçalar halinde okuma
chunk_size = 100000
file_path = 'buyuk_veri.csv'

for chunk in pd.read_csv(file_path, chunksize=chunk_size):
    # Her bir parça üzerinde analiz işlemleri
    print(f"İşlenen satır sayısı: {len(chunk)}")
    # Örneğin: chunk.to_sql(...) veya filtreleme işlemleri

Bu örnekte, read_csv fonksiyonuna verilen chunksize parametresi, dosyanın tamamını değil, belirttiğiniz satır sayısı kadarını belleğe alır. Döngü bittiğinde bir sonraki parçaya geçilir, böylece sisteminiz asla aşırı yüklenmez.

Veri Tipi Optimizasyonu ile Bellek Tasarrufu

Pandas, varsayılan olarak sayısal verileri 64-bit formatında saklar. Ancak verileriniz daha küçük aralıklarda (örneğin 0-255 arası tam sayılar) ise, bunları 8-bit veya 16-bit formatına çevirerek bellek kullanımını %70'e varan oranlarda düşürebilirsiniz.

import pandas as pd

# Veri setini yüklerken veri tiplerini belirleme
dtypes = {
    'yas': 'int8',
    'gelir': 'float32',
    'kategori': 'category'
}

df = pd.read_csv('veri.csv', dtype=dtypes)
print(df.info(memory_usage='deep'))

category veri tipi, özellikle tekrar eden metin verileri (şehir isimleri, departmanlar vb.) için devrim niteliğinde bir tasarruf sağlar. Metin verilerini benzersiz değerler olarak saklamak yerine, arka planda tam sayı indeksleri ile tutar.

Veri Analizi Yöntemlerinin Karşılaştırılması

Büyük veri setlerini işlerken hangi yöntemi seçeceğiniz, veri setinizin boyutuna ve donanımınıza bağlıdır. Aşağıdaki tablo, farklı senaryolar için en uygun yaklaşımı özetlemektedir.

Yöntem Avantajı Dezavantajı
Chunking (Parçalı) Düşük bellek kullanımı Kod karmaşıklığı artar
Parquet Formatı Çok hızlı okuma/yazma Ekstra kütüphane gerektirir
Dask (Paralel) Çok çekirdekli işlem Öğrenme eğrisi daha dik

Parquet Formatı Kullanarak Performansı Artırma

CSV formatı metin tabanlı olduğu için yavaştır ve çok yer kaplar. 2026 yılı standartlarında büyük verileri saklamak için Parquet formatı önerilir. Parquet, veriyi sütun bazlı (columnar) sıkıştırarak saklar, bu da okuma hızını ciddi oranda artırır.

# CSV'yi Parquet'e çevirme
df = pd.read_csv('buyuk_veri.csv')
df.to_parquet('veri_setim.parquet', engine='pyarrow')

# Parquet dosyasını okuma
df_optimized = pd.read_parquet('veri_setim.parquet')

Parquet dosyaları, verinin şemasını (sütun tiplerini) kendi içinde saklar. Bu sayede veriyi her okuduğunuzda veri tiplerini tekrar tanımlamanıza gerek kalmaz.

Güvenlik Uyarısı: Dışarıdan gelen CSV veya Parquet dosyalarını yüklerken, verinin kaynağına dikkat edin. Kötü niyetli oluşturulmuş dosyalar, "pickle" veya benzeri serileştirme yöntemleri kullanıldığında kod çalıştırma (RCE) zafiyetlerine yol açabilir. Sadece güvendiğiniz kaynaklardan gelen verileri read_pickle ile okuyun; CSV ve Parquet bu açıdan daha güvenlidir.

Vektörize Edilmiş İşlemler İle Hız Kazanma

Pandas ile analiz yaparken asla for döngüleri kullanmayın. Pandas'ın sunduğu vektörize edilmiş fonksiyonlar, arka planda C ve Fortran ile yazılmış optimize edilmiş kodları çalıştırır. Bir sütundaki tüm değerleri güncellemek için döngü yerine doğrudan işlem operatörlerini kullanın.

# YANLIŞ YÖNTEM (Yavaş)
# for i in range(len(df)):
#     df.loc[i, 'yeni_sutun'] = df.loc[i, 'fiyat'] * 1.18

# DOĞRU YÖNTEM (Hızlı)
df['yeni_sutun'] = df['fiyat'] * 1.18

Bu işlem, tüm sütunu tek bir CPU döngüsünde işleyerek büyük veri setlerinde milisaniyeler içinde sonuç verir. Döngü kullanımı, Python'un yorumlayıcı (interpreter) katmanına takıldığı için büyük verilerde binlerce kat daha yavaştır.

Sıkça Sorulan Sorular

Pandas ile çok büyük verileri işlerken RAM neden dolar?

Pandas, veriyi bellekte (RAM) tutar. Eğer veri setiniz RAM kapasitenizden büyükse, veriyi parçalara bölerek (chunking) okumalı veya veritabanı sorguları ile filtreleyerek yüklemelisiniz.

CSV yerine neden Parquet kullanmalıyım?

Parquet, veriyi ikili (binary) formatta ve sütun bazlı saklar. Bu, dosya boyutunun küçülmesini ve okuma hızının 10-20 kat artmasını sağlar.

Pandas'ta "SettingWithCopyWarning" hatasını nasıl çözerim?

Bu uyarı, bir veri çerçevesinin kopyası üzerinde işlem yapmaya çalıştığınızda çıkar. İşlemi df.loc[row, col] = value şeklinde veya .copy() metodunu kullanarak doğrudan ana veri çerçevesi üzerinde yaparak çözebilirsiniz.

Dask kütüphanesine ne zaman geçmeliyim?

Eğer veriniz tek bir makinenin RAM'ine sığmıyorsa ve Pandas'ın parçalı okuma yöntemleri bile yavaş kalıyorsa, Dask kütüphanesi ile veriyi paralel işleme geçiş yapmalısınız.

Veri temizleme aşamasında en çok neye dikkat etmeliyim?

Eksik veriler (NaN) ve aykırı değerler (outliers) analiz sonuçlarınızı saptırır. df.dropna() veya df.fillna() gibi metodlarla veriyi analiz öncesi mutlaka temizlemelisiniz.

Yasal Uyarı: Bu makaledeki kod örnekleri eğitim amaçlıdır. Büyük veri setleri üzerinde çalışırken sistem kaynaklarını yönetmek yazılımcının sorumluluğundadır. Veri güvenliği ve gizliliği (KVKK/GDPR) kurallarına uygun hareket etmeyi unutmayın.

Pandas ile Bellek İçi İşleme Sınırlarını Aşmak: İleri Teknikler

Pandas, veriyi RAM üzerinde tuttuğu için sistemin fiziksel sınırlarına ulaştığınızda performans kaybı veya MemoryError hataları ile karşılaşmanız kaçınılmazdır. Bu aşamada, sadece veri tiplerini optimize etmek yetmeyebilir. Veri setinin tamamını belleğe yüklemeden, belirli sütunları seçerek veya sadece ihtiyaç duyulan satırları filtreleyerek okuma yapmak, sistem kaynaklarını korumanın en etkili yoludur.

Sütun Bazlı Okuma ile Bellek Yönetimi

Bir veri setinde 50 farklı sütun bulunabilir ancak analiziniz için sadece 3 tanesine ihtiyaç duyuyor olabilirsiniz. usecols parametresini kullanarak gereksiz verilerin belleğe yüklenmesini engelleyebilirsiniz.

import pandas as pd

# Sadece gerekli sütunları yükleyerek bellek kullanımını %80'e varan oranda azaltabilirsiniz
gerekli_sutunlar = ['kullanici_id', 'islem_tarihi', 'tutar']
df = pd.read_csv('dev_veri_seti.csv', usecols=gerekli_sutunlar)

print(df.info())

Büyük Veri Setlerinde Performans İzleme ve Hata Ayıklama

Büyük veri setleri üzerinde çalışırken kodunuzun hangi aşamada tıkandığını anlamak için profil oluşturma (profiling) araçlarını kullanmalısınız. memory_profiler kütüphanesi, fonksiyon bazlı bellek kullanımını satır satır görmenizi sağlar.

Bellek Kullanımını Satır Satır Analiz Etme

Kodunuzun hangi satırda ne kadar RAM tükettiğini görmek, darboğazları tespit etmek için kritik öneme sahiptir. Aşağıdaki örnekte, bir fonksiyonun bellek tüketimini nasıl takip edebileceğinizi görebilirsiniz.

# pip install memory_profiler
from memory_profiler import profile

@profile
def veri_analiz_fonksiyonu():
    df = pd.read_csv('dev_veri_seti.csv')
    df['yeni_kolon'] = df['tutar'] * 1.18
    return df.groupby('kullanici_id')['yeni_kolon'].sum()

if __name__ == "__main__":
    veri_analiz_fonksiyonu()

İleri İpucu: Garbage Collector Kullanımı

Pandas ile yapılan karmaşık işlemlerde, ara değişkenler bellekte gereksiz yer kaplayabilir. Python'un çöp toplayıcısını (Garbage Collector) manuel olarak tetikleyerek bellek üzerindeki baskıyı hafifletebilirsiniz.

import gc

# Büyük bir işlemden sonra ara değişkenleri silin
del buyuk_gecici_df
gc.collect() # Belleği boşaltmak için çöp toplayıcıyı çağırın
Not: gc.collect() komutu, özellikle döngü içerisinde büyük veri parçalarıyla çalışırken RAM'in şişmesini engellemek için hayat kurtarıcı bir yöntemdir.

Sonuç

Python ve Pandas kullanarak büyük veri setlerini analiz etmek, doğru tekniklerle oldukça verimli bir süreçtir. Parçalı okuma, veri tipi optimizasyonu ve Parquet formatı kullanımı, 2026 yılı projelerinizde performans darboğazlarını aşmanızı sağlayacaktır. Bir sonraki adım olarak, verilerinizi görselleştirmek için Matplotlib veya Seaborn kütüphanelerini Pandas ile entegre etmeyi öğrenerek analizlerinizi raporlanabilir hale getirebilirsiniz.

Bu yazıya tepkinizi paylaşın:
Selin Korkmaz

Kendin yap (DIY) projeleri ve sürdürülebilir yaşam ipuçları üzerine odaklanıyorum. Okuyucularıma bütçe dostu ve yaratıcı çözüm önerileri sunmaktan keyif alıyorum.

Yorumlar (0)

Yorum Yaz