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

  • 时间:
  • 浏览:23
  • 来源:5分排列3-首页

我们歌词 都都 要做的第一另一个测试就是 简单地用 read_csv() 函数读取数据。使用 Pandas 机会 Modin 实现这个功能的代码是删剪一样的。

Modin 还是一另一个非常新的库,开发和扩展后会 不断进行中。有些有些,后会 所有的 Pandas 函数都得到了删剪加速。机会你使用了 Modin 中还这么 加速的函数,它会默认使用 Pandas 函数版本,有些有些曾经 就不让产生任何 bug 机会错误。想查看 Modin 中支持的 Pandas 函数加速的删剪列表,请浏览该页面。

Pandas 默认是在单个 CPU 核上,采用单系统进程运行运行执行函数,这在小数据集上运行得很好,机会你机会觉察非要不让 性能上的差异。因此,对于较大数据集,前要做更多的计算,这时机会还只使用单个 CPU 核,就会结束英语 感觉到性能受到影响了。对于具有百万行甚至数十亿行的数据集,Pandas 每次只计算一另一个数。

多核系统怎么加速处理数据。左图:单核处理法律法律依据 ,10 个任务都由单个计算节点处理。右图:双核处理法律法律依据 ,每个节点处理 5 个任务,于是处理效率就加倍了。

当处理大数据时,通常情况汇报下,数据集的大小不让超出系统内存(RAM)的大小。因此,Modin 还一另另一个有点硬的标记,通过把这个标记设置为 true,我们歌词 都都 可不前要启动核外(out of core)模式。核外模式是指当内存不够用时,Modin 会使用硬盘空间,曾经 就使因此你处理比内存大小更大的数据集。我们歌词 都都 设置如下的环境变量来开启这个功能:

我们歌词 都都 预期 Modin 对类事操作机会运行得很好,机会它并能处理血块的数据。代码如下所示:

Pandas 中老要 使用的数据帧清理函数是.fillna() 函数。这个函数搜索数据帧中值为 NaN 的元素,将其值替换为你指定的值,这其包含血块的操作。Pandas 不得不遍历每一行每一列来找到 NaN 值因此替换它们。这里使用 Modin 来操作就再适合不过了,机会我们歌词 都都 这里是对一另一个简单操作重复有些有些次。

作者丨George Seif

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

对 Modin 的操作建议

Pandas 是 Python 中处理数据的首选库,它使用起来很容易,非常灵活,并能处理不类事型和大小的数据,因此它有血块的函数,这让操作数据你以为是小菜一碟。

理论上讲,并行计与非 很容易的,只前要把数据集不同每段的计算应用到每个可用的 CPU 核上。对于 Pandas 的数据帧,基本的想法就是 把这个数据帧分成好几只,块数和你机器上的 CPU 核数量相等,让每一另一个 CPU 核计算其中一块。最后,我们歌词 都都 再把计算结果汇总,这个汇总操作计算量不须大。

因此 Modin 老要 这么 快吗?

预警以及最后的基准测试

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

为了在执行并行处理时完成血块繁重的工作,Modin 可不前要使用 Dask 机会 Ray 。这个另一个库后会 用 Python API 写的并行计算库,因此你在运行时挑选其一与 Modin 一起去使用。Ray 是目前为止最安全的,机会它更加稳定——而 Dask 后端还是实验性质的。

嗯,固然不须老要 这么 快。

说到这里,理论每段机会介绍得足够多啦。因此你门 来看看代码和性能的基准测试吧!

策划丨蔡芳芳

上图是一另一个简单示例。Modin 实际上采用了一另一个分块管理器,它可不前要基于操作类型来改变分块大小和形状。类事,有个操作前要删剪的行机会列。在这个情况汇报下,分块管理器)会以它能发现的最优法律法律依据 执行切分,并把分块分散发送到 CPU 核上,它是很灵活的。

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

想象一下这个例子,你一另另一个数据帧,它有有些有些列,却非要寥寥几行。有些库只会在行这个维度做切分,在这个例子中并行度就不够了,机会我们歌词 都都 的列数大于行数。因此有了 Modin,机会它会在一另一个维度进行切分,有些有些不管数据帧是宽的(列数较多)还是长条形的(行数较多),机会两类情况汇报兼具时,其对那先 数据帧的并行处理就都很高效了。

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

好了,你机会掌握了 Modin 模块!这是一篇 Modin 加速 Pandas 函数的使用指南。只前要修改 import 导入语句即可实现加速。希望大慨在有些情况汇报下,因此你发现 Modin 对加速 Pandas 函数有所帮助。

译者丨夏夜

Modin 是怎么用 Pandas 做并行处理的

在前面一节中,我们歌词 都都 提到了 Pandas 只用一另一个 CPU 核做数据处理的法律法律依据 。很自然,这成了一另一个大大的瓶颈,有点硬是对于较大的数据帧,缺少计算资源会给性能带来较大影响。

以上代码中,我们歌词 都都 将一另一个数据帧群克隆了 5 次进行连接。Pandas 可不前要在 3.56 秒内完成这个连接操作,而 Modin 只花了 0.041 秒,Modin 实现了 86.83 倍的加速!看起来即使我们歌词 都都 非要 6 个 CPU 核,数据帧的分块对加速也起了很大的作用。

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

点个在看少个 bug

有些情况汇报下,Pandas 实际上会比 Modin 运行得很快,即使在这个有着 5,992,097(几乎 10000 万)行的大数据集上。下面表格展示了 Pandas 和 Modin 在有些实验上的运行时间。

因此你想看 ,有些操作,Modin 明显很快,通常是读取数据和查找数据。有些操作,比如进行统计计算,Pandas 会快有些有些。

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

为了测试效率,我导入了 time 这个模块,在 read_csv() 函数前后调用了 time.time()。结果,Pandas 花了 8.38 秒从 CSV 文件中载入数据到内存,而 Modin 仅花了 3.22 秒,Modin 实现了 2.6 倍的加速。只要修改导入库名称就可不前要实现曾经 的加速,不须太爽了!

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

给 Modin 性能做基准测试

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

默认情况汇报下,Modin 会使用你的机器上所有可用的 CPU 核。机会有些情况汇报下,你希望限制 Modin 使用的 CPU 核数量,有点硬是当你还想在别的地方使用那先 核的算力的完后 。我们歌词 都都 可不前要通过 Ray 模块中的初始化设置来限制 Modin 能使用的 CPU 核数量,机会 Modin 会在后台使用 Ray 配置。

结论

因此你门 在数据帧上做有些计算量大的操作看下。将几只数据帧连接起来是 Pandas 中的一另一个常用操作——我们歌词 都都 的数据机会包含在几只机会更多的 CSV 文件中,我们歌词 都都 不得不一次读入一另一个文件,再进行数据帧连接。我们歌词 都都 在 Pandas 和 Modin 中只需调用 pd.concat() 函数就可不前要很容易做到这点。

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

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

在 Pandas 中生成了一另一个数据帧后,我们歌词 都都 的目标是用最快的法律法律依据 执行有些计算机会处理工作,比如机会是要求解每列的平均数(使用 mean() 函数)、根据groupby字段对数据分组、移除所有重复数据(使用 drop_duplicates() 函数),机会是 Pandas 包含些内建的函数。

这正是 Modin 所采用的法律法律依据 ,它把数据帧切割成不同每段,每个每段后会 被送到不同的 CPU 核。Modin 会一起去从行和列一另一个维度对数据帧切分。这使得 Modin 的并行处理可不前要适应任何形状的数据帧。

因此你门 来看下 Modin 后会 怎么运行的,因此看几只代码用例。