- vừa được xem lúc

Pandas, Dask và Datatable - Package nào hiệu quả và hữu ích hơn?

0 0 22

Người đăng: Pham Thi Hong Anh

Theo Viblo Asia

Khi nhắc đến xử lý dữ liệu bảng thì đa số chúng ta sẽ lựa chọn Pandas để đọc và thao tác với dữ liệu, và mình cũng không ngoại lệ. Tuy nhiên, mình vừa đọc được một bài viết khá là hay để xem xem liệu rằng Pandas có phải là lựa chọn tốt nhất không? Ở bài viết này chúng ta sẽ cùng so sánh hiệu suất của các package: Pandas, Dask, Datatable.

Pandas

Pandas là một thư viện của Python được mọi người sử dụng rất nhiều, đặc biệt khi dùng để thao tác với các dạng dữ liệu bảng biểu, vừa nhanh chóng, đơn giản và cũng dễ dùng. Tuy nhiên nếu sử dụng file csv lớn thì sẽ rất tốn rất nhiều thời gian. Ở bài viết này mình sẽ không đề cập đến Pandas nhiều vì Pandas quá phổ biến và hữu ích.

Dask

Dask được sinh ra dùng để đọc file csv lớn - một vấn đề mà pandas gặp phải. Dask là một thư viện mã nguồn mở cung cấp tính năng song song linh hoạt, nâng cao cho tính toán phân tích. Nó nguyên bản chia tỷ lệ các package phân tích này thành các máy đa lõi và các cụm phân tán bất cứ khi nào cần. Khung dữ liệu của dask sử dụng API của Pandas, giúp mọi thứ trở nên cực kỳ dễ dàng đối với những người sử dụng và yêu thích Pandas.

Datatable

Datatable là một thư viện khác của Python tập trung vào cải thiện hiệu suất, mong muốn xử lý dữ liệu lớn (100GB) với tốc độ tối đa ở trên 1 máy,. Trong khi đó, khả năng tưởng tác của Datatable và Pandas/Numpy cung cấp khả năng chuyển đổi tới một framework xử lý data khác một cách dễ dàng.

So Sánh

Ok. Bây giờ chúng ta cùng nhau thử dùng code để so sánh tốc độ xử lý của 3 thư viện này trực quan hơn nhé.

Đọc file csv

import pandas as pd
import dask.dataframe as dd
import datatable as dt
import matplotlib.pyplot as plt

Kiểm tra thời gian đọc của pandas, dask và datatable

Pandas

%%time
df = pd.read_csv("na_filled (1).csv")
type(df)

dask

%%time
df = dd.read_csv("na_filled (1).csv")
type(df)

datatable

%%time
df = dt.fread("na_filled (1).csv")
type(df)

Kết quả

Hình ảnh: thời gian chạy

show biểu đồ lên nhìn cho rõ nào.

fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.set_ylabel('ms')
ax.set_title('Speed of reading single csv file (4.7MB)')
lib = ['pandas', 'dask', 'datatable']
perf = [67.1,11.3,39.7]
ax.bar(lib,perf)
plt.show()

Hình ảnh: biểu đồ

Như ở 2 hình trên chúng ta có thể dễ dàng thấy được rằng thời gian đọc file của Dask nhanh hơn hẳn so với Pandas và Datatable. Datatable nhanh hơn Pandas 1 ít thời gian.

Đọc nhiều file cùng một lúc

Vì quá lười thêm nhiều file nên mình đọc luôn 4 file ở trên cùng 1 lúc =)))

pandas

%%time
files = ["na_filled (1).csv", "na_filled (1).csv", "na_filled (1).csv", "na_filled (1).csv"]
combined = []
for f in files: combined.append(pd.read_csv(f))
combined_df = pd.concat(combined,ignore_index=True)

dask

%%time
df = dd.read_csv(files)

datatable

%%time
df = dt.iread(files)
df = dt.rbind(df)
df = df.to_pandas()

Kết quả

Hình ảnh: thời gian chạy nhiều file

Plot lên cho trực quan hơn nè.

fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.set_ylabel('s')
ax.set_title('Speed of reading multiple csv files')
lib = ['pandas', 'dask', 'datatable']
perf = [87,21,140]
ax.bar(lib,perf)
plt.show()

Hình: Biểu đồ

Nhìn vào 2 hình trên thì Dask vẫn nhanh nhất (như mình có nói ở trên đối với dữ liệu csv lớn thì Dask rất hiệu quả) , tuy nhiên khi chạy nhiều file thì Pandas lại đọc nhanh hơn datatable.

Kết luận

Như mình có đề cập ở trên thư viện Dask rất tiện với file csv lớn mà thư viện Pandas khó xử lý, tuy nhiên mình lại không có dữ liệu lớn như vậy để đọc ở đây 😦. Nếu dữ liệu csv hay excel lớn quá mà bạn không thể đọc được thì nghĩ ngay tới Dask nhé. Đối với Datatable thì khi bạn có dữ liệu khoảng 100GB thì dùng sẽ hiệu qủa hơn ạ.

Nếu làm việc với dữ liệu bình thường hoặc để phục vụ nghiên cứu hay học tập thì Pandas vẫn là lựa chọn tốt nhất, hữu ích nhất và lý tưởng nhất và quan trọng là cực kì dễ dùng cũng như có nhiều nguồn để tham khảo. Bởi vì lượng người dùng của Pandas rất nhiều.

Cuối cùng mình xin cảm ơn các bạn đã đọc hết bài viết của mình. Chúc các có bạn một kì nghỉ lễ VUI Vẻ ạ. Upvote cho mình nha ❤️ ❤️ ❤️.

Reference

[1] https://towardsdatascience.com/pandas-vs-dask-vs-datatable-a-performance-comparison-for-processing-csv-files-3b0e0e98215e

[2] https://mungingdata.com/pandas/read-multiple-csv-pandas-dataframe/

Bình luận

Bài viết tương tự

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 3)

Tiếp tục phần 2 của series Pandas DataFrame nào. Let's go!!. Ở phần trước, các bạn đã biết được cách lấy dữ liệu một row hoặc column trong Pandas DataFame rồi phải không nào. 6 Hoc.

0 0 45

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 2)

Nào, chúng ta cùng đến với phần 2 của series Pandas DataFrame. Truy xuất Labels và Data. Bạn đã biết cách khởi tạo 1 DataFrame của mình, và giờ bạn có thể truy xuất thông tin từ đó. Với Pandas, bạn có thể thực hiện các thao tác sau:.

0 0 77

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 1)

Pandas DataFrame là một cấu trúc chứa dữ liệu hai chiều và các nhãn tương ứng của nó. DataFrames được sử dụng rộng rãi trong data science, machine learning, scientific computing và nhiều lĩnh vực sử dụng nhiều dữ liệu khác.

0 0 18

- vừa được xem lúc

Buổi hẹn hò đầu tiên với bộ dữ liệu, chúng ta nên làm gì?

Khi có một bộ dữ liệu trong tay, phần lớn những newbie (trong đó có cả mình) sẽ nghĩ tới việc bắt tay vào mô hình hoá, tính toán, phân tích, thậm chí bê nguyên các model machine learning vào để predic

0 0 20

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 7)

Làm việc với Time Series trong Pandas. Pandas thật sự vượt trội trong việc xử lý với Time Series.

0 0 25

- vừa được xem lúc

[Python Library Series] Pandas Tutorial for Beginners Part 1

Pandas là thư viện rất quan trọng đối với các lập trình viên Python hiện nay. Thư viện này được ví như backbone của hầu hết các dự án dữ liệu. . Note:.

0 0 32