Modin,只需一行代码加速你的pandas

Modin是一个Python第三方库,可以通过并行来处理大数据集。它的语法和pandas非常相似,因其出色的性能,能弥补Pandas在处理大数据上的缺陷。

本文会解释何时该用Modin处理数据,并给出Modin的一些真实案例。


下文内容主要包括:

  1. 为什么需要Modin?
  2. Modin厉害在哪里?
  3. Modin使用方法
  4. 对比Modin和Pandas
  5. 对比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的主要特点:

  1. 使用DataFrame作为基本数据类型;
  2. 与Pandas高度兼容,语法相似,几乎不需要额外学习;
  3. 能处理1MB到1TB+的数据;
  4. 使用者不需要知道系统有多少内核,也不需要指定如何分配数据;

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 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加载过程中所有内核都被用上了,所以加载时间更少。

对比Modin和Pandas

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

s = time.time()
df = pd.read_csv("test1.csv")
e = time.time()
print("Modin读取时间 = {}".format(e-s))

输出:
Modin读取时间 = 7.6007184982299805

处理GB级的数据,Modin的优势也是显而易见的,当然处理时间会随计算机的不同有差异。

  1. 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秒。

  1. 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那么便捷。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容