1.1. Detay: Veri Kaynakları ve Bellek Yönetimi Stratejileri
Büyük veri setleri (Big Data) ile çalışırken en büyük darboğaz bellek tüketimidir. Veriyi yüklerken bile akıllı davranarak projenizin verimliliğini %50'ye kadar artırabilirsiniz.
Veri Kaynakları ve Erişim Yöntemleri
1. CSV/Excel Dosyaları (Küçük Veri)
Genellikle yerel makinelerde saklanır ve **Pandas** kütüphanesi ile veriyi yüklerken, büyük veri setlerinde Bellek Kullanımını optimize etmenin kritik yollarını öğrenin.
2. SQL/Veritabanları (Orta/Büyük Veri)
Verinin bir sunucuda (PostgreSQL, MySQL vb.) tutulduğu durumdur. Verinin tamamını çekmek yerine, sadece gerekli sütunları ve satırları çekerek analiz ortamındaki bellek baskısını azaltırsınız.
3. Bulut Depolama (Big Data)
Petabayt seviyesindeki veriler (Amazon S3, Google Cloud Storage) için kullanılır. Yükleme, **Apache Spark** gibi dağıtık sistemler aracılığıyla birden çok sunucu arasında bölünerek yapılır.
Büyük Veride Bellek Optimizasyonu
500 milyon satırlık bir dosyayı okurken, doğru veri tipini seçmek hayati önem taşır:
Veri Tiplerini Küçültmek
- Problem: Pandas, sayısal sütunları varsayılan olarak 64 bit (8 bayt) olarak atar.
- Çözüm: Eğer bir sütun sadece 0-100 arasında değerler içeriyorsa, onu 8 bit'lik tam sayı (int8) olarak tanımlamak, bellek kullanımını %87 azaltır.
Verimli Dosya Formatları
- CSV:** Yüklemesi yavaştır ve sıkıştırması düşüktür.
- Parquet/ORC Formatları: CSV'ye göre çok daha hızlı yüklenir ve bellek dostudur. Büyük veri projelerinde standarttır.
Hangi Yükleme Stratejisi? (Karar Matrisi)
| Durum | Öneri | Not |
|---|---|---|
| ≤ 1M satır CSV | Pandas + dtype azaltma | category/int8/float32 |
| 1–50M satır | Pandas chunksize + sütun seçimi | memory map / iterator |
| SQL üzerinde | SELECT kolonlar + WHERE filtre | Sunucuda özetle |
| 100M+ satır / S3 | Spark (Parquet) | Dağıtık okuma |
Bellek Tahminleyici
Kod Şablonları
# 1) Pandas: dtype azaltma + chunksize
import pandas as pd
dtype_map = { 'oda_sayisi':'int8', 'metrekare':'float32', 'semt':'category', 'isitma':'category' }
use_cols = ['fiyat','metrekare','oda_sayisi','bina_yasi','semt','isitma']
iter_df = pd.read_csv('veri.csv', usecols=use_cols, dtype=dtype_map, chunksize=500_000)
df = pd.concat(iter_df, ignore_index=True)
# 2) SQL: sadece gerekli kolon/satırlar
import sqlalchemy as sa
engine = sa.create_engine('postgresql+psycopg2://user:pw@host/db')
q = "SELECT fiyat, metrekare, oda_sayisi, bina_yasi, semt, isitma FROM evler WHERE yil>=2015"
df = pd.read_sql(q, engine)
# 3) Spark: S3 + Parquet
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('read').getOrCreate()
df = spark.read.parquet('s3://bucket/evler/*.parquet')