Dask DataFrame'lerine Giriş
pd.read_csv ve pd.DataFrame yerine dask eşdeğerlerini kullanın, yürütmeyi başlatmak için compute() çağırın ve görev grafiklerinin profilini çıkarın.
Dask DataFrame'lerine Giriş, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
Dask Nedir?
Dask, NumPy ve Pandas'ı RAM'den büyük veri kümelerine genişleten, Python için bir paralel hesaplama kütüphanesidir. dask.dataframe modülü, Pandas ile neredeyse aynı bir DataFrame API'si sunar; ancak işlemleri hemen yürütmek yerine Dask bir görev grafiği oluşturur ve siz .compute() çağırdığınızda bunu tembel biçimde yürütür. Bu, çok az kod değişikliğiyle işin birden çok çekirdek veya hatta birden çok makine arasında paralelleştirilmesini sağlar.
Dask'ı Kurma ve İçeri Aktarma
Dask, pip install dask[dataframe] komutuyla kurulur. İçeri aktarma kuralı import dask.dataframe as dd şeklindedir. Dask DataFrame'inin altında, her biri bağımsız olarak işlenen çok sayıda küçük Pandas DataFrame'i bulunur. Dask DataFrame üzerindeki işlemler bir tembel görev grafiği oluşturur; .compute() çağrılana kadar hiçbir şey çalışmaz. Hesaplamayı tanımlamak ile yürütmek arasındaki bu ayrım, Dask'ın temel fikridir.
import dask.dataframe as dd
# Read a large CSV — returns a Dask DataFrame immediately (no data loaded yet)
ddf = dd.read_csv('large_sales.csv')
print(type(ddf)) # dask.dataframe.core.DataFrame
print(ddf.columns.tolist())
print(ddf.dtypes)Dask ve Pandas: Temel Fark
Pandas ile her işlem hemen ve istekli biçimde yürütülür. Dask ile işlemler, ertelenmiş hesaplamayı temsil eden başka bir Dask nesnesi döndürür. Dask ancak .compute() çağrıldığında verileri gerçekten okur ve görev grafiğini yürütür. Bu tembel yaklaşım, yürütmeden önce planı iyileştirmesine olanak tanır; örneğin verileri birden çok kez yüklememek için ardışık filtreleri birleştirebilir. Bunu bir yemek tarifi gibi düşünün: Dask tarifi yazar, .compute() ise yemeği pişirir.
import dask.dataframe as dd
ddf = dd.read_csv('sales.csv')
# This does NOT run yet — just builds the task graph
filtered = ddf[ddf['amount'] > 1000]
agg = filtered.groupby('region')['amount'].sum()
print(type(agg)) # dask.dataframe.core.Series
# NOW execute everything
result = agg.compute()
print(result)Bölümler: Temel Kavram
Bir Dask DataFrame, her biri normal bir Pandas DataFrame olan bölümlere ayrılır. Varsayılan olarak dd.read_csv, dosya başına bir bölüm (veya büyük dosyalarda her 128 MB için bir bölüm) oluşturur. Bunu blocksize ile denetleyebilirsiniz. ddf.npartitions değerini kontrol ederek kaç bölüm bulunduğunu görebilirsiniz. Daha fazla bölüm daha fazla paralellik sağlar, ancak ek yük getirir; daha az bölüm ek yükü azaltır, ancak paralelliği sınırlar. Genellikle en uygun değer birkaç yüz bölümdür.
import dask.dataframe as dd
ddf = dd.read_csv('data/*.csv') # Read multiple CSV files at once
print('Number of partitions:', ddf.npartitions)
# Access a single partition as a Pandas DataFrame
first_partition = ddf.get_partition(0).compute()
print('Partition 0 shape:', first_partition.shape)Dask'te Tanıdık Pandas İşlemleri
Yaygın Pandas işlemlerinin çoğu Dask'te de aynı şekilde çalışır: .head(), .tail(), .describe(), Boole dizinleme, .groupby(), .merge() ve .assign() işlemlerinin tümünün Dask karşılığı vardır. En büyük fark, sonucu somutlaştırmak için .compute() çağırmanız gerekmesidir. Pandas'ın milisaniyeler içinde gerçekleştirdiği işlemler, görev grafiği ek yükü nedeniyle Dask'te saniyeler sürebilir; bu nedenle küçük veriler için Pandas'ı, veri RAM'e sığmadığında ise Dask'ı kullanın.
import dask.dataframe as dd
ddf = dd.read_csv('transactions.csv')
# Filtering — same syntax as Pandas
high_value = ddf[ddf['amount'] > 500]
# GroupBy aggregation
by_region = high_value.groupby('region')['amount'].mean()
# Execute
result = by_region.compute()
print(result.sort_values(ascending=False))Glob Desenleriyle Birden Çok Dosya Okuma
Dask'ın en kullanışlı özelliklerinden biri, glob desenlerini kullanarak birden çok dosyayı aynı anda okuyabilmesidir. dd.read_csv('data/2024-*.csv'), eşleşen tüm dosyaları okur ve dosya başına bir bölüm oluşturur. Bu, veri göllerinde yaygın olan aylık veya günlük bölümlere ayrılmış dosyalarda depolanan veriler için idealdir. Dask, şemaları otomatik olarak hizalar; bu işlem, Pandas ile elle döngü kurup birleştirmeye eşdeğerdir, ancak çok daha basittir.
import dask.dataframe as dd
# Read all monthly files at once
ddf = dd.read_csv('sales/2024-*.csv',
dtype={'order_id': 'int32',
'amount': 'float32'})
print(f'Partitions: {ddf.npartitions}') # One per file
print(f'Total rows (lazy): {len(ddf)}') # This triggers a compute!Görev Grafikleri için visualize() Yöntemi
Karmaşık bir Dask işlem hattını çalıştırmadan önce, result.visualize() çağrısıyla görev grafiğini inceleyebilirsiniz; bu çağrı, tüm hesaplama adımlarını gösteren bir PNG şeması oluşturur. Bu özellik, Dask'ın ne çalıştıracağını anlamak ve beklenmeyen yavaşlıkları ayıklamak için değerlidir. Grafik, bölümlerin süzme, groupby ve toplama adımlarından nasıl geçtiğini göstererek gereksiz hesaplamaları kolayca fark etmenizi sağlar. graphviz paketi gereklidir.
import dask.dataframe as dd
ddf = dd.read_csv('orders.csv')
pipeline = (
ddf[ddf['status'] == 'completed']
.groupby('product_id')['revenue']
.sum()
)
# Visualise the task graph (saves to PNG)
# pipeline.visualize('task_graph.png')
# Check number of tasks in the graph
print('Number of tasks:', len(pipeline.__dask_graph__()))map_partitions ile Özel İşlevleri Uygulama
Bir Dask DataFrame'e özel bir Pandas işlevi uygulamanız gerektiğinde ddf.map_partitions(func) kullanın. Bu ifade, func işlevini her bölüme bağımsız olarak uygular ve yeni bir Dask DataFrame döndürür. İşlev, normal bir Pandas DataFrame almalı ve yine bir Pandas DataFrame döndürmelidir. Bu, df.apply() işleminin Dask karşılığıdır ve Dask'ı yalnızca Pandas'ı anlayan kodla bütünleştirmenin yoludur.
import dask.dataframe as dd
import pandas as pd
def normalise_chunk(df):
df = df.copy()
df['amount_norm'] = (df['amount'] - df['amount'].mean()) / df['amount'].std()
return df
ddf = dd.read_csv('data.csv')
normalised = ddf.map_partitions(normalise_chunk)
result = normalised[['order_id', 'amount_norm']].compute()
print(result.head())Dask Zamanlayıcı Seçenekleri
Dask, görevlerin nasıl yürütüleceğini denetleyen birden çok zamanlayıcıya sahiptir. 'synchronous' zamanlayıcısı görevleri geçerli iş parçacığında sırayla çalıştırır (hata ayıklama için kullanışlıdır). 'threads' zamanlayıcısı bir iş parçacığı havuzu kullanır (G/Ç ağırlıklı işler için uygundur). 'processes' zamanlayıcısı, CPU ağırlıklı işler için birden çok işlem başlatır (Python'ın GIL kısıtlamasını aşar). Dask dağıtık kümesi, işlemlerin birden çok makinede yürütülmesini sağlar. Zamanlayıcıyı compute(scheduler='threads') ile belirtin.
import dask.dataframe as dd
ddf = dd.read_csv('data.csv')
agg = ddf.groupby('category')['sales'].sum()
# Choose scheduler based on workload
result_sync = agg.compute(scheduler='synchronous') # sequential, easy to debug
result_threads = agg.compute(scheduler='threads') # parallel I/O
result_processes = agg.compute(scheduler='processes') # parallel CPUDask ile Pandas Arasında Dönüştürme
Büyük bir veri kümesini Dask ile işleyip ardından toplanmış sonucu son analiz veya görselleştirme için Pandas'a aktarmak yaygın bir uygulamadır. Bir Dask DataFrame'i Pandas'a dönüştürmek için .compute() kullanın. Ters yönde ise dd.from_pandas(df, npartitions=4), bir Pandas DataFrame'i Dask DataFrame'e dönüştürür. Bu, tüm veri kümesine ölçeklemeden önce küçük veriler üzerinde Dask kodunu sınamak için kullanışlıdır.
import pandas as pd
import dask.dataframe as dd
# Start with a small Pandas DF for testing
df_small = pd.DataFrame({'a': range(100), 'b': range(100, 200)})
# Convert to Dask for development/testing
ddf = dd.from_pandas(df_small, npartitions=4)
result = ddf.groupby('a')['b'].sum().compute()
print(type(result)) # pandas.Series
print(result.head())Dask, Pandas ve SQL Ne Zaman Kullanılmalı
Dask her zaman doğru araç değildir. Verileriniz RAM'e sığıyorsa (birkaç GB'tan azsa) Pandas'ı kullanın; daha az ek yük nedeniyle daha basit ve daha hızlıdır. Veriler RAM'i aşıyor, ancak Pandas benzeri söz dizimi ve tek makinede paralellik istiyorsanız Dask'ı kullanın. Veriler ilişkisel bir veritabanında bulunuyorsa ve toplama işlemleri veritabanı altyapısına aktarılabiliyorsa SQL/veritabanı kullanın. Petabayt ölçeğinde birden çok makinede dağıtık işleme gerekiyorsa Spark veya BigQuery kullanın.
Hızlı Kontrol
Bu dersteki Veri Analizi kavramlarını anlayıp anlamadığınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: Dask DataFrames, tanıdık bir API'ye sahip, tembel olarak değerlendirilen Pandas bölümleri koleksiyonlarıdır; .compute(), görev grafiğinin gerçekten yürütülmesini başlatır; map_partitions ise herhangi bir özel Pandas işlevini tüm bölümlere uygulamanızı sağlar. Sırada, büyük veri kümelerini depolamak için CSV'ye hızlı ve sütun tabanlı bir alternatif olan Parquet biçimini inceleyeceğiz.
Sıkça Sorulan Sorular
“Dask DataFrame'lerine Giriş” dersi ücretsiz mi?
Evet — “Dask DataFrame'lerine Giriş” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
“Dask DataFrame'lerine Giriş” dersinde ne öğreneceğim?
pd.read_csv ve pd.DataFrame yerine dask eşdeğerlerini kullanın, yürütmeyi başlatmak için compute() çağırın ve görev grafiklerinin profilini çıkarın. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Dask DataFrame'lerine Giriş” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- chunksize ile CSV Akışı
- Parçalar Arası Artımlı Toplulaştırma
- Dask DataFrame'lerine Giriş
- Parquet: Hızlı Sütunlu Depolama