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 帶來了多重優勢,值得鼓勵大家嘗試並採用:
- 極佳的性能: DuckDB 在處理大型數據集時表現出色,它的查詢速度比 Pandas 更快,這意味著您可以更迅速地進行數據分析和處理。
- 保持易讀性: 雖然需要一些對SQL語法的習慣,但DuckDB 提供了易讀性較好的SQL查詢,使您可以更輕鬆地理解和編寫複雜的數據操作。
- 適用於大數據: 對於需要處理大量數據的任務,DuckDB 是一個強大的選擇,它可以處理龐大的數據集而不會降低性能。
- SQL支持: DuckDB 支持標準的SQL語法,這使得它易於與現有的數據庫工具和流程集成。
總之,DuckDB 提供了一個高效且強大的數據處理解決方案,無論您是處理大數據還是希望提高數據操作的效率,都值得考慮使用 DuckDB。嘗試 DuckDB 可能會讓您在數據科學領域取得更卓越的成就。