查看原文
其他

Modin:一行代码让pandas加速数十倍

大邓 大邓和他的Python 2022-07-09

寒假何不学python | Python数据分析实战(学术)




pandas库是python中最有名的数据分析库,因为dataframe这种易用强大的数据类型,pandas成为数据科学必备套件。pandas可以和很多包联合使用,比如与机器学习sklearn、统计分析statsmodels、可视化searborn&matplotlib等等。下图是近几年python包的使用量趋势,pandas一骑绝尘

但pandas有一个弱点:不适用于大规模数据。

pandas默认只调用电脑单个的CPU进行数据读取和运算,但是当前的电脑大多是4核,甚至8核,而如果常规使用pandas意味着我们没有充分使用电脑的性能。

Modin是为加速pandas而开发的包,可以自动按照电脑CPU数调整运行的核数。

安装

  1. !pip3 install ray

  2. !pip3 install dask

  3. !pip3 install modin

modin使用

modin的用法与pandas相差无几,只是在导入的时候略有不同。

  1. import modin.pandas as pd

现在这个pd就拥有与pandas一样的功能

读取速度

说了这么多了,我们先看看pandas导入test.csv文件(107M)的速度。

  1. import time

  2. import pandas as pd



  3. start = time.time()

  4. df = pd.read_csv('data/test.csv')

  5. end = time.time()

  6. print(end-start)

  1. 1.611081838607788

pandas导入107M的test.csv耗时1.78s

  1. import time

  2. import modin.pandas as pd



  3. start = time.time()

  4. #test.csv 107M

  5. df = pd.read_csv('data/test.csv')

  6. end = time.time()

  7. print(end-start)

  1. 0.7474761009216309

modin只用了0.75s,加快了2.1倍。

运算速度

pd.concat是用来连接多个dataframe的操作函数,当我们的df很大时,pd.concat就会变慢。我们在这里实验一下pandas和modin各自的速度

  1. import time

  2. import pandas as pd


  3. df = pd.read_csv('data/test.csv')

  4. start = time.time()

  5. newdf = pd.concat([df for _ in range(100)])

  6. end = time.time()

  7. print(end-start)

  1. 10.625022888183594

  1. import time

  2. import modin.pandas as pd


  3. df = pd.read_csv('data/test.csv')

  4. start = time.time()

  5. newdf = pd.concat([df for _ in range(100)])

  6. end = time.time()

  7. print(end-start)

  1. 0.7488729953765869

同样的pd.concat操作,modin比pandas快了14倍。我又做了几个对比,制作成表格

实战技巧

modin目前仍然正在发展中,并不是所有的pandas的函数都能加速。如果加速遇到报错,说明这个操作modin不支持。

默认modin会调用电脑全部的cpu,如果不想全部调用,可以使用ray来限制cpu使用数。

  1. import ray

  2. import warnings

  3. warnings.filterwarnings('ignore')

  4. ray.init(num_cpus=4, ignore_reinit_error=True)

  5. import modin.pandas as pd

如果待操作的数据文件远大于电脑内存RAM,可以设置

  1. import os

  2. os.environ["MODIN_OUT_OF_CORE"]='true'

  3. import modin.pandas as pd


近期文章





精选课程 | Python数据分析实战(学术)

2020年B站跨年晚会弹幕内容分析

综述:文本分析在市场营销研究中的应用

Lazy Prices公司年报内容变动碰上股价偷懒

使用pandas做数据可视化

用statsmodels库做计量分析

YelpDaset: 酒店管理类数据集10+G

NRC词语情绪词典和词语色彩词典

Loughran&McDonald金融文本情感分析库

股评师分析报告文本情感分析预测股价

使用分析师报告中含有的情感信息预测上市公司股价变动

【公开视频课】Python语法快速入门

【公开视频课】Python爬虫快速入门

一行pandas代码生成哑变量

使用Python读取图片中的文本数据

代码不到40行的超燃动态排序图


jupyter notebook代码获取方式,公众号后台回复关键词“20200114” 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存