【Python】Modin,只需一行代码加速你的Pandas
本文翻譯自:Shrivarsheni的博客
Modin是一個Python第三方庫,可以通過并行來處理大數據集。它的語法和pandas非常相似,因其出色的性能,能彌補Pandas在處理大數據上的缺陷。
本文會解釋何時該用Modin處理數據,并給出Modin的一些真實案例。
下文內容主要包括:
為什么需要Modin?
Modin厲害在哪里?
Modin使用方法
對比Modin和Pandas
對比Modin和其他加速庫有何不同?
Modin VS Vaex
Modin VS Dask
Modin VS cuDF
為什么需要Modin?
Pandas是python數據分析最常用的工具庫,數據科學領域的大明星。
Pandas受歡迎的原因在于它簡潔易用的API,并且集成了Numpy、Matplotlib、Scipy等眾多數據科學庫,堪稱Python+SQL+Excel的結合體。
但Pandas并不是完美的,大數據是它的軟肋。
由于設計原因,Pandas只能在單核上運行,數據處理能力有限。目前大部分計算機雖都是多核CPU,Pandas卻心有余而力不足,無法用到多核。
正因為大多人都熟悉了Pandas的語法結構,所以想換一種新的數據分析庫并不容易,會增加很多的學習成本。
如果在保留Pandas語法和API的前提下,又能增加大數據處理能力,這將會一個完美的解決方案。
Modin就是這樣一個存在。只要你有使用Pandas的經驗,就可以輕松上手Modin。
Modin厲害在哪里?
Modin是一個Python第三方庫,可以彌補Pandas在大數據處理上的不足,同時能將代碼速度提高4倍左右。
Modin以Ray或Dask作為后端運行。
?Ray是基于python的并行計算和分布式執行引擎。
Dask是一個高性能并行分析庫,幫助Pandas、Numpy處理大規模數據。
那Modin有何特別之處呢?
與pandas不同,Modin能使用計算機中所有的CPU內核,讓代碼并行計算。
當用4個進程而不是一個進程(如pandas)運行相同的代碼時,所花費的時間會顯著減少。
Modin的主要特點:
使用DataFrame作為基本數據類型;
與Pandas高度兼容,語法相似,幾乎不需要額外學習;
能處理1MB到1TB+的數據;
使用者不需要知道系統有多少內核,也不需要指定如何分配數據;
Modin使用方法
首先要安裝Modin,使用pip安裝即可。
前面說過,Modin使用Ray或Dask作為后端,在這里我們使用 dask,命令行輸入以下代碼同時安裝Modin和Dask:
pip?install?modin[dask]接下來是導入Modin,這是重點。
Modin宣稱改一行代碼就可以加速pandas,只需將:
import?pandas?as?pd改為
import?modin.pandas?as?pd除了速度更快外,其他要用的的語法、api和Pandas一模一樣。
我們來試試分別用Modin和pandas讀取200MB的CSV文件,看哪個速度更快。
#?使用pandas讀取數據 import?pandas?as?pd import?time s?=?time.time() df?=?pd.read_csv("test.csv") e?=?time.time() print("Pandas讀取時間?=?{}".format(e-s))#?使用Modin讀取數據 import?modin.pandas?as?pds?=?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加載過程中所有內核都被用上了。如果用8核來跑,加載時間更少。
對比Modin和Pandas
read_csv
簡單對比了Modin和Pandas讀取200M文件后,我們再試下讀取1GB的CSV文件有多大差異。
pandas:
#?使用pandas讀取數據 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讀取數據 import?modin.pandas?as?pds?=?time.time() df?=?pd.read_csv("test1.csv") e?=?time.time() print("Modin讀取時間?=?{}".format(e-s))輸出:
Modin讀取時間 = 7.6007184982299805
處理GB級的數據,Modin的優勢也是顯而易見的,當然處理時間會隨計算機的不同有差異。
append()
append在Pandas中用來添加新行,我們來看看Modin和Pandas做append操作時的速度差異。
Pandas:
#?使用pandas讀取數據,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讀取數據,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秒。
Concat()
concat用來拼接多個DataFrame,也來測試一下差異。
Pandas:
#?使用pandas讀取數據,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讀取數據,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個函數的比較,Modin在使用append、concat等方法上要比Pandas快5倍以上
對比Modin和其他加速庫有何不同?
現在有很多庫可以實現對Pandas的加速,比如Dask、Vaex、Ray、CuDF等,Modin和這些庫對比有什么樣的優勢呢?
「Modin Vs Vaex」
Modin可以說是Pandas的加速版本,幾乎所有功能通用。
Vaex的核心在于惰性加載,類似spark,但它有獨立的一套語法,使用起來和Pandas差異很大。
如果你已經寫好基于pandas的腳本,只是想加速運行代碼,那么Modin是最佳選擇。如果你只是想簡單統計或可視化大數據集,可以考慮Vaex。
「Modin Vs Dask」
Dask既可以作為Modin的后端引擎,也能單獨并行處理DataFrame,提高數據處理速度。
但Dask對Pandas并沒有很好的兼容性,沒辦法像Modin那樣,只需改變一行代碼,就可以輕松使用Pandas處理大數據集。
「Modin vs. RAPIDS (cuDF)」
RAPIDS加速效果非常好,但它需要有GPU的加持,沒有Modin那么便捷。
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯 本站qq群851320808,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【Python】Modin,只需一行代码加速你的Pandas的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win7系统win键没有反应的应对措施
- 下一篇: 【NLP】新分类!全总结!最新Aweso