Dask DataFrame'ler

Python ile Dask ile Paralel Programlama

James Fulton

Climate Informatics Researcher

pandas DataFrame'ler vs. Dask DataFrame'ler

import pandas as pd

# Tek bir csv dosyası oku pandas_df = pd.read_csv( "dataset/chunk1.csv" )

Bu, tek bir CSV dosyasını anında okur.

import dask.dataframe as dd

# Tüm csv dosyalarını tembelce oku dask_df = dd.read_csv( "dataset/*.csv" )

Bu, dataset klasöründeki tüm CSV dosyalarını tembelce okur.

Python ile Dask ile Paralel Programlama

Dask DataFrame'ler

print(dask_df)
Dask DataFrame Yapısı:
              ID     col1     col2    col3     col4     ...
npartitions=3                               
           int64   object   object   int64  float64     ...
             ...      ...      ...     ...      ...     ...
             ...      ...      ...     ...      ...     ...
             ...      ...      ...     ...      ...     ...
Dask Name: getitem, 3 tasks
Python ile Dask ile Paralel Programlama

Dask DataFrame görev grafiği

dask.visualize(dask_df)

Görev grafiği 3 yükleme işlemi gösteriyor.

Python ile Dask ile Paralel Programlama

Blok boyutunu kontrol etme

# Bir bloğun azami belleğini ayarla
dask_df = dd.read_csv("dataset/*.csv", blocksize="10MB")

print(dask_df)
Dask DataFrame Yapısı:
              ID     col1     col2    col3     col4     ...
npartitions=7                               
           int64   object   object   int64  float64     ...
             ...      ...      ...     ...      ...     ...
             ...      ...      ...     ...      ...     ...
             ...      ...      ...     ...      ...     ...
Dask Name: getitem, 7 tasks
Python ile Dask ile Paralel Programlama

Bölümleri açıklama

# Bir bloğun azami belleğini ayarla
dask_df = dd.read_csv("dataset/*.csv", blocksize="10MB")

Neden 7 bölüm?

boyut     dosya
  9M      dataset/chunk1.csv
 18M      dataset/chunk2.csv
 32M      dataset/chunk3.csv
Python ile Dask ile Paralel Programlama

Bölümleri açıklama

# Bir bloğun azami belleğini ayarla
dask_df = dd.read_csv("dataset/*.csv", blocksize="10MB")

Neden 7 bölüm?

boyut     dosya
  9M      dataset/chunk1.csv    # 1 bölüm olur
 18M      dataset/chunk2.csv    # 2 bölüm olur
 32M      dataset/chunk3.csv    # 4 bölüm olur
Python ile Dask ile Paralel Programlama

Dask DataFrame'lerle analiz

  • Sütun seç
    col1 = dask_df['col1']
    
  • Sütun atama
    dask_df['double_col1'] = 2 * col1
    
  • Matematiksel işlemler, ör.
    dask_df.std()
    dask_df.min()
    
  • Groupby
    dask_df.groupby(col1).mean()
    
  • Daha önce kullandığınız fonksiyonlar bile
    dask_df.nlargest(n=3, columns='col1')
    
Python ile Dask ile Paralel Programlama

Datetime ve diğer pandas işlevleri

import pandas as pd

# Dizeyi datetime biçimine çevirme
pd.to_datetime(pandas_df['start_date'])


# Datetime özniteliklerine erişim pandas_df['start_date'].dt.year pandas_df['start_date'].dt.day pandas_df['start_date'].dt.hour pandas_df['start_date'].dt.minute
import dask.dataframe as dd

# Dizeyi datetime biçimine çevirme
dd.to_datetime(dask_df['start_date'])


# Datetime özniteliklerine erişim dask_df['start_date'].dt.year dask_df['start_date'].dt.day dask_df['start_date'].dt.hour dask_df['start_date'].dt.minute
Python ile Dask ile Paralel Programlama

Sonuçları tembel olmayan yapma

# 5 satır göster
print(dask_df.head())
        ID     double_col1     col1    col2     col3     ...
0   543795              20       10     436        0     ...
1   874535              24       12     268        0     ...
2   781326              62       31     211        0     ...
3   112457              18        9     898        1     ...
4   103256             142       71     663        0     ...
# Tembel Dask DataFrame'i bellekteki pandas DataFrame'e çevir
results_df = df.compute()
Python ile Dask ile Paralel Programlama

Sonucu doğrudan dosyaya yazma

# 7 bölüm (parça), dolayısıyla 7 çıktı dosyası
dask_df.to_csv('answer/part-*.csv')
part-0.csv
part-1.csv
part-2.csv
part-3.csv
part-4.csv
part-5.csv
part-6.csv
Python ile Dask ile Paralel Programlama

Daha hızlı dosya biçimleri - Parquet

# Parquet'ten oku
dask_df = dd.read_parquet('dataset_parquet')

# Parquet'e kaydet
dask_df.to_parquet('answer_parquet')
  • Parquet, CSV'ye göre veriyi okurken birkaç kat daha hızlıdır
  • Yazma da daha hızlı olabilir
Python ile Dask ile Paralel Programlama

Hadi pratik yapalım!

Python ile Dask ile Paralel Programlama

Preparing Video For Download...