但方法的改进上难免会遇到上限瓶颈,比如数据非常大的时候。最近看到了一篇也是关于对pandas提速的文章,但是从另一个角度,工具。使用它可以很好的突破操作优化上的瓶颈,而这个工具就是Modin。
Modin存在的意义就是:
更改一行代码来提速pandas工作流程。
Pandas在数据科学领域就无需介绍了,它提供高性能,易于使用的数据结构和数据分析工具。但是,在处理过多的数据时,单核上的Pandas就显得心有余而力不足了,大家不得不求助于不同的分布式系统来提高性能。然而,提高性能的权衡伴随着陡峭的学习曲线。从本质上讲,用户可能只是希望Pandas运行得更快,并不希望对其特定的硬件设置优化其工作流程。这意味着大家希望使用相同Pandas脚本作用于10KB数据集和10TB数据集。 Modin对优化pandas提供了解决方案,以便数据科学家可以花更多时间从数据中提取价值,而不是在工具上。
Modin是加州大学伯克利分校RISELab的早期项目,旨在促进分布式计算在数据科学中的应用。
它是一个多进程Dataframe库,具有与pandas相同的API,允许用户加速其Pandas工作流程。
Modin在8核计算机上将Pandas查询加速4倍,只需要用户更单行代码。该系统专为现有的Pandas用户而设计,他们希望程序能够更快地运行并且无需重大代码更改即可更好地扩展。这项工作的最终目标是能够在云设置中使用Pandas。
考虑一款4核现代笔记本电脑,dateframe可以很好地适用其上。pandas只使用其中一个CPU核,但是,modin确使用了所有的核。

pandas vs modin CPU核使用对比
modin所做的基本上就是增加了CPU所有内核的利用率,从而提供了更好的性能。
Modin使用Ray提供了一种省事儿的方式来加速pandas的notebooks,脚本和库。Ray是一个高性能的分布式执行框架,面向大规模机器学习和强化学习应用程序。可以在单个机器上运行相同的代码以实现高效的多进程处理,并且可以在群集上使用它来进行大型计算。你可以在GitHub上找到Ray:
https://
github.com/ray-project/
ray
Modin包装了pandas并透明地分发数据和计算,通过一行代码更改加速了pandas的工作流程。用户继续使用以前的pandas notebooks,同时可以体验到Modin的相当大的加速,即使在一台机器上也是如此。只需要修改import语句,其中需要导入modin.pandas而不是简单的pandas。
import numpy as np
import modin.pandas as pd
我们使用由随机整数组成的Numpy构建一个数据集。注意,我们不必在此处指定分区。
ata = np.random.randint(0,100,size = (2**16, 2**4))
df = pd.DataFrame(data)
df = df.add_prefix("Col:")
当我们打印出类型时,它是一个Modin的数据框。
type(df)
modin.pandas.dataframe.DataFrame
如果我们用head命令打印出前5行,它会像pandas一样呈现HTML表。
df.head()
import pandas
pandas_csv_data = pandas.read_csv("../800MB.csv")
-----------------------------------------------------------------
CPU times: user 26.3 s, sys: 3.14 s, total: 29.4s
Wall time: 29.5 s
Modin
%%time
modin_csv_data = pd.read_csv("../750MB.csv")
-----------------------------------------------------------------
CPU times: user 76.7 ms, sys: 5.08 ms, total: 81.8 ms
Wall time: 7.6 s
使用Modin,只需更改import语句,read_csv在4核计算机上的运行速度可提高4倍。
import pandas
_ = pandas_csv_data.groupby(by=pandas_csv_data.col_1).sum()
-----------------------------------------------------------------
CPU times: user 5.98 s, sys: 1.77 s, total: 7.75 s
Wall time: 7.74 s
Modin
%%time
results = modin_csv_data.groupby(by=modin_csv_data.col_1).sum()
-----------------------------------------------------------------
CPU times: user 3.18 s, sys: 42.2 ms, total: 3.23 s
Wall time: 7.3 s
如果想要使用尚未实现或优化的pandas API,实际上可以默认使用pandas。这使得该系统可用于使用尚未在Modin中实现操作的notebooks,即使性能会因为使用pandas API而下降。当默认为pandas时,你会看到一个警告:
dot_df = df.dot(df.T)
一旦计算完成,它将返回分布式Modin DataFrame。
type(dot_df)
-----------------
modin.pandas.dataframe.DataFrame
https://
towardsdatascience.com/
get-faster-pandas-with-modin-even-on-your-laptops-b527a2eeda74
https://
rise.cs.berkeley.edu/bl
og/modin-pandas-on-ray-october-2018/
如果觉得有帮助,还请给点个赞!
欢迎关注我的个人公众号:
Python数据科学