Modin,只需一行代码加速你的Pandas
modin库是python的第三方库,只需一行代码,就能用pandas语法来加速数据处理过程。
一、modin有啥用?
pandas库以其简洁易用的api,受到数据分析师喜爱,能做python、sql、excel三者都能做的数据分析。现在的电脑CPU一般都是多核,但pandas只能单核,导致数据处理能力有限。
而今天,我们要分享的modin,可以利用电脑cpu所有的内核, 加速数据处理。假设你的电脑cpu有4个内核, pandas相当于雇佣了一个工人干活,而modin同时雇佣四个人干活,所以同样的任务,理论上modin比pandas要快4倍。
二、modin特点
支持pandas.DataFrame数据类型 与pandas兼容,语法相似,几乎不需要额外学习; 能处理1MB到1TB+的数据; 使用者不需要知道系统有多少内核,也不需要指定如何分配数据;
三、实验
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) |
---|---|---|---|
吉林省.csv | 524.9 MB | 11.2 s | 2.68 s |
江西省.csv | 1.0 GB | 22.9 s | 5.17 s |
北京.csv | 4.6 GB | 100s | 24.7 s |
广东省.csv | 10.4 GB | 213s | 55.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更慢了。
精选内容
数据集 | 3571万条专利申请数据集(1985-2022年)
预训练模型 | 使用1000w专利摘要训练word2vec模型,可用于开发词典
使用中文MD&A数据集训练word2vec预训练模型, 可扩展或新建会计金融等领域的情感词典
数据集 | 2001-2022年A股上市公司年报&管理层讨论与分析
管理世界 | 用正则表达式、文本向量化、线性回归算法从md&a数据中计算 「企业融资约束指标」
中国管理科学 | 使用业绩说明会文本数据测量上市公司前瞻性信息
数据集 | 2001-2022年A股上市公司年报&管理层讨论与分析
数据集 | 200w政府采购合同公告明细数据(1996.6-2022.12)
数据集 | 84w条业绩说明会问答数据(2005-2023)