如何只用一行代码让 Pandas 加速四倍?

  • 时间:
  • 浏览:17
  • 来源:大发云app

我门歌词 我门歌词 预期 Modin 对同类操作因此 运行得很好,因此 它都都可否处置少许的数据。代码如下所示:

想象一下你这些例子,你4个多数据帧,它有统统列,却只能寥寥几行。因此 库只会在行你这些维度做切分,在你这些例子中并行度就匮乏了,如何我门歌词 我门歌词 我门歌词 的列数大于行数。因此 有了 Modin,因此 它会在4个多维度进行切分,统统不管数据帧是宽的(列数较多)还是长条形的(行数较多),因此 两类情形兼具时,其对哪些地方地方数据帧的并行处置就都很高效了。

策划丨蔡芳芳

预警以及最后的基准测试

这正是 Modin 所采用的土办法,它把数据帧切割成不同次责,每个次责都会被送到不同的 CPU 核。Modin 会同時 从行和列4个多维度对数据帧切分。这使得 Modin 的并行处置还都可否适应任何型态的数据帧。

这次,Pandas 运行.fillna() 用了 1.8 秒,而 Modin 仅用了 0.21 秒,实现了 8.57 倍的加速!

好了,你因此 掌握了 Modin 模块!这是一篇 Modin 加速 Pandas 函数的使用指南。只都要修改 import 导入句子即可实现加速。希望相当于在因此 情形下,让人发现 Modin 对加速 Pandas 函数有所帮助。

Pandas 中老要使用的数据帧清理函数是.fillna() 函数。你这些函数搜索数据帧中值为 NaN 的元素,将其值替换为你指定的值,这其涵盖少许的操作。Pandas 不得不遍历每一行每一列来找到 NaN 值因此 替换它们。这里使用 Modin 来操作就再适合不过了,如何我门歌词 我门歌词 我门歌词 这里是对4个多简单操作重复统统次。

Modin 是新出的4个多库,通过自动化地将计算分布到系统所有可用的 CPU 核上,来加速 Pandas。Modin 宣称,通过你这些技术,对于任何大小的 Pandas 数据帧,它都都都可否获得和系统 CPU 核数几乎成正比的性能增长。

嗯,我我我觉得从不老要那么 快。

让人看一遍,因此 操作,Modin 明显放慢,通常是读取数据和查找数据。因此 操作,比如进行统计计算,Pandas 会快统统。

以上代码中,我门歌词 我门歌词 将4个多数据帧一键复制了 5 次进行连接。Pandas 还都可否在 3.56 秒内完成你这些连接操作,而 Modin 只花了 0.041 秒,Modin 实现了 86.83 倍的加速!看起来即使我门歌词 我门歌词 只能 6 个 CPU 核,数据帧的分块对加速也起了很大的作用。

上图是4个多简单示例。Modin 实际上采用了4个多分块管理器,它还都可否基于操作类型来改变分块大小和型态。同类,有个操作都要完正的行因此 列。在你这些情形下,分块管理器)会以它能发现的最优土办法执行切分,并把分块分散发送到 CPU 核上,它是很灵活的。

说到这里,理论次责因此 介绍得足够多啦。我门歌词 歌词 来看看代码和性能的基准测试吧!

https://stackoverflow.blog/2017/09/14/python-growing-quickly/

我门歌词 歌词 在数据帧上做因此 计算量大的操作看下。将十几条 数据帧连接起来是 Pandas 中的4个多常用操作——我门歌词 我门歌词 的数据因此 涵盖在十几条 因此 更多的 CSV 文件中,我门歌词 我门歌词 不得不一次读入4个多文件,再进行数据帧连接。我门歌词 我门歌词 在 Pandas 和 Modin 中只需调用 pd.concat() 函数就还都可否很容易做到这点。

为了在执行并行处置时完成少许繁重的工作,Modin 还都可否使用 Dask 因此 Ray 。你这些个库都会用 Python API 写的并行计算库,让人在运行时选取其一与 Modin 同時 使用。Ray 是目前为止最安全的,因此 它更加稳定——而 Dask 后端还是实验性质的。

我门歌词 歌词 来看下 Modin 都会如何运行的,因此 看十几条 代码用例。

因此 ,大多数用于数据科学的现代化机器都相当于有 2 个 CPU 核,这原因,在有 2 个 CPU 核的机器上,使用 Pandas 的默认配置时,相当于有 1000% 的计算机算力都被闲置了。因此 人有 4 个核(现代的 Intel i5)因此 6 个核(现代的 Intel i7),情形那就更糟糕了,因此 Pandas 就都会为有效利用多核算力而设计的。

默认情形下,Modin 会使用你的机器上所有可用的 CPU 核。因此 因此 情形下,你希望限制 Modin 使用的 CPU 核数量,很重是当你还想在别的地方使用哪些地方地方核的算力的时候。我门歌词 我门歌词 还都可否通过 Ray 模块中的初始化设置来限制 Modin 能使用的 CPU 核数量,因此 Modin 会在后台使用 Ray 配置。

Modin 是如何用 Pandas 做并行处置的

Modin 还是4个多非常新的库,开发和扩展都会不断进行中。统统,都会所有的 Pandas 函数都得到了完正加速。因此 人使用了 Modin 中还那么 加速的函数,它会默认使用 Pandas 函数版本,统统原来就不用产生任何 bug 因此 错误。想查看 Modin 中支持的 Pandas 函数加速的完正列表,请浏览该页面。

https://www.kdnuggets.com/2019/11/speed-up-pandas-4x.html

结论

在前面一节中,我门歌词 我门歌词 提到了 Pandas 只用4个多 CPU 核做数据处置的土办法。很自然,这成了4个多大大的瓶颈,很重是对于较大的数据帧,缺少计算资源会给性能带来较大影响。

作者丨George Seif

安装和运行 Modin 最简单的土办法是通过 pip 来进行。以下命令用来安装 Modin、Ray 以及所有相关依赖。

多核系统如何加速处置数据。左图:单核处置土办法,10 个任务都由单个计算节点处置。右图:双核处置土办法,每个节点处置 5 个任务,于是处置带宽就加倍了。

为了测试带宽,我导入了 time 你这些模块,在 read_csv() 函数前后调用了 time.time()。结果,Pandas 花了 8.38 秒从 CSV 文件中载入数据到内存,而 Modin 仅花了 3.22 秒,Modin 实现了 2.6 倍的加速。就是我修改导入库名称就还都可否实现原来的加速,从不太爽了!

历年来 Python 开发包的受欢迎程度。来源:

当处置大数据时,通常情形下,数据集的大小不用超出系统内存(RAM)的大小。因此 ,Modin 还4个多很重的标记,通过把你这些标记设置为 true,我门歌词 我门歌词 还都可否启动核外(out of core)模式。核外模式是指当内存匮乏用时,Modin 会使用硬盘空间,原来就使让人处置比内存大小更大的数据集。我门歌词 我门歌词 设置如下的环境变量来开启你这些功能:

译者丨夏夜

Pandas 是 Python 中处置数据的首选库,它使用起来很容易,非常灵活,都都可否处置不同类型和大小的数据,因此 它有少许的函数,这让操作数据青春恋爱物语是小菜一碟。

给 Modin 性能做基准测试

Pandas 默认是在单个 CPU 核上,采用单进程执行函数,这在小数据集上运行得很好,因此 人因此 觉察只能太满性能上的差异。因此 ,对于较大数据集,都要做更多的计算,这时因此 还只使用单个 CPU 核,就会刚开使感觉到性能受到影响了。对于具有百万行甚至数十亿行的数据集,Pandas 每次只计算4个多数。

Pandas 我我觉得是 Python 中用于数据处置的库,但它都会为高性能数据处置而打造的。本文将带你了解最近新推出的代码库 Modin,它是专为 Pandas 分布式计算而开发的,都都可否加速处置数据。

本文接下来的例子和基准测试,我门歌词 我门歌词 打算使用来自 Kaggle 的 CS:GO Competitive Matchmaking Data 数据集。CSV 文件中的每一行都涵盖了 CS:GO 比赛中的一轮数据。

因此 情形下,Pandas 实际上会比 Modin 运行得放慢,即使在你这些有着 5,992,097(几乎 10000 万)行的大数据集上。下面表格展示了 Pandas 和 Modin 在因此 实验上的运行时间。

Pandas 数据帧(左图)作为整块存储,且只发送到4个多 CPU 核。Modin 数据帧(右图)在行和列方向上被切分成了小块,每块都还都可否被发送到不同的 CPU 核(可发送到的核数取决于系统中最大核数)。

点个在看少个 bug

理论上讲,并行计不是很容易的,只都要把数据集不同次责的计算应用到每个可用的 CPU 核上。对于 Pandas 的数据帧,基本的想法统统把你这些数据帧分成好十几条 ,块数和你机器上的 CPU 核数量相等,让每4个多 CPU 核计算其中一块。最后,我门歌词 我门歌词 再把计算结果汇总,你这些汇总操作计算量从不大。

在 Pandas 中生成了4个多数据帧后,我门歌词 我门歌词 的目标是用最快的土办法执行因此 计算因此 处置工作,比如因此 是要求解每列的平均数(使用 mean() 函数)、根据groupby字段对数据分组、移除所有重复数据(使用 drop_duplicates() 函数),因此 是 Pandas 中因此 内建的函数。

对 Modin 的操作建议

我门歌词 我门歌词 要做的第4个多测试统统简单地用 read_csv() 函数读取数据。使用 Pandas 因此 Modin 实现你这些功能的代码是完正一样的。

因此 Modin 老要那么 快吗?