本文翻译自:Shrivarsheni的博客

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

  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 pds = 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那么便捷。


往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑
本站qq群851320808,加入微信群请扫码:

【Python】Modin,只需一行代码加速你的Pandas相关推荐

  1. python实现英文新闻摘要自动提取_利用Python实现摘要自动提取,完美瘦身只需一行代码...

    原标题:利用Python实现摘要自动提取,完美瘦身只需一行代码 今天给大家推荐一个也可以用于关键字提取的算法TextRank,但主要实现的功能是快速从长篇新闻中抽取精准摘要. 前言介绍 TextRan ...

  2. Python爬虫仅需一行代码,熟练掌握crawl第三方库

    simple_crawl 仅需一行代码即可达到爬虫效果 使用方法 私信小编01即可大量获取Python学习资料 pip install simple_crawl 以下源代码为简单介绍,详细功能介绍再源 ...

  3. 【CVPR2020 Oral】只需一行代码就可提升迁移性能

    关注上方"深度学习技术前沿",选择"星标公众号", 精选文章,第一时间送达! 作者:Hassassin 知乎链接:https://zhuanlan.zhihu. ...

  4. 实现一个在JNI中调用Java对象的工具类,从此只需一行代码

    前言 我们知道在jni中执行一个java函数需要调用几行代码才行,如 jclass objClass = (*env).GetObjectClass(obj); jmethodID methodID ...

  5. Python爬虫仅需一行代码----crawl第三方库

    仅需一行代码写爬虫–simple_crawl simple_crawl 仅需一行代码即可达到爬虫效果 项目地址(欢迎star):https://github.com/Amiee-well/crawl ...

  6. 懒人必备!只需一行代码,就能导入所有的Python库

    今天给大家介绍一个懒人Python库--Pyforest. 使用一行代码,就能导入所有的Python库(本地已经安装的). GitHub地址:https://github.com/8080labs/p ...

  7. 只需一行代码,就能导入所有的Python库?

    作者 | 小F       责编 | 欧阳姝黎 大家好,我是小F- 今天给大家介绍一个懒人 Python 库-- Pyforest. 使用一行代码,就能导入所有的 Python 库(本地已经安装的). ...

  8. python速度_只需一行代码,让你的Python运算速度更加流畅!

    python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差. "一行代码让python的运行速度提高100倍" ...

  9. [JavaScript]只需一行代码,轻松搞定快捷留言-V2升级版

    前天熬了大半宿发了一篇[一行代码轻松搞定快捷留言功能],同时发布了V1.0beta版的快捷留言功能和源代码,之所以是beta版,就是当时感觉虽然基本功能有了,但是还不够完善,特性也不一定合理,今天不知 ...

最新文章

  1. 安卓StepView事件进度条的简单实现
  2. 计算机网络 网络设备命令 数据链路层解析
  3. POJ.3648.Wedding(2-SAT)
  4. 【pmcaff】从 Lending Club 的 IPO,我们能学到些什么
  5. linux查看当前用户终端,Linux----基本命令的使用(vi命令,查看文件内容,显示进程,切换用户等)...
  6. 【Java】异常处理的注意事项
  7. shiro的详细讲解
  8. HDU 3197 Game(树删边)
  9. Spine 2D骨骼动画 教程整理 归档于此
  10. toolchain安装教程支持_orocos toolchain安装
  11. logo是啥_logo是什么意思?
  12. 程序员副业那些事:聊聊出书和录视频
  13. 云轴ZStack Cloud云建设方案腾讯政务微信应用迁移
  14. oop部分,构造方法,this的使用。
  15. 笔记本外接2K显示器问题记录(集显Intel HD Graphic 3000)
  16. 硬核蹭热点系列:负油价和巴舍利耶模型
  17. Mybatisplus argument type mismatch
  18. 手把手教你打通车载蓝牙与手机app的音频信息传输车载反向控制手机app
  19. ESP8266—01模块的3种工作模式
  20. python 实践--新闻聚合

热门文章

  1. 用户控件中使用相对路径问题
  2. HDU-2476 String painter 区间DP
  3. Python学习笔记之函数式编程
  4. leetcode 35 Search Insert Position(二分法)
  5. js 调用父窗口的方法
  6. 【PHP】函数的引用返回
  7. Spring.NET学习笔记11——自定义对象行为(基础篇) Level 200
  8. 实时获取ccd图像_四元数数控:CCD视觉检测定位系统在玻璃瓶缺陷的检测
  9. 2021-08-30 centos连接WiFi方法
  10. rhino4.0安装教程