查看原文
其他

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

大邓 大邓和他的Python
2024-09-09

modin库是python的第三方库,只需一行代码,就能用pandas语法来加速数据处理过程。


一、modin有啥用?

pandas库以其简洁易用的api,受到数据分析师喜爱,能做python、sql、excel三者都能做的数据分析。现在的电脑CPU一般都是多核,但pandas只能单核,导致数据处理能力有限。

而今天,我们要分享的modin,可以利用电脑cpu所有的内核, 加速数据处理。假设你的电脑cpu有4个内核, pandas相当于雇佣了一个工人干活,而modin同时雇佣四个人干活,所以同样的任务,理论上modin比pandas要快4倍。

二、modin特点

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



三、实验

3.1 环境准备

在命令行cmd (苹果电脑在terminal)中执行

pip3 install "modin[all]"
pip3 install humanize

3.2 使用方法

只需要一行代码,即可实现pandas功能。下面的两行代码, mpd几乎等同于我们熟悉的pd。

import modin.pandas as mpd
import pandas as pd

3.3 准备数据

这里用  数据集(付费) | 3571万条专利申请数据集(1985-2022年) 为例,

from humanize import naturalsize
import os

csvfsizes = [(f, os.path.getsize(f)) for 
             f in os.listdir('.'
             if '.csv' in f]

#排序,文件体积从大到小
csvfsizes = sorted(csvfsizes, 
                   key=lambda k:k[1], 
                   reverse=True)

for csvf, size in csvfsizes:
    humansize = naturalsize(size)
    print(csvf, ' ', humansize)

Run

广东省.csv   10.4 GB
江苏省.csv   9.6 GB
浙江省.csv   7.1 GB
其他国家.csv   6.2 GB
北京市.csv   4.6 GB
山东省.csv   4.3 GB
上海市.csv   3.1 GB
安徽省.csv   3.0 GB
四川省.csv   2.3 GB
湖北省.csv   2.1 GB
福建省.csv   2.1 GB
河南省.csv   2.0 GB
天津市.csv   1.6 GB
湖南省.csv   1.5 GB
陕西省.csv   1.5 GB
辽宁省.csv   1.4 GB
河北省.csv   1.3 GB
重庆市.csv   1.2 GB
江西省.csv   1.0 GB
广西壮族自治区.csv   809.9 MB
台湾省.csv   792.9 MB
黑龙江省.csv   784.5 MB
贵州省.csv   542.4 MB
云南省.csv   538.9 MB
吉林省.csv   524.9 MB
...
香港特别行政区.csv   90.2 MB
青海省.csv   74.9 MB
西藏自治区.csv   19.5 MB
澳门特别行政区.csv   3.5 MB

3.4 读取速度

我们分别选择

  • 吉林省.csv 524.9 MB
  • 江西省.csv 1.0 GB
  • 北京市.csv 4.6 GB
  • 广东省.csv 10.4 GB

来测试读取数据的速度

import modin.pandas as mpd
import pandas as pd

#Pandas 524.9 MB
%time df = pd.read_csv('吉林省.csv')

Run

CPU times: total: 10.6 s
Wall time: 11.2 s

#Modin 524.9 MB
%time df = mpd.read_csv('吉林省.csv')

Run

CPU times: total: 1.38 s
Wall time: 2.68 s

其他几个文件语法类似, 都有显著的速度提升。以下是实验表现

文件体积pandas(Wall time)modin(Wall time)
吉林省.csv524.9 MB11.2 s2.68 s
江西省.csv1.0 GB22.9 s5.17 s
北京.csv4.6 GB100s24.7 s
广东省.csv10.4 GB213s55.9 s






3.5 运算速度

import modin.pandas as mpd

df1 = mpd.read_csv('广东省.csv')
#计算文本长度
%time df1['专利摘要'].str.len()

Run

CPU times: total: 15.6 ms
Wall time: 26.5 ms

import pandas as pd

df2 = pd.read_csv('广东省.csv')
%time df2['专利摘要'].str.len()

Run

CPU times: total: 3.02 s
Wall time: 3.33 s

modin在计算方面快了125倍。



注意

但是由于时间限制,实验比较简单, 个中情况不能一一覆盖。也有人反映,使用modin,反而比pandas更慢了。

精选内容

93G数据集 | 中国裁判文书网(2010-2021)

96G数据集 | 2亿条中国大陆企业工商注册信息

数据集 | 3571万条专利申请数据集(1985-2022年)

预训练模型 | 使用1000w专利摘要训练word2vec模型,可用于开发词典

使用中文MD&A数据集训练word2vec预训练模型, 可扩展或新建会计金融等领域的情感词典

词向量 | 使用1亿B站用户签名训练word2vec词向量

数据集 | 2001-2022年A股上市公司年报&管理层讨论与分析

CAR2023 | 文本分析在会计中的应用

MS | 使用网络算法识别创新的颠覆性与否

管理世界 | 使用文本分析词构建并测量 短视主义

管理世界 | 使用 经营讨论与分析 测量 企业数字化指标

管理世界 | 用正则表达式、文本向量化、线性回归算法从md&a数据中计算 「企业融资约束指标

中国管理科学 | 使用业绩说明会文本数据测量上市公司前瞻性信息

管理科学学报 | 使用LDA算法计算政策扩散速度与扩散程度

心理科学进展 | 语义距离与创造性思维关系的元分析

JMR | 测量消费者的「语言确定性

金融研究 | 使用Python构建「关键审计事项信息含量」

案例代码 | 使用正则表达式判别微博用户mbti类型

可视化 | 99-21年地方政府报告关键词变化趋势

使用 Word2Vec 和 TF-IDF 计算五类企业文化

数据集 | 2006年-2022年企业社会责任报告

数据集 | 2001-2022年A股上市公司年报&管理层讨论与分析

数据集 | 07-21年上市公司「委托贷款公告」

数据集 | 200w政府采购合同公告明细数据(1996.6-2022.12)

数据集 | 84w条业绩说明会问答数据(2005-2023)

代码 | 如何处理远超电脑内存的csv文件


继续滑动看下一个
大邓和他的Python
向上滑动看下一个

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

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