(資料科學學習手札86)全平臺支援的pandas運算加速神器

費弗裡發表於2020-06-05

本文示例程式碼已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

1 簡介

  隨著其功能的不斷優化與擴充,pandas已然成為資料分析領域最受歡迎的工具之一,但其仍然有著一個不容忽視的短板——難以快速處理大型資料集,這是由於pandas中的工作流往往是建立在單程式的基礎上,使得其只能利用單個處理器核心來實現各種計算操作,這就使得pandas在處理百萬級、千萬級甚至更大資料量時,出現了明顯的效能瓶頸。

  本文要介紹的工具modin就是一個致力於在改變程式碼量最少的前提下,呼叫起多核計算資源,對pandas的計算過程進行並行化改造的Python庫,並且隨著其近期的一系列內容更新,modin基於Dask開始對Windows系統同樣進行了支援,使得我們只需要改變一行程式碼,就可以在所有平臺上獲得部分pandas功能可觀的計算效率提升。

(資料科學學習手札86)全平臺支援的pandas運算加速神器
圖1

2 基於modin的pandas運算加速

  modin支援WindowsLinux以及Mac系統,其中LinuxMac平臺版本的modin工作時可基於並行運算框架RayDask,而Windows平臺版本目前只支援Dask作為計算後端(因為Ray沒有Win版本),安裝起來十分方便,可以用如下3種命令來安裝具有不同後端的modin

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的一些玩家行為資料,因為體積過大,請感興趣的讀者朋友自行去下載:

(資料科學學習手札86)全平臺支援的pandas運算加速神器
圖2

  為了區分他們,在匯入時暫時將modin.pandas命名為mpd

(資料科學學習手札86)全平臺支援的pandas運算加速神器
圖3

  可以看到因為是Win平臺,所以使用的計算後端為Dask,首先我們來分別讀入檔案檢視耗時:

(資料科學學習手札86)全平臺支援的pandas運算加速神器
圖4

  藉助jupyter notebook記錄計算時間的外掛,可以看到原生的pandas耗時14.8秒,而modin只用了5.32秒,接著我們再來試試concat操作:

(資料科學學習手札86)全平臺支援的pandas運算加速神器
圖5

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

(資料科學學習手札86)全平臺支援的pandas運算加速神器
圖6

  這時耗時差距雖然不如concat操作時那麼巨大,也是比較可觀的,但是modin畢竟是一個處理快速開發迭代階段的工具,其針對pandas的並行化改造尚未覆蓋全部的功能,譬如分組聚合功能。對於這部分功能,modin會在執行程式碼時檢查自己是否支援,對於尚未支援的功能modin會自動切換到pandas單核後端來執行運算,但由於modin中組織資料的形式與pandas不相同,所以中間需要經歷轉換:

(資料科學學習手札86)全平臺支援的pandas運算加速神器
圖7

  這種時候modin的運算反而會比pandas慢很多:

(資料科學學習手札86)全平臺支援的pandas運算加速神器
圖8

  因此我對modin持有的態度是在處理大型資料集時,部分應用場景可以用其替換pandas,即其已經完成可靠並行化改造的pandas功能,你可以在官網對應介面(https://modin.readthedocs.io/en/latest/supported_apis/index.html )檢視其已經支援及尚未良好支援的功能,,因為modin還處於快速開發階段,很多目前無法支援的功能也許未來不久就會被加入modin

(資料科學學習手札86)全平臺支援的pandas運算加速神器
圖9

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

相關文章