使用modin針對pandas進行效能優化

2021-10-02 00:23:15 字數 2997 閱讀 3383

1.為什麼要使用modin?

modin 是加州大學伯克利分校 riselab 的乙個早期專案,旨在促進分布式計算在資料科學領域的應用。它是乙個多程序的資料幀(dataframe)庫,具有與 pandas 相同的應用程式介面(api),使使用者可以加速他們的 pandas 工作流。

該系統是為希望程式執行得更快、伸縮性更好,而無需進行重大**更改的 pandas 使用者設計的。這項工作的最終目標是能夠在雲環境中使用 pandas。

我們在使用pandas進行資料處理時難免出現效能瓶頸,在實際工作生產中pandas操作百萬高維資料時,效能不足的問題會逐步放大,這與pandas的單核執行機制相關,pandas在將大資料量加載入快取時,會將龐大的dataframe同時拷貝入快取中。

2.modin與pandas的效能對比例項

我們來看一下使用modin分布式並行加速後pandas與原始pandas對比

1.首先我們先建立乙個計算執行時間的裝飾器,並分別匯入modin與pandas,並設定匯入資料的路徑

匯入資料為乙份石家莊poi資料,資料量為40w左右,特徵數15,資料大小在105mb

讓我們看看modin與pandas在這個級別資料載入速度的對比

import pandas as pd

import modin.pandas as mpd

import os

import time

path =

'/users/mac/desktop/data_processing/poi/untitled folder/石家莊市poi_20200108.csv'

deftime_out

(func)

:def

inner

(*arg,

**kwargs)

: start = time.clock(

) r = func(

*arg,

**kwargs)

end = time.clock(

)print

(end-start)

return r

return inner

這是個裝飾器可以計算單個函式所執行的時間

隨後分別使用modin與pandas針對同乙份資料進行資料載入dataframe型別並存入快取中

@time_out

defmodin_read()

: data = mpd.read_csv(path)

return data

@time_out

defpd_read_time()

: data1 = pd.read_csv(path)

return data1

if __name__ ==

'__main__'

: modin_read(

) pd_read_time(

)

通過執行這段**可以得到

/usr/local/

bin/python3.

6/users/mac/pycharmprojects/jxw_test_sp/pyspark_lou/project.py

0.16381800000000002

1.714888

process finished with exit code 0

通過裝飾器計算我們可以清楚看到,使用modin加速後相比原始pandas效能提公升10倍有餘。

這樣來看modin加速後的pandas可以完全取締原始pandas,可事實真的是這樣嘛?

於是我又將另一組資料進行載入測試,這組資料量為11000,特徵數為12,大小大約為2.2mb。讓我們看下modin在小資料量下表現如何。

/usr/local/

bin/python3.

6/users/mac/pycharmprojects/jxw_test_sp/pyspark_lou/project.py

0.15624100000000007

0.09584199999999998

process finished with exit code 0

我們發現modin在小資料量下效能反而不如原始pandas,這也是在意料之中,由此可知有經驗的資料科學家在modin與pandas在實際使用上,會根據資料量大小從而選擇相對合適的,而平行計算過程中必然存在乙個資料量的閥值,在閥值上modin與pandas效能相同。而導致modin與pandas出現差異的原因是什麼呢?下面我們就一起來**下

3.modin效能優化的原理

在具有 4 個 cpu 核心的現代筆記本上處理適用於該機器的資料幀時,pandas 僅僅使用了 1 個 cpu 核心,而 modin 則能夠使用全部 4 個核心。

在多核條件下,modin可以充分提公升cpu的利用率,使資料處理效率大大提公升。

modin擁有兩種分布式計算框架分別是desk和ray,在不進行提前設定時,modin預設使用ray,ray是一種應用於機器學習與強化學習場景的分布式執行框架,可以實現多端分布式計算,從而提公升效能,而在單台伺服器上又可以以多程序的方式實現平行計算,並完美與modin相結合實現對pandas操作的並行加速。

現今,ray只適用於mac與linux環境下,不支援windows相關操作

modin針對並行操作所做的優化分別體現在對dataframe資料型別的切割與特徵分離。我們可以簡單的理解為針對dataframe行與列的拆分,將拆分後的dataframe分配到不同的cpu核心中進行計算,再將計算結果相互組合還原,從而實現平行計算。

Python資料分析 pandas針對字串操作

目錄在pandas中針對字串配備了一套方法,使其容易對陣列的每個元素進行操作。通過str屬性操作,會自動排除丟失nan值 import numpy as np import pandas as pd s pd.series ace bbb hello 100 np.nan,black df pd.d...

Pandas使用總結

第一參加阿里天池舉辦的比賽,關於美年雙高 的比賽,成績0.08。因為之前只學習過理論,沒有具體做過專案,對python會一些,但對pandas基本從零開始。比賽初期基本copy大佬的資料處理部分的 後面再在此基礎上修改。天池的比賽,比較貼近實際的專案,還是很有參與價值的。在這個比賽中,我也認識到了特...

pandas 高階使用

目錄 csv comma separated values 格式的檔案是指以純文字形式儲存的 資料,這意味著不能簡單的使用excel 工具進行處理,而且excel 處理的資料量十分有限,而使用pandas來處理資料量巨大的csv檔案就容易的多了。import pandas as pd deftest...