2023 11 27 Duckdb

不要再用 Pandas 了!DuckDB 是更好的選擇!

Python 數據工具的新競爭者

在數據科學領域,Python 的 pandas 工具一直佔據著主導地位,提供了強大的數據處理能力。然而,DuckDB,作為一個新興的數據庫解決方案,以其優異的查詢性能和SQL語法的支持引起了關注。更重要的是,DuckDB不僅比 pandas 更快,還能夠在 Python 中保持資料的 pandas Dataframe型態!本文將對比這兩種工具在不同數據操作方面的性能。

安裝指南:設置您的數據分析環境

要開始使用 pandas 和 DuckDB,首先需要安裝這些庫。這可以通過 Python 的 pip 包管理器輕鬆完成:

pip install pandas duckdb

這樣,您就在你的 Python 環境中安裝好了兩種強大的數據分析工具囉!

功能對比:Pandas與DuckDB的特點

Pandas 是一個廣泛使用的數據分析庫,在 Python 當中以其易用性和靈活性而聞名。

它特別適合於複雜的數據處理和轉換任務。相比之下,DuckDB 是一個嵌入式的 OLAP 數據庫,專為快速數據查詢和分析而設計,特別適用於處理大型數據集。

讀取性能測試:實際代碼示

為了比較這兩個工具的性能,我們將進行一個簡單的數據操作,MovieLens 250MB 的公開資料集進行測試。以下是一個基本的性能測試代碼示例:

路徑設定

import pandas as pd
import duckdb
import time

# 記得改成自己的資料路徑
file_path = "/Users/cailizhong/Downloads/ml-25m/ratings.csv" 

Pandas 讀取速度

%time
df_pandas = pd.read_csv(file_path)  # 將 CSV 文件讀進 DuckDB 中

df_pandas                           # 顯示 DataFrame

CPU times: user 2 µs, sys: 1e+03 ns, total: 3 µs

Wall time: 4.77 µs

DuckDB 讀取速度

%time
# 開始連線到 DuckDB
conn = duckdb.connect(database=':memory:')   

# 將 CSV 文件讀進 DuckDB 中                           
conn.execute(f"CREATE TABLE ratings AS SELECT * FROM read_csv_auto('{file_path}')")

# 將 DuckDB 用 Pandas DataFrame 讀取
df_duckdb = conn.execute("SELECT * FROM ratings").fetchdf()
                      
# 結束連線到 DuckDB
conn.close()                                                                        

# 顯示 DataFrame
df_duckdb                                                               

CPU times: user 2 µs, sys: 1e+03 ns, total: 3 µs

Wall time: 4.77 µs

資料型態更改性能測試:實際代碼示

Pandas 讀取速度

%time
df_pandas2 = df_pandas.groupby('userId')['movieId'].nunique().reset_index(name='count').sort_values('count', ascending=False)
df_pandas2

CPU times: user 2 µs, sys: 1 µs, total: 3 µs

Wall time: 4.77 µs

DuckDB 速度

%time
Query = '''
SELECT userId, COUNT(distinct movieId) AS count 
FROM df_duckdb 
GROUP BY userId
ORDER BY count DESC
'''

df_duckdb2 = duckdb.query(Query).to_df()
df_duckdb2

CPU times: user 1e+03 ns, sys: 0 ns, total: 1e+03 ns

Wall time: 2.15 µs

很明顯可以看到無論在哪一種時間,DuckDB 的速度皆比 Pandas 快,而且當使用更大的資料時,DuckDB 會有更顯著的優勢。

結論

DuckDB 帶來了多重優勢,值得鼓勵大家嘗試並採用:

  1. 極佳的性能: DuckDB 在處理大型數據集時表現出色,它的查詢速度比 Pandas 更快,這意味著您可以更迅速地進行數據分析和處理。
  2. 保持易讀性: 雖然需要一些對SQL語法的習慣,但DuckDB 提供了易讀性較好的SQL查詢,使您可以更輕鬆地理解和編寫複雜的數據操作。
  3. 適用於大數據: 對於需要處理大量數據的任務,DuckDB 是一個強大的選擇,它可以處理龐大的數據集而不會降低性能。
  4. SQL支持: DuckDB 支持標準的SQL語法,這使得它易於與現有的數據庫工具和流程集成。

總之,DuckDB 提供了一個高效且強大的數據處理解決方案,無論您是處理大數據還是希望提高數據操作的效率,都值得考慮使用 DuckDB。嘗試 DuckDB 可能會讓您在數據科學領域取得更卓越的成就。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *