久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,,10倍提速 極致體驗(yàn)

 昵稱43998645 2023-07-26 發(fā)布于上海

前言

你有想過(guò)在 pandas 中直接使用 sql嗎?我知道許多小伙伴已經(jīng)知道一些庫(kù)也可以做到這種體驗(yàn),,不過(guò)他們的性能太差勁了(基于sqlite,,或其他服務(wù)端數(shù)據(jù)庫(kù))。

今天我要介紹另一個(gè)專用于數(shù)據(jù)分析的列式數(shù)據(jù)庫(kù),,性能是其他同體驗(yàn)的庫(kù)的1000倍以上,。可以無(wú)縫接入 pandas ,,做到了性能與使用體驗(yàn)同時(shí)提升,。

這就是今天的主角,duckdb,。


特點(diǎn)

duckdb 是一個(gè)單機(jī)數(shù)據(jù)庫(kù),,你大概率會(huì)用它與 sqlite 比較。

最明顯的區(qū)別就是,,duckdb 是一個(gè)分析數(shù)據(jù)管理系統(tǒng),,而 sqlite 是一個(gè)事務(wù)型關(guān)系數(shù)據(jù)庫(kù),。

這意味著,如果你現(xiàn)在有一大堆數(shù)據(jù)處理任務(wù),,期間無(wú)須顧忌會(huì)有其他用戶插入新數(shù)據(jù)或刪除數(shù)據(jù),。那么 duckdb 就可以非常好應(yīng)對(duì)這種場(chǎng)景,。

對(duì)于我們這種 pandas 老用戶,,duckdb 支持 pandas 的 dataFrame 通用底層格式(parquet/arrow等)上并行運(yùn)行查詢,而且沒(méi)有單獨(dú)的導(dǎo)入步驟,。這就是它能保持使用體驗(yàn)的同時(shí),,大幅提升查詢性能的最大原因。

我們需要安裝這些庫(kù)

pip install pandas duckdb -U

先看一個(gè)例子,,看看它是如何便捷與 dataframe 交互,。


變量等于表名?

首先,,導(dǎo)入今天需要用到的庫(kù)

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,10倍提速 極致體驗(yàn)

我們有一大堆銷售數(shù)據(jù),,加載其中一份數(shù)據(jù)看看:

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,10倍提速 極致體驗(yàn)

此時(shí),,希望使用 sql 做一些數(shù)據(jù)查詢處理,,你認(rèn)為下面的 sql 簡(jiǎn)單嗎?

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,,10倍提速 極致體驗(yàn)
  • 直接使用 dataframe 的變量名作為表名查詢

這真的可以做到嗎?加上一點(diǎn)點(diǎn) duckdb 的調(diào)用即可:

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,,10倍提速 極致體驗(yàn)
  • duckdb.query 做查詢
  • df,把查詢結(jié)果轉(zhuǎn)回 dataframe

也就是,,可以直接使用當(dāng)前環(huán)境下的變量作為表名,。

我知道之前就有其他的庫(kù)可以做到這種體驗(yàn),但是必需強(qiáng)調(diào),,duckdb 是直接使用 dataframe 的內(nèi)存數(shù)據(jù)(因?yàn)榈讓訑?shù)據(jù)格式通用),,因此,這個(gè)過(guò)程中的輸入和輸出數(shù)據(jù)的傳輸時(shí)間幾乎可以忽略不計(jì),。

并且,,這個(gè)過(guò)程中,duckdb比 pandas 更快處理數(shù)據(jù)(多線程),,并且內(nèi)存使用量也比 pandas 要低得多,。

特別在一些需要分組的數(shù)據(jù)處理任務(wù)上,,就算只使用單線程的 duckdb 也會(huì)比 pandas 的快兩倍。如果是過(guò)濾 分組 列投影,,會(huì)存在 5-8倍 的差異,。

如果加上表連接,則可能會(huì)到 15倍 的差異,。

如果使用其他的一些 pandas 使用 sql 的庫(kù),,比如 pandasSql ,它比 duckdb 性能差距 1000倍 以上,!

以上性能對(duì)比指標(biāo),,均是 duckdb 官方說(shuō)明,以后有機(jī)會(huì)實(shí)際操作對(duì)比,。

性能方面,,就'吹'到這里。但是,,我說(shuō) duckdb 有極致的使用體驗(yàn),,不僅僅只是可以直接使用 dataframe 變量名作為表名寫 sql 。而是它提供了許多 sql 引擎沒(méi)有的優(yōu)化語(yǔ)法體驗(yàn),。


sql 的一些語(yǔ)法小痛點(diǎn),,duckdb 也在努力解決

現(xiàn)在我們需要加載所有的銷售數(shù)據(jù)文件,如果使用 pandas 加載,,則是這樣子:

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,10倍提速 極致體驗(yàn)
  • 行3:得到 data 目錄下所有 csv 的文件路徑
  • 行2:使用 pandas 加載

duckdb提供了許多方便的內(nèi)置函數(shù):

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,,10倍提速 極致體驗(yàn)
  • 行3:表名可以直接是本地的文件。同時(shí)還支持通配符

默認(rèn)情況下,,duckdb 會(huì)把 csv 的第一行也加入到記錄中:

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,10倍提速 極致體驗(yàn)

可以使用內(nèi)置函數(shù),,通過(guò)參數(shù)設(shè)定一些加載規(guī)則:

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,10倍提速 極致體驗(yàn)
  • 行4: read_csv_auto 可以設(shè)置具體加載文件時(shí)的設(shè)定

不過(guò),,這個(gè) header 參數(shù)其實(shí)是加載所有數(shù)據(jù)之后,,再設(shè)置第一行為表頭。所以會(huì)看到實(shí)際數(shù)據(jù)仍然有一些表頭行:

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,,10倍提速 極致體驗(yàn)

我們可以直接在條件過(guò)濾中一步到位過(guò)濾掉無(wú)用的行:

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),與pandas結(jié)合,,10倍提速 極致體驗(yàn)

此時(shí),,我們可以隨時(shí)切換使用方式,。


sql 中有一些語(yǔ)句在特定場(chǎng)景下,會(huì)顯得'無(wú)意義',。比如我希望查詢所有的列:

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,10倍提速 極致體驗(yàn)

每次都寫一句 select * ,,有點(diǎn)麻煩,。在 duckdb 里面,我們可以直接省略 select 語(yǔ)句,。

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,,10倍提速 極致體驗(yàn)

有時(shí)候,,我們希望排除某幾列,可以這么寫:

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,,10倍提速 極致體驗(yàn)
  • 行2:使用 * exclude ,里面指定你希望排除的列名即可,。注意,,因?yàn)橛幸恍┝忻锌崭瘢阈枰秒p引號(hào)或單引號(hào)包圍

這些功能都得益于它基于的列式數(shù)據(jù)儲(chǔ)存方式,。

再看幾個(gè)小小的 sql 體驗(yàn)改進(jìn),。

別名用在過(guò)濾條件中:

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),與pandas結(jié)合,,10倍提速 極致體驗(yàn)

自動(dòng)識(shí)別分組列名:

python數(shù)據(jù)分析專用數(shù)據(jù)庫(kù),,與pandas結(jié)合,10倍提速 極致體驗(yàn)

它還有許多有意思的特性,,如果希望我后續(xù)做更多的教學(xué),,評(píng)論區(qū)告訴我。

duckdb 是一個(gè)很有潛力的數(shù)據(jù)分析處理工具,,結(jié)合 pandas 能否大幅提升我們的工作效率,,值得大家嘗試使用。

不要忘記一鍵三連,。你的點(diǎn)贊,、收藏、關(guān)注,,是我創(chuàng)作的動(dòng)力,。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多