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

  • 时间:
  • 浏览:3
  • 来源:5分快3-官网

对 Modin 的操作建议

点个在看少个 bug

我门歌词 要做的第有四个 测试但会 但会 简单地用 read_csv() 函数读取数据。使用 Pandas 是是由于 Modin 实现你这人功能的代码是详细一样的。

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

这正是 Modin 所采用的土办法 ,它把数据帧切割成不同次要,每个次要都在被送到不同的 CPU 核。Modin 会一起从行和列有四个 维度对数据帧切分。这使得 Modin 的并行避免能只能适应任何形态的数据帧。

策划丨蔡芳芳

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

预警以及最后的基准测试

结论

Pandas 是 Python 中避免数据的首选库,它使用起来很容易,非常灵活,不需要都都可不能否 避免不累似 型和大小的数据,倘若 它有几滴 的函数,这让操作数据简直是小菜一碟。

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

为了在执行并行避免时完成几滴 繁重的工作,Modin 能只能使用 Dask 是是由于 Ray 。这有四个 库都在用 Python API 写的并行计算库,倘若你在运行时确定 其一与 Modin 一起使用。Ray 是目前为止最安全的,是是由于它更加稳定——而 Dask 后端还是实验性质的。

嗯,嘴笨 不需要时不时这麼快。

我我不需要们来看下 Modin 都在怎么运行的,倘若 看几只代码用例。

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

上图是有四个 简单示例。Modin 实际上采用了有四个 分块管理器,它能只能基于操作类型来改变分块大小和形态。累似 ,有个操作需用详细的行是是由于列。在你这人状态下,分块管理器)会以它能发现的最优土办法 执行切分,并把分块分散发送到 CPU 核上,它是很灵活的。

Modin 是怎么用 Pandas 做并行避免的

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

默认状态下,Modin 会使用你的机器上所有可用的 CPU 核。是是由于但会 状态下,你希望限制 Modin 使用的 CPU 核数量,不得劲是当你还想在别的地方使用那先 核的算力的时候。我门歌词 能只能通过 Ray 模块中的初始化设置来限制 Modin 能使用的 CPU 核数量,是是由于 Modin 会在后台使用 Ray 配置。

给 Modin 性能做基准测试

作者丨George Seif

译者丨夏夜

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

Pandas 中时不时使用的数据帧清理函数是.fillna() 函数。你这人函数搜索数据帧中值为 NaN 的元素,将其值替换为你指定的值,这其带有几滴 的操作。Pandas 不得不遍历每一行每一列来找到 NaN 值倘若 替换它们。这里使用 Modin 来操作就再适合不过了,是是由于我门歌词 这里是对有四个 简单操作重复但会 但会 次。

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

倘若你就看,但会 操作,Modin 明显加快速率,通常是读取数据和查找数据。但会 操作,比如进行统计计算,Pandas 会快但会 但会 。

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

我门歌词 预期 Modin 对累似 操作是是由于运行得很好,是是由于它不需要都都可不能否 避免几滴 的数据。代码如下所示:

以上代码中,我门歌词 将有四个 数据帧克隆qq了 5 次进行连接。Pandas 能只能在 3.56 秒内完成你这人连接操作,而 Modin 只花了 0.041 秒,Modin 实现了 86.83 倍的加速!看起来即使我门歌词 只能 6 个 CPU 核,数据帧的分块对加速也起了很大的作用。

当避免大数据时,通常状态下,数据集的大小不需要超出系统内存(RAM)的大小。倘若 ,Modin 还有有四个 不得劲的标记,通过把你这人标记设置为 true,我门歌词 能只能启动核外(out of core)模式。核外模式是指当内存过低用时,Modin 会使用硬盘空间,从前就使倘若你避免比内存大小更大的数据集。我门歌词 设置如下的环境变量来开启你这人功能:

想象一下你这人例子,你有有四个 数据帧,它有但会 但会 列,却只能寥寥几行。但会 库只会在行你这人维度做切分,在你这人例子中并行度就过低了,是是由于我门歌词 的列数大于行数。倘若 有了 Modin,是是由于它会在有四个 维度进行切分,但会 但会 不管数据帧是宽的(列数较多)还是长条形的(行数较多),是是由于两类状态兼具时,其对那先 数据帧的并行避免就都很高效了。

我我不需要们在数据帧上做但会 计算量大的操作看下。将几只数据帧连接起来是 Pandas 中的有四个 常用操作——我门歌词 的数据是是由于带有在几之后是由于更多的 CSV 文件中,我门歌词 不得不一次读入有四个 文件,再进行数据帧连接。我门歌词 在 Pandas 和 Modin 中只需调用 pd.concat() 函数就能只能很容易做到这点。

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

说到这里,理论次之后是由于介绍得足够多啦。我我不需要们来看看代码和性能的基准测试吧!

好了,你是是由于掌握了 Modin 模块!这是一篇 Modin 加速 Pandas 函数的使用指南。只需用修改 import 导入句子即可实现加速。希望要花费在但会 状态下,倘若你发现 Modin 对加速 Pandas 函数有所帮助。

但会 状态下,Pandas 实际上会比 Modin 运行得加快速率,即使在你这人有着 5,992,097(几乎 5000 万)行的大数据集上。下面表格展示了 Pandas 和 Modin 在但会 实验上的运行时间。

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

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

倘若 Modin 时不时这麼快吗?

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

Pandas 默认是在单个 CPU 核上,采用单程序运行执行函数,这在小数据集上运行得很好,是是由于你是是由于觉察只能太久性能上的差异。倘若 ,对于较大数据集,需用做更多的计算,这时是是由于还只使用单个 CPU 核,就会结束了感觉到性能受到影响了。对于具有百万行甚至数十亿行的数据集,Pandas 每次只计算有四个 数。

Modin 还是有四个 非常新的库,开发和扩展都在不断进行中。但会 但会 ,都在所有的 Pandas 函数都得到了详细加速。是是由于你使用了 Modin 中还这麼加速的函数,它会默认使用 Pandas 函数版本,但会 但会 从前就不需要产生任何 bug 是是由于错误。想查看 Modin 中支持的 Pandas 函数加速的详细列表,请浏览该页面。

Pandas 嘴笨 是 Python 中用于数据避免的库,但它都在为高性能数据避免而打造的。本文将带你了解最近新推出的代码库 Modin,它是专为 Pandas 分布式计算而开发的,不需要都都可不能否 加速避免数据。

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

倘若 ,大多数用于数据科学的现代化机器都要花费有 2 个 CPU 核,这是由于,在有 2 个 CPU 核的机器上,使用 Pandas 的默认配置时,要花费有 500% 的计算机算力都被闲置了。是是由于你有 4 个核(现代的 Intel i5)是是由于 6 个核(现代的 Intel i7),状态那就更糟糕了,是是由于 Pandas 就都在为有效利用多核算力而设计的。