本文完整程式碼及附件已上傳至我的
Github
倉庫https://github.com/CNFeffery/DataScienceStudyNotes
1 簡介
大家好我是費老師,就在幾天前,經過六年多的持續開發迭代,著名的開源高效能分析型資料庫DuckDB
釋出了其1.0.0
正式版本。
DuckDB
具有極強的單機資料分析效能表現,功能豐富,具有諸多擴充外掛,且除了預設的SQL
查詢方式外,還非常友好地支援在Python
、R
、Java
、Node.js
等語言環境下使用,特別是在Python
中使用非常的靈活方便,今天的文章,費老師我就將帶大家一起快速瞭解DuckDB
在Python
中的常見使用姿勢😎~
2 DuckDB在Python中的使用
DuckDB
的定位是嵌入式關係型資料庫,在Python
中安裝起來非常的方便,以當下最主流的開源Python
環境管理工具mamba
為例,直接在終端中執行下列命令,我們就一步到位的完成了對應演示虛擬環境的建立,並在環境中完成了python-duckdb
、jupyterlab
、pandas
、polars
等相關分析工具的安裝:
mamba create -n duckdb-demo python=3.9 -y && mamba activate duckdb-demo && mamba install python-duckdb jupyterlab pandas polars pyarrow -y
2.1 資料集的匯入
2.1.1 直接匯入檔案
作為一款資料分析工具,能夠方便靈活的匯入各種格式的資料非常重要,DuckDB
預設可直接匯入csv
、parquet
、json
等常見格式的檔案,我們首先使用下列程式碼生成具有五百萬行記錄的簡單示例資料,並分別匯出為csv
和parquet
格式進行比較:
# 利用pandas生成示例資料檔案
import numpy as np
import pandas as pd
generated_df = pd.DataFrame(
{
'類別': np.random.choice(list('ABCDEF'), 1000000),
'數值': np.round(np.random.uniform(0, 1000000, 1000000), 3)
}
)
# 分別匯出為csv、parquet格式
generated_df.to_csv('./demo_data.csv', index=False)
generated_df.to_parquet('./demo_data.parquet')
針對兩種格式的檔案,分別比較預設情況下DuckDB
、pandas
、polars
的讀取速度:
csv
格式
parquet
格式
可以看到,無論是對比pandas
還是polars
,DuckDB
的檔案讀取效能都是大幅領先甚至碾壓級的⚡。
除此之外,DuckDB
也可以透過SQL
語句的方式進行等價操作:
2.1.2 讀取其他框架的資料物件
除了預設可直接讀取少數幾種常見資料格式外,DuckDB
在Python
中還支援直接以執行SQL
語句的方式,直接讀取pandas
、polars
等框架中的資料框,這一點可太強大了,意味著只要是pandas
、polars
等框架可以讀取的格式,DuckDB
都可以直接“拿來吧你”🤣:
2.2 執行分析運算
DuckDB
作為一款關係型資料庫,其執行分析運算最直接的方式就是寫SQL
,針對DuckDB
預設讀取到記憶體中的物件(DuckDB
中稱作關係):
我們可以透過duckdb.sql()
直接將關係當作表名,書寫SQL
語句進行查詢分析,下面是一些簡單的例子:
比較一下與pandas
、polars
之間執行相同任務的耗時差異,DuckDB
依舊是碾壓級的存在👍:
2.3 計算結果轉換
DuckDB
預設自帶的檔案寫出介面比較少,依舊是隻針對csv
、parquet
等主流格式具有相應的write_parquet()
、write_csv()
可以直接匯出檔案,但是針對Python
,DuckDB
提供了多樣化的資料轉換介面,可以快捷高效地將計算結果轉換為Python
物件、pandas
資料框、polars
資料框、numpy
陣列等常用格式:
基於此,就不用擔心透過DuckDB
計算的資料結果不好匯出為其他各種格式檔案了~
如果你恰好需要轉出為csv
、parquet
等格式,那麼直接使用DuckDB
的檔案寫出介面,效能依舊是非常強大的:
csv
格式
parquet
格式
更多有關DuckDB
在Python
中應用的內容,請移步官方文件(https://duckdb.org/docs/api/python/overview
),費老師我也會在之後持續的分享DuckDB
相關教程文章,歡迎持續關注,一起來熟練掌握這款資料分析利器😉。
以上就是本文的全部內容,歡迎在評論區與我們進行討論~