Modin信不,只需一行代碼加速你的pandas

Modin是一個Python第三方庫,可以通過并行來處理大數(shù)據(jù)集亡呵。它的語法和pandas非常相似抽活,因其出色的性能,能彌補Pandas在處理大數(shù)據(jù)上的缺陷锰什。

本文會解釋何時該用Modin處理數(shù)據(jù)下硕,并給出Modin的一些真實案例。


下文內(nèi)容主要包括:

  1. 為什么需要Modin歇由?
  2. Modin厲害在哪里卵牍?
  3. Modin使用方法
  4. 對比Modin和Pandas
  5. 對比Modin和其他加速庫有何不同?
    Modin VS Vaex
    Modin VS Dask
    Modin VS cuDF

為什么需要Modin沦泌?

Pandas是python數(shù)據(jù)分析最常用的工具庫糊昙,數(shù)據(jù)科學(xué)領(lǐng)域的大明星。Pandas受歡迎的原因在于它簡潔易用的API谢谦,并且集成了Numpy释牺、Matplotlib萝衩、Scipy等眾多數(shù)據(jù)科學(xué)庫,堪稱Python+SQL+Excel的結(jié)合體没咙。

但Pandas并不是完美的猩谊,大數(shù)據(jù)是它的軟肋。

由于設(shè)計原因祭刚,Pandas只能在單核上運行牌捷,數(shù)據(jù)處理能力有限。目前大部分計算機雖都是多核CPU涡驮,Pandas卻心有余而力不足暗甥,無法用到多核。

正因為大多人都熟悉了Pandas的語法結(jié)構(gòu)捉捅,所以想換一種新的數(shù)據(jù)分析庫并不容易撤防,會增加很多的學(xué)習(xí)成本。如果在保留Pandas語法和API的前提下棒口,又能增加大數(shù)據(jù)處理能力寄月,這將會一個完美的解決方案。

Modin就是這樣一個存在无牵。只要你有使用Pandas的經(jīng)驗漾肮,就可以輕松上手Modin。

Modin厲害在哪里茎毁?

Modin是一個Python第三方庫初橘,可以彌補Pandas在大數(shù)據(jù)處理上的不足,同時能將代碼速度提高4倍左右充岛。

Modin以Ray或Dask作為后端運行。

Ray是基于python的并行計算和分布式執(zhí)行引擎耕蝉。
Dask是一個高性能并行分析庫崔梗,幫助Pandas、Numpy處理大規(guī)模數(shù)據(jù)垒在。

那Modin有何特別之處呢蒜魄?

與pandas不同,Modin能使用計算機中所有的CPU內(nèi)核场躯,讓代碼并行計算谈为。當(dāng)用4個進程而不是一個進程(如pandas)運行相同的代碼時,所花費的時間會顯著減少踢关。

Modin的主要特點:

  1. 使用DataFrame作為基本數(shù)據(jù)類型伞鲫;
  2. 與Pandas高度兼容,語法相似签舞,幾乎不需要額外學(xué)習(xí)秕脓;
  3. 能處理1MB到1TB+的數(shù)據(jù)柒瓣;
  4. 使用者不需要知道系統(tǒng)有多少內(nèi)核,也不需要指定如何分配數(shù)據(jù)吠架;

Modin使用方法

首先要安裝Modin芙贫,使用pip安裝即可。

前面說過傍药,Modin使用Ray或Dask作為后端磺平,在這里我們使用 dask,命令行輸入以下代碼同時安裝Modin和Dask:

pip install modin[dask]

接下來是導(dǎo)入Modin拐辽,這是重點拣挪。Modin宣稱改一行代碼就可以加速pandas,只需將:

import pandas as pd

改為

import modin.pandas as pd

除了速度更快外薛训,剩下的語法媒吗、api和Pandas一模一樣。

我們來試試分別用Modin和pandas讀取200MB的CSV文件乙埃,看哪個速度更快闸英。

# 使用pandas讀取數(shù)據(jù)
import pandas as pd
import time
s = time.time()
df = pd.read_csv("test.csv")
e = time.time()
print("Pandas讀取時間 = {}".format(e-s))

# 使用Modin讀取數(shù)據(jù)
import modin.pandas as pd

s = time.time()
df = pd.read_csv("test.csv")
e = time.time()
print("Modin讀取時間 = {}".format(e-s))

返回:


Pandas是3.3秒,Modin是1.9秒介袜,速度快了接近1倍甫何。

因為我的電腦是4核CPU,Modin加載過程中所有內(nèi)核都被用上了遇伞,所以加載時間更少辙喂。

對比Modin和Pandas

  1. read_csv

簡單對比了Modin和Pandas讀取200M文件后,我們再試下讀取1GB的CSV文件有多大差異鸠珠。

pandas:

# 使用pandas讀取數(shù)據(jù)
import pandas as pd
import time
s = time.time()
df = pd.read_csv("test1.csv")
e = time.time()
print("Pandas讀取時間 = {}".format(e-s))

輸出:
Pandas讀取時間 = 11.298792123794556

# 使用Modin讀取數(shù)據(jù)
import modin.pandas as pd

s = time.time()
df = pd.read_csv("test1.csv")
e = time.time()
print("Modin讀取時間 = {}".format(e-s))

輸出:
Modin讀取時間 = 7.6007184982299805

處理GB級的數(shù)據(jù)巍耗,Modin的優(yōu)勢也是顯而易見的,當(dāng)然處理時間會隨計算機的不同有差異渐排。

  1. append()

append在Pandas中用來添加新行炬太,我們來看看Modin和Pandas做append操作時的速度差異。

Pandas:

# 使用pandas讀取數(shù)據(jù)驯耻,200M文件
import pandas as pd
import time
df_pandas = pd.read_csv("test.csv")
s = time.time()
result = df_pandas.append(df_pandas)
e = time.time()
print("Pandas append時間 = {}".format(e-s))

輸出:
Pandas append時間 = 1.242678165435791

Modin:

# 使用Modin讀取數(shù)據(jù)亲族,200M文件
import modin.pandas as pd
df_modin = pd.read_csv("test.csv")
s = time.time()
result = df_modin.append(df_modin)
e = time.time()
print("Modin append時間 = {}".format(e-s))

輸出:
Modin append時間 = 0.2613077163696289

Pandas用時1.2秒,Modin用時0.2秒可缚。

  1. Concat()

concat用來拼接多個DataFrame霎迫,也來測試一下差異。

Pandas:

# 使用pandas讀取數(shù)據(jù)帘靡,200M文件
import pandas as pd
import time
df_pandas = pd.read_csv("test.csv")
s = time.time()
result = pd.concat([df_pandas]*5)
e = time.time()
print("Pandas concat時間 = {}".format(e-s))

輸出:
Pandas concat時間 = 3.705094337463379

Modin:

# 使用Modin讀取數(shù)據(jù)知给,200M文件
import modin.pandas as pd
df_modin = pd.read_csv("test.csv")
s = time.time()
result = pd.concat([df_modin]*5)
e = time.time()
print("Modin concat時間 = {}".format(e-s))

輸出:
Modin concat時間 = 0.5255951881408691

Pandas用時3.7秒,Modin用時0.5秒测柠。

通過上面3個函數(shù)的比較炼鞠,Modin在使用append缘滥、concat等方法上要比Pandas快5倍以上

對比Modin和其他加速庫有何不同?

現(xiàn)在有很多庫可以實現(xiàn)對Pandas的加速谒主,比如Dask朝扼、Vaex、Ray霎肯、CuDF等擎颖,Modin和這些庫對比有什么樣的優(yōu)勢呢?

Modin Vs Vaex

Modin可以說是Pandas的加速版本观游,幾乎所有功能通用搂捧。Vaex的核心在于惰性加載,類似spark懂缕,但它有獨立的一套語法允跑,使用起來和Pandas差異很大。

如果你已經(jīng)寫好基于pandas的腳本搪柑,只是想加速運行代碼聋丝,那么Modin是最佳選擇。如果你只是想簡單統(tǒng)計或可視化大數(shù)據(jù)集工碾,可以考慮Vaex弱睦。

Modin Vs Dask

Dask既可以作為Modin的后端引擎,也能單獨并行處理DataFrame渊额,提高數(shù)據(jù)處理速度况木。

但Dask對Pandas并沒有很好的兼容性,沒辦法像Modin那樣旬迹,只需改變一行代碼火惊,就可以輕松使用Pandas處理大數(shù)據(jù)集。

Modin vs. RAPIDS (cuDF)

RAPIDS加速效果非常好奔垦,但它需要有GPU的加持矗晃,沒有Modin那么便捷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宴倍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子仓技,更是在濱河造成了極大的恐慌鸵贬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脖捻,死亡現(xiàn)場離奇詭異阔逼,居然都是意外死亡,警方通過查閱死者的電腦和手機地沮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門嗜浮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羡亩,“玉大人,你說我怎么就攤上這事危融∥访” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵吉殃,是天一觀的道長辞居。 經(jīng)常有香客問我,道長蛋勺,這世上最難降的妖魔是什么瓦灶? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮抱完,結(jié)果婚禮上贼陶,老公的妹妹穿的比我還像新娘。我一直安慰自己巧娱,他們只是感情好碉怔,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著家卖,像睡著了一般眨层。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上上荡,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天趴樱,我揣著相機與錄音,去河邊找鬼酪捡。 笑死叁征,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逛薇。 我是一名探鬼主播捺疼,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼永罚!你這毒婦竟也來了啤呼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤呢袱,失蹤者是張志新(化名)和其女友劉穎官扣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羞福,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡惕蹄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卖陵。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡遭顶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泪蔫,到底是詐尸還是另有隱情棒旗,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布鸥滨,位于F島的核電站嗦哆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏婿滓。R本人自食惡果不足惜老速,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凸主。 院中可真熱鬧橘券,春花似錦、人聲如沸卿吐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗡官。三九已至箭窜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衍腥,已是汗流浹背磺樱。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留婆咸,地道東北人竹捉。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像尚骄,于是被迫代替她去往敵國和親块差。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容