Jednoduchá ukážka použitia Dask knižníc

Inštalácia

Je potrebné mať nainštalovaný python3 a knižnicu Dask, ktorá sa inštaluje napríklad cez pip

pip install dask[complete]

Na mojom MacPro bolo este potrebne instalovat z nejakeho dovodu novsie kniznice pyzmq

pip install -I pyzmq==17

Dataset

Ako príklad poslúži 815 MB CSV súbor dát New York taxi služby Yellow, ktorá publikuje každý mesiac dataset o objednávkach taxi služby v meste. V našom príklade načítame súbor a vykonáme základný štatistický výpočet a to:

  1. počet všetkých ľudí cestujúcich v taxíku za obdobie decembra 2017
  2. počet všetkých ľudí cestujúcich v taxíku len cez Vianoce 2017
  3. priemerna platba za taxik za celý december

Spustenie Dask klienta

Táto možnosť je voliteľná a dáva lepšiu predstavu o danom výpočte

In [11]:
from distributed import progress, Client
client = Client(n_workers=2, threads_per_worker=2, memory_limit='1GB')
client
Out[11]:

Client

  • Scheduler: tcp://127.0.0.1:49588

Cluster

  • Workers: 2
  • Cores: 4
  • Memory: 2.00 GB
In [12]:
import dask.dataframe as dd

# praca s dataframes je rovnaka ako pri Pandas knizniciach

df = dd.read_csv(r"data/yellow_tripdata_2017-12.csv",assume_missing=True)
In [13]:
# kedze Dask Dataframe ako aj Pandas Dataframes nacitavaju obsah LAZY stylom,
# vypisanim objektu dostavame 'prazdny' objekt

df
Out[13]:
Dask DataFrame Structure:
VendorID tpep_pickup_datetime tpep_dropoff_datetime passenger_count trip_distance RatecodeID store_and_fwd_flag PULocationID DOLocationID payment_type fare_amount extra mta_tax tip_amount tolls_amount improvement_surcharge total_amount
npartitions=14
float64 object object float64 float64 float64 object float64 float64 float64 float64 float64 float64 float64 float64 float64 float64
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
Dask Name: from-delayed, 42 tasks
In [14]:
# nazvy stlpcov a tiez typy su ale dostupne

df.dtypes
Out[14]:
VendorID                 float64
tpep_pickup_datetime      object
tpep_dropoff_datetime     object
passenger_count          float64
trip_distance            float64
RatecodeID               float64
store_and_fwd_flag        object
PULocationID             float64
DOLocationID             float64
payment_type             float64
fare_amount              float64
extra                    float64
mta_tax                  float64
tip_amount               float64
tolls_amount             float64
improvement_surcharge    float64
total_amount             float64
dtype: object
In [15]:
# ukážka prvých 3 riadkov datasetu

df.head(3)
Out[15]:
VendorID tpep_pickup_datetime tpep_dropoff_datetime passenger_count trip_distance RatecodeID store_and_fwd_flag PULocationID DOLocationID payment_type fare_amount extra mta_tax tip_amount tolls_amount improvement_surcharge total_amount
0 1.0 2017-12-01 00:12:00 2017-12-01 00:12:51 1.0 0.0 1.0 N 226.0 226.0 3.0 2.5 0.5 0.5 0.0 0.0 0.3 3.8
1 1.0 2017-12-01 00:13:37 2017-12-01 00:13:47 1.0 0.0 1.0 N 226.0 226.0 3.0 2.5 0.5 0.5 0.0 0.0 0.3 3.8
2 1.0 2017-12-01 00:14:15 2017-12-01 00:15:05 1.0 0.0 1.0 N 226.0 226.0 3.0 2.5 0.5 0.5 0.0 0.0 0.3 3.8
In [7]:
# konsolidacia dát (odstránenie času z timestampu pre neskoršie filtrovanie Vianoc)

df['date'] = df['tpep_pickup_datetime'].str[:10]
df['date'].head(3)
Out[7]:
0    2017-12-01
1    2017-12-01
2    2017-12-01
Name: date, dtype: object
In [2]:
# počet všetkých ľudí cestujúcich v taxíku za obdobie decembra 2017

df_passenger_count = df.passenger_count.sum()
df_passenger_count.compute()
Out[2]:
15521172.0
In [8]:
# počet všetkých ľudí cestujúcich v taxíku len cez Vianoce 2017

df_passenger_dec_count = df[df.date == '2017-12-24'].passenger_count.sum()
df_passenger_dec_count.compute()
Out[8]:
354949.0
In [10]:
# priemerna platba za taxik za celý december

df_money = df.total_amount.mean()
df_money.compute()
Out[10]:
16.186209054091407
In [ ]: