<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          全平臺(tái)都能用的 pandas 運(yùn)算加速神器

          共 2101字,需瀏覽 5分鐘

           ·

          2020-08-26 02:58

          閱讀本文大概需要 3 分鐘。


          1 簡(jiǎn)介

          隨著其功能的不斷優(yōu)化與擴(kuò)充,pandas已然成為數(shù)據(jù)分析領(lǐng)域最受歡迎的工具之一,但其仍然有著一個(gè)不容忽視的短板——難以快速處理大型數(shù)據(jù)集,這是由于pandas中的工作流往往是建立在單進(jìn)程的基礎(chǔ)上,使得其只能利用單個(gè)處理器核心來(lái)實(shí)現(xiàn)各種計(jì)算操作,這就使得pandas在處理百萬(wàn)級(jí)、千萬(wàn)級(jí)甚至更大數(shù)據(jù)量時(shí),出現(xiàn)了明顯的性能瓶頸。

          本文要介紹的工具modin就是一個(gè)致力于在改變代碼量最少的前提下,調(diào)用起多核計(jì)算資源,對(duì)pandas的計(jì)算過(guò)程進(jìn)行并行化改造的Python庫(kù),并且隨著其近期的一系列內(nèi)容更新,modin基于Dask開(kāi)始對(duì)Windows系統(tǒng)同樣進(jìn)行了支持,使得我們只需要改變一行代碼,就可以在所有平臺(tái)上獲得部分pandas功能可觀的計(jì)算效率提升。

          圖1

          2 基于 modin 的 pandas 運(yùn)算加速

          modin支持?WindowsLinux以及Mac系統(tǒng),其中LinuxMac平臺(tái)版本的modin工作時(shí)可基于并行運(yùn)算框架RayDask,而Windows平臺(tái)版本目前只支持?Dask??作為計(jì)算后端(因?yàn)?code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">Ray沒(méi)有?Win?版本),安裝起來(lái)十分方便,可以用如下3種命令來(lái)安裝具有不同后端的?modin

          pip install modin[dask] # 安裝dask后端
          pip install modin[ray] # 安裝ray后端(windows不支持)
          pip install modin[all] # 推薦方式,自動(dòng)安裝當(dāng)前系統(tǒng)支持的所有后端

          本文在Win10系統(tǒng)上演示modin的功能,執(zhí)行命令:

          pip?install?modin[all]

          成功安裝modin+dask之后,在使用modin時(shí),只需要將我們習(xí)慣的import pandas as pd變更為import modin.pandas as pd即可,接下來(lái)我們來(lái)看一下在一些常見(jiàn)功能上,pandasVSmodin性能差異情況。

          首先我們分別使用pandasmodin讀入一個(gè)大小為1.1G的csv文件esea_master_dmg_demos.part1.csv,來(lái)自kaggle(https://www.kaggle.com/skihikingkevin/csgo-matchmaking-damage/data),記錄了關(guān)于熱門(mén)游戲CS:GO的一些玩家行為數(shù)據(jù),因?yàn)轶w積過(guò)大,請(qǐng)感興趣的讀者朋友自行去下載:

          圖2

          為了區(qū)分他們,在導(dǎo)入時(shí)暫時(shí)將modin.pandas命名為mpd

          圖3

          可以看到因?yàn)槭?code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">Win平臺(tái),所以使用的計(jì)算后端為Dask,首先我們來(lái)分別讀入文件查看耗時(shí):

          圖4

          借助jupyter notebook記錄計(jì)算時(shí)間的插件,可以看到原生的pandas耗時(shí)14.8秒,而modin只用了5.32秒,接著我們?cè)賮?lái)試試concat操作:

          圖5

          可以看到在pandas花了8.78秒才完成任務(wù)的情況下,modin僅用了 0.174 秒,取得了驚人的效率提升。接下來(lái)我們?cè)賮?lái)執(zhí)行常見(jiàn)的檢查每列缺失情況的任務(wù):

          圖6

          這時(shí)耗時(shí)差距雖然不如?concat操作時(shí)那么巨大,也是比較可觀的,但是?modin畢竟是一個(gè)處于快速開(kāi)發(fā)迭代階段的工具,其針對(duì)?pandas的并行化改造尚未覆蓋全部的功能,譬如分組聚合功能。

          對(duì)于這部分功能,modin會(huì)在執(zhí)行代碼時(shí)檢查自己是否支持,對(duì)于尚未支持的功能?modin會(huì)自動(dòng)切換到?pandas單核后端來(lái)執(zhí)行運(yùn)算,但由于?modin中組織數(shù)據(jù)的形式與?pandas不相同,所以中間需要經(jīng)歷轉(zhuǎn)換:

          圖7

          這種時(shí)候?modin的運(yùn)算反而會(huì)比?pandas慢很多:

          圖8

          因此我對(duì)?modin持有的態(tài)度是在處理大型數(shù)據(jù)集時(shí),部分應(yīng)用場(chǎng)景可以用其替換?pandas,即其已經(jīng)完成可靠并行化改造的?pandas功能,你可以在官網(wǎng)對(duì)應(yīng)界面(https://modin.readthedocs.io/en/latest/supported_apis/index.html )查看其已經(jīng)支持及尚未良好支持的功能,,因?yàn)?code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);"> modin還處于快速開(kāi)發(fā)階段,很多目前無(wú)法支持的功能也許未來(lái)不久就會(huì)被加入?modin

          圖9

          以上就是本文的全部?jī)?nèi)容,如有疑問(wèn)歡迎在評(píng)論區(qū)與我討論。

          -END-


          本文示例代碼于Github倉(cāng)庫(kù)https://github.com/CNFeffery/DataScienceStudyNotes


          推薦閱讀

          1

          30 個(gè)極簡(jiǎn) Python 代碼,拿走即用

          2

          用“講故事”的方式,帶你認(rèn)識(shí) Python 編碼問(wèn)題的起源和發(fā)展!

          3

          市面上好用的 Markdown 編輯器,我給你整理好了

          4??

          什么是 Docker?看這一篇干貨文章就夠了!




          崔慶才

          靜覓博客博主,《Python3網(wǎng)絡(luò)爬蟲(chóng)開(kāi)發(fā)實(shí)戰(zhàn)》作者

          隱形字

          個(gè)人公眾號(hào):進(jìn)擊的Coder

          長(zhǎng)按識(shí)別二維碼關(guān)注





          瀏覽 76
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美性爱AAA | 黄色免费网站在线 | 国产真人少妇内射 | 俺来也AV| 97视频自拍 |