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)
吉林省.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更慢了。



广而告之