Nhảy tới nội dung

Tối ưu hóa tốc độ lặp

So sánh các phương pháp lặp​


def vectorizer(df):
prices = df['Item_Outlet_Sales'] * 0.5

def applyer(df):
prices = df['Item_Outlet_Sales'].apply(lambda x: x * 0.5)

def iterrows(df):
prices = []
for i, row in df.iterrows():
prices.append(row['Item_Outlet_Sales'] * 0.5)

def itertuples1(df):
prices = []
for row in df.itertuples():
prices.append(row.Item_Outlet_Sales * 0.5)

def itertuples2(df):
prices = []
for row in df.itertuples(index=False, name=None):
prices.append(row[5] * 0.5)
%timeit -n 10 vectorizer(df)
80.1 µs ± 42.8 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit -n 10 applyer(df)
1.37 ms ± 112 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit -n 10 iterrows(df)
256 ms ± 2.48 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit -n 10 itertuples1(df)
6.61 ms ± 200 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit -n 10 itertuples2(df)
3.91 ms ± 132 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

Xử lý song song trong pandas​

Xử lý song song là phương pháp tận dụng số lượng core của CPU để giải quyết vấn đề trong thời gian ngắn hơn.

pandarallel​

Để cài đặt pandarallel bằng pip

pip install pandarallel

Cách sử dụng

from pandarallel import pandarallel
pandarallel.initialize(progress_bar=True, n_workers=4)

Để thiết lập cho pandarallel ta dùng .initialize. Trong đó:

  • n_workers: là số lượng cores của CPU

  • progress_bar: show tiến trình

Để áp dụng pandarallel ta chỉ việc thay thế .apply bằng .parallel_apply

# df.apply(func)
df.parallel_apply(func)

Dask​

Dask là một thư viện tính toán song song cho Python.

Để cài đặt dask bằng pip

pip install dask

Cách sử dụng

import dask.dataframe as dd
dd.read_csv('data/big_mart_sales.csv')