(數據科學學習手札86)全平臺支持的pandas運算加速神器

本文示例代碼已上傳至個人Github倉庫https://github.com/CNFeffery/DataScienceStudyNoteshtml

1 簡介

  隨着其功能的不斷優化與擴充,pandas已然成爲數據分析領域最受歡迎的工具之一,但其仍然有着一個不容忽視的短板——難以快速處理大型數據集,這是因爲pandas中的工做流每每是創建在單進程的基礎上,使得其只能利用單個處理器核心來實現各類計算操做,這就使得pandas在處理百萬級、千萬級甚至更大數據量時,出現了明顯的性能瓶頸。git

  本文要介紹的工具modin就是一個致力於在改變代碼量最少的前提下,調用起多核計算資源,對pandas的計算過程進行並行化改造的Python庫,而且隨着其近期的一系列內容更新,modin基於Dask開始對Windows系統一樣進行了支持,使得咱們只須要改變一行代碼,就能夠在全部平臺上得到部分pandas功能可觀的計算效率提高。github

圖1

2 基於modin的pandas運算加速

  modin支持WindowsLinux以及Mac系統,其中LinuxMac平臺版本的modin工做時可基於並行運算框架RayDask,而Windows平臺版本目前只支持Dask做爲計算後端(由於Ray沒有Win版本),安裝起來十分方便,能夠用以下3種命令來安裝具備不一樣後端的modinwindows

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便可,接下來咱們來看一下在一些常見功能上,pandasVSmodin性能差別狀況,首先咱們分別使用pandasmodin讀入一個大小爲1.1G的csv文件esea_master_dmg_demos.part1.csv,來自kagglehttps://www.kaggle.com/skihikingkevin/csgo-matchmaking-damage/data),記錄了關於熱門遊戲CS:GO的一些玩家行爲數據,由於體積過大,請感興趣的讀者朋友自行去下載:api

圖2

  爲了區分他們,在導入時暫時將modin.pandas命名爲mpdbash

圖3

  能夠看到由於是Win平臺,因此使用的計算後端爲Dask,首先咱們來分別讀入文件查看耗時:框架

圖4

  藉助jupyter notebook記錄計算時間的插件,能夠看到原生的pandas耗時14.8秒,而modin只用了5.32秒,接着咱們再來試試concat操做:工具

圖5

  能夠看到在pandas花了8.78秒才完成任務的狀況下,modin僅用了0.174秒,取得了驚人的效率提高。接下來咱們再來執行常見的檢查每列缺失狀況的任務:性能

圖6

  這時耗時差距雖然不如concat操做時那麼巨大,也是比較可觀的,可是modin畢竟是一個處理快速開發迭代階段的工具,其針對pandas的並行化改造還沒有覆蓋所有的功能,譬如分組聚合功能。對於這部分功能,modin會在執行代碼時檢查本身是否支持,對於還沒有支持的功能modin會自動切換到pandas單核後端來執行運算,但因爲modin中組織數據的形式與pandas不相同,因此中間須要經歷轉換:

圖7

  這種時候modin的運算反而會比pandas慢不少:

圖8

  所以我對modin持有的態度是在處理大型數據集時,部分應用場景能夠用其替換pandas,即其已經完成可靠並行化改造的pandas功能,你能夠在官網對應界面(https://modin.readthedocs.io/en/latest/supported_apis/index.html )查看其已經支持及還沒有良好支持的功能,,由於modin還處於快速開發階段,不少目前沒法支持的功能也許將來不久就會被加入modin

圖9

  以上就是本文的所有內容,若有疑問歡迎在評論區與我討論。

相關文章
相關標籤/搜索