Недавно я изучал Dask и слышал, что он эффективен для памяти и быстрее, чем pandas.
Возможно, он эффективен для памяти, но простой сравнительный анализ дает мне меньшую скорость работы для dask, чем pandas.
Qn: КАК УВЕЛИЧИТЬ СКОРОСТЬ В РАБОТЕ?
Вот настройка:
import numpy as np
import pandas as pd
import dask
import dask.dataframe as dd
import dask.array as da
import time
import seaborn as sns
df = sns.load_dataset('titanic')
df = df = pd.concat([df for _ in range(100)])
print(df.shape)
df.head(2)
def benchmark(func):
start = time.time()
func()
end = time.time()
print("{0:.4f} seconds for {1}".format((end - start), func.__name__))
ddf = dd.from_pandas(df,npartitions=8)
def get_mean():
return df['fare'].mean()
def get_mean_dask():
return ddf['fare'].mean().compute()
def get_max():
return df['fare'].max()
def get_max_dask():
return ddf['fare'].max().compute()
def get_sum():
return df['fare'].sum()
def get_sum_dask():
return ddf['fare'].sum().compute()
def get_filter():
return df[df['fare'] > 10.0]
def get_filter_dask():
return ddf[ddf['fare'] > 10.0].compute()
Тестирование dask vs pandas
for i,func in enumerate([get_mean, get_mean_dask,
get_max, get_max_dask,
get_sum, get_sum_dask,
get_filter, get_filter_dask]):
benchmark(func)
if (i+1) %2 == 0:
print()
Результаты
0.0007 seconds for get_mean
0.0105 seconds for get_mean_dask
0.0006 seconds for get_max
0.0054 seconds for get_max_dask
0.0006 seconds for get_sum
0.0055 seconds for get_sum_dask
0.0022 seconds for get_filter
0.0438 seconds for get_filter_dask