<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【Python】Modin,只需一行代碼加速你的Pandas

          共 4443字,需瀏覽 9分鐘

           ·

          2021-03-14 11:10

          本文翻譯自:Shrivarsheni的博客

          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個進(jìn)程而不是一個進(jìn)程(如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)核都被用上了。如果用8核來跑,加載時間更少。

          對比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那么便捷。

          往期精彩回顧





          本站qq群851320808,加入微信群請掃碼:

          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产久久久久 | 8x8x成人免费视频入口 | 黄色片网站在线观看免费 | 夜夜撸性视频 | 乱伦引绣视频网站 |