本文示例代碼已上傳至個人
Github
倉庫https://github.com/CNFeffery/DataScienceStudyNoteshtml
隨着其功能的不斷優化與擴充,pandas
已然成爲數據分析領域最受歡迎的工具之一,但其仍然有着一個不容忽視的短板——難以快速處理大型數據集,這是因爲pandas
中的工做流每每是創建在單進程的基礎上,使得其只能利用單個處理器核心來實現各類計算操做,這就使得pandas
在處理百萬級、千萬級甚至更大數據量時,出現了明顯的性能瓶頸。git
本文要介紹的工具modin
就是一個致力於在改變代碼量最少的前提下,調用起多核計算資源,對pandas
的計算過程進行並行化改造的Python
庫,而且隨着其近期的一系列內容更新,modin
基於Dask
開始對Windows
系統一樣進行了支持,使得咱們只須要改變一行代碼,就能夠在全部平臺上得到部分pandas
功能可觀的計算效率提高。github
modin
支持Windows
、Linux
以及Mac
系統,其中Linux
與Mac
平臺版本的modin
工做時可基於並行運算框架Ray
和Dask
,而Windows
平臺版本目前只支持Dask
做爲計算後端(由於Ray
沒有Win
版本),安裝起來十分方便,能夠用以下3種命令來安裝具備不一樣後端的modin
:windows
pip install modin[dask] # 安裝dask後端 pip install modin[ray] # 安裝ray後端(windows不支持) pip install modin[all] # 推薦方式,自動安裝當前系統支持的全部後端
本文在Win10
系統上演示modin
的功能,執行命令:後端
pip install modin[all]
成功安裝modin
+dask
以後,在使用modin
時,只須要將咱們習慣的import pandas as pd
變動爲import modin.pandas as pd
便可,接下來咱們來看一下在一些常見功能上,pandas
VSmodin
性能差別狀況,首先咱們分別使用pandas
和modin
讀入一個大小爲1.1G的csv
文件esea_master_dmg_demos.part1.csv
,來自kaggle
(https://www.kaggle.com/skihikingkevin/csgo-matchmaking-damage/data),記錄了關於熱門遊戲CS:GO
的一些玩家行爲數據,由於體積過大,請感興趣的讀者朋友自行去下載:api
爲了區分他們,在導入時暫時將modin.pandas
命名爲mpd
:bash
能夠看到由於是Win
平臺,因此使用的計算後端爲Dask
,首先咱們來分別讀入文件查看耗時:框架
藉助jupyter notebook
記錄計算時間的插件,能夠看到原生的pandas
耗時14.8秒,而modin
只用了5.32秒,接着咱們再來試試concat
操做:工具
能夠看到在pandas
花了8.78秒才完成任務的狀況下,modin
僅用了0.174秒,取得了驚人的效率提高。接下來咱們再來執行常見的檢查每列缺失狀況的任務:性能
這時耗時差距雖然不如concat
操做時那麼巨大,也是比較可觀的,可是modin
畢竟是一個處理快速開發迭代階段的工具,其針對pandas
的並行化改造還沒有覆蓋所有的功能,譬如分組聚合功能。對於這部分功能,modin
會在執行代碼時檢查本身是否支持,對於還沒有支持的功能modin
會自動切換到pandas
單核後端來執行運算,但因爲modin
中組織數據的形式與pandas
不相同,因此中間須要經歷轉換:
這種時候modin
的運算反而會比pandas
慢不少:
所以我對modin
持有的態度是在處理大型數據集時,部分應用場景能夠用其替換pandas
,即其已經完成可靠並行化改造的pandas
功能,你能夠在官網對應界面(https://modin.readthedocs.io/en/latest/supported_apis/index.html )查看其已經支持及還沒有良好支持的功能,,由於modin
還處於快速開發階段,不少目前沒法支持的功能也許將來不久就會被加入modin
:
以上就是本文的所有內容,若有疑問歡迎在評論區與我討論。