日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Python數據分析專用數據庫,與pandas結合,10倍提速+極致體驗

來源: 責編: 時間:2023-12-11 09:28:45 228觀看
導讀你有想過在 pandas 中直接使用 sql嗎?我知道許多小伙伴已經知道一些庫也可以做到這種體驗,不過他們的性能太差勁了(基于sqlite,或其他服務端數據庫)。今天我要介紹另一個專用于數據分析的列式數據庫,性能是其他同體驗的庫

你有想過在 pandas 中直接使用 sql嗎?我知道許多小伙伴已經知道一些庫也可以做到這種體驗,不過他們的性能太差勁了(基于sqlite,或其他服務端數據庫)。W9P28資訊網——每日最新資訊28at.com

今天我要介紹另一個專用于數據分析的列式數據庫,性能是其他同體驗的庫的1000倍以上。可以無縫接入 pandas ,做到了性能與使用體驗同時提升。W9P28資訊網——每日最新資訊28at.com

這就是今天的主角,duckdb。W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

特點

duckdb 是一個單機數據庫,你大概率會用它與 sqlite 比較。W9P28資訊網——每日最新資訊28at.com

最明顯的區別就是,duckdb 是一個分析數據管理系統,而 sqlite 是一個事務型關系數據庫。W9P28資訊網——每日最新資訊28at.com

這意味著,如果你現在有一大堆數據處理任務,期間無須顧忌會有其他用戶插入新數據或刪除數據。那么 duckdb 就可以非常好應對這種場景。W9P28資訊網——每日最新資訊28at.com

對于我們這種 pandas 老用戶,duckdb 支持 pandas 的 dataFrame 通用底層格式(parquet/arrow等)上并行運行查詢,而且沒有單獨的導入步驟。這就是它能保持使用體驗的同時,大幅提升查詢性能的最大原因。W9P28資訊網——每日最新資訊28at.com

我們需要安裝這些庫 :W9P28資訊網——每日最新資訊28at.com

pip install pandas duckdb -U

先看一個例子,看看它是如何便捷與 dataframe 交互。W9P28資訊網——每日最新資訊28at.com

變量等于表名?

首先,導入今天需要用到的庫:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

我們有一大堆銷售數據,加載其中一份數據看看:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

此時,希望使用 sql 做一些數據查詢處理,你認為下面的 sql 簡單嗎?W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

(1) 直接使用 dataframe 的變量名作為表名查詢W9P28資訊網——每日最新資訊28at.com

這真的可以做到嗎?加上一點點 duckdb 的調用即可:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

(2) duckdb.query 做查詢W9P28資訊網——每日最新資訊28at.com

(3) df,把查詢結果轉回 dataframeW9P28資訊網——每日最新資訊28at.com

也就是,可以直接使用當前環境下的變量作為表名。W9P28資訊網——每日最新資訊28at.com

我知道之前就有其他的庫可以做到這種體驗,但是必需強調,duckdb 是直接使用 dataframe 的內存數據(因為底層數據格式通用),因此,這個過程中的輸入和輸出數據的傳輸時間幾乎可以忽略不計。W9P28資訊網——每日最新資訊28at.com

并且,這個過程中,duckdb比 pandas 更快處理數據(多線程),并且內存使用量也比 pandas 要低得多。W9P28資訊網——每日最新資訊28at.com

特別在一些需要分組的數據處理任務上,就算只使用單線程的 duckdb 也會比 pandas 的快兩倍。如果是過濾+分組+列投影,會存在 5-8倍 的差異。W9P28資訊網——每日最新資訊28at.com

如果加上表連接,則可能會到 15倍 的差異。W9P28資訊網——每日最新資訊28at.com

如果使用其他的一些 pandas 使用 sql 的庫,比如 pandasSql ,它比 duckdb 性能差距 1000倍 以上!W9P28資訊網——每日最新資訊28at.com

以上性能對比指標,均是 duckdb 官方說明,以后有機會實際操作對比。W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

性能方面,就"吹"到這里。但是,我說 duckdb 有極致的使用體驗,不僅僅只是可以直接使用 dataframe 變量名作為表名寫 sql 。而是它提供了許多 sql 引擎沒有的優化語法體驗。W9P28資訊網——每日最新資訊28at.com

sql 的一些語法小痛點,duckdb 也在努力解決

現在我們需要加載所有的銷售數據文件,如果使用 pandas 加載,則是這樣子:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

  • 行3:得到 data 目錄下所有 csv 的文件路徑
  • 行2:使用 pandas 加載

duckdb提供了許多方便的內置函數:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

  • 行3:表名可以直接是本地的文件。同時還支持通配符

默認情況下,duckdb 會把 csv 的第一行也加入到記錄中:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

可以使用內置函數,通過參數設定一些加載規則:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

  • 行4: read_csv_auto 可以設置具體加載文件時的設定

不過,這個 header 參數其實是加載所有數據之后,再設置第一行為表頭。所以會看到實際數據仍然有一些表頭行:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

我們可以直接在條件過濾中一步到位過濾掉無用的行:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

此時,我們可以隨時切換使用方式。W9P28資訊網——每日最新資訊28at.com

sql 中有一些語句在特定場景下,會顯得"無意義"。比如我希望查詢所有的列:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

每次都寫一句 select * ,有點麻煩。在 duckdb 里面,我們可以直接省略 select 語句。W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

有時候,我們希望排除某幾列,可以這么寫:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

  • 行2:使用 * exclude ,里面指定你希望排除的列名即可。注意,因為有一些列名有空格,你需要用雙引號或單引號包圍

這些功能都得益于它基于的列式數據儲存方式。W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

再看幾個小小的 sql 體驗改進。W9P28資訊網——每日最新資訊28at.com

別名用在過濾條件中:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

自動識別分組列名:W9P28資訊網——每日最新資訊28at.com

W9P28資訊網——每日最新資訊28at.com

它還有許多有意思的特性,如果希望我后續做更多的教學,評論區告訴我。W9P28資訊網——每日最新資訊28at.com

duckdb 是一個很有潛力的數據分析處理工具,結合 pandas 能否大幅提升我們的工作效率,值得大家嘗試使用。W9P28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-41716-0.htmlPython數據分析專用數據庫,與pandas結合,10倍提速+極致體驗

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 五個令人驚嘆的Jupyter黑科技

下一篇: 數據加密難做?試試這個庫

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 兰州市| 许昌县| 巫山县| 文山县| 上栗县| 河南省| 永春县| 西丰县| 岳普湖县| 横山县| 利辛县| 景东| 深圳市| 芜湖市| 甘洛县| 友谊县| 丹江口市| 玛多县| 盐城市| 丽江市| 延庆县| 新田县| 凤庆县| 万盛区| 尼木县| 新源县| 乌兰县| 威远县| 喀喇沁旗| 鱼台县| 长泰县| 泰和县| 福安市| 巴马| 万山特区| 威海市| 来宾市| 龙南县| 玛曲县| 杭州市| 吉安市|