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...