加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

一行代码将Pandas加快4倍

发布时间:2020-01-14 17:51:04 所属栏目:移动互联 来源:站长网
导读:副问题#e# 固然Pandas的成果很是强盛,可是对付大数据集来说,确实是很慢的。 固然 panda 是 Python 顶用于数据处理赏罚的库,但它并不是真正为了速率而构建的。相识一下新的库 Modin,Modin 是为了漫衍式 panda 的计较来加快你的数据筹备而开拓的。 Pandas是处
副问题[/!--empirenews.page--]

固然Pandas的成果很是强盛,可是对付大数据集来说,确实是很慢的。

固然 panda 是 Python 顶用于数据处理赏罚的库,但它并不是真正为了速率而构建的。相识一下新的库 Modin,Modin 是为了漫衍式 panda 的计较来加快你的数据筹备而开拓的。

Pandas是处理赏罚 Python 数据的首选库。它易于行使,而且在处理赏罚差异范例和巨细的数据时很是机动。它有大量的函数,使得哄骗数据变得垂手可得。

一行代码将Pandas加快4倍


跟着时刻的推移,各类Python包的风行水平

可是有一个弱点:对付较大的数据集来说,panda“慢”。

默认环境下,panda 行使单个 CPU 内核作为单个历程执行其函数。这对付较小的数据集事变得很好,由于你也许不会留意到速率上的差别。可是,跟着数据集越来越大,计较劲越来越大,假如只行使单个 cpu 核,速率会受到很大的影响。它在数据集上统一时刻只能计较一次,但该数据集可以稀有百万乃至数十亿行。

然而,大大都用于数据科学的当代呆板都有至少 2 个 CPU 核。这意味着,以 2 个 CPU 核为例,在行使 pandas 时,50%或更多的计较机处理赏罚手段在默认环境下不会执行任何操纵。当你行使 4 核(当代 Intel i5)或 6 核(当代 Intel i7)时,环境会变得更糟。pandas 的计划初志并不是为了有用操作这种计较手段。

Modin是一个新的库,通过在体系全部可用的 CPU 核上自动分派计较来加快 pandas。有了它,对付任何尺寸的 pandas 数据数据集,Modin 声称可以或许以 CPU 内核的数目获得近乎线性的加快。

让我们看看它是怎样事变的,并通过一些代码示例举办声名。

Modin 怎样用 Pandas 并行计较

给定 pandas 中的 DataFrame ,我们的方针是以尽也许快的方法对其执行某种计较或处理赏罚。可以用*.mean()取每一列的均匀值,用groupby对数据举办分组,用drop_duplicates()*删除全部一再项,可能行使其他任何内置的 pandas 函数。

在前一节中,我们提到了 pandas 怎样只行使一个 CPU 核举办处理赏罚。天然,这是一个很大的瓶颈,出格是对付较大的 DataFrames,计较时就会示意出资源的缺乏。

理论上,并行计较就像在每个可用的 CPU 核上的差异数据点上应用计较一样简朴。对付一个 pandas 的 DataFrame,一个根基的设法是将 DataFrame 分成几个部门,每个部门的数目与你拥有的 CPU 内核的数目一样多,并让每个 CPU 核在一部门上运行计较。最后,我们可以聚合功效,这是一个计较上很 cheap 的操纵。

一行代码将Pandas加快4倍

多核体系怎样更快地处理赏罚数据。对付单核历程(左),全部10个使命都放在一个节点上。对付双核历程(右图),每个节点包袱5个使命,从而使处理赏罚速率更加。

这正是 Modin 所做的。它将 DataFrame 支解成差异的部门,这样每个部门都可以发送到差异的 CPU 核。Modin 在行和列之间分别 DataFrame。这使得 Modin 的并行处理赏罚可扩展到任何外形的 DataFrame。

想象一下,假如给你一个列多行少的 DataFrame。有些库只执行跨行分区,在这种环境下服从很低,由于我们的列比行多。可是对付 Modin 来说,因为分区是跨两个维度举办的,以是并行处理赏罚对付全部外形的数据流都是有用的,不管它们是更宽的(许多列)、更长的(许多行),照旧两者都有。

一行代码将Pandas加快4倍

panda的DataFrame(左)存储为一个块,只发送到一个CPU核。Modin的DataFrame(右)跨行和罗列办分区,每个分区可以发送到差异的CPU核上,直到用光体系中的全部CPU核。

上面的图是一个简朴的例子。Modin 现实上行使了一个“分区打点器”,它可以按照操纵的范例改变分区的巨细和外形。譬喻,也许有一个操纵必要整个行或整个列。在这种环境下,“分区打点器”将以它能找到的最优方法执行分区和分派到 CPU 核上。它长短常机动的。

为了在执行并行处理赏罚时完成大量沉重的事变,Modin 可以行使 Dask 或 Ray。它们都是行使 Python api 的并行计较库,你可以选择一个或另一个在运行时与 Modin 一路行使。Ray 今朝是最安详的一个,由于它更不变 —— Dask 后端是尝试性的。

已经有足够的理论了。让我们来看看代码和速率基准测试!

Modin 速率基准测试

安装 Modin 的最简朴的要领是通过 pip。下面的呼吁安装 Modin、Ray 和全部相干的依靠项:

pip install modin[ray] 

对付我们下面的例子和 benchmarks,我们行使了 Kaggle 的 CS:GO Competitive Matchmaking Data。CSV 的每一行都包括了 CS:GO 角逐中的一轮数据。

此刻,我们实行行使最大的 CSV 文件(有几个),esea_master_dmg_demo .part1.csv,它有 1.2GB。有了这样的体量,我们应该可以或许看到 pandas 有多慢,以及 Modin 是怎样辅佐我们加快的。对付测试,我行使一个 i7-8700k CPU,它有 6 个物理内核和 12 个线程。

我们要做的第一个测试是行使 read_csv()读取数据。Pandas 和 Modin 的代码是完全一样的。

### Read in the data with Pandasimport pandas as pds = time.time()df  

= pd.read_csv("esea_master_dmg_demos.part1.csv")e =  

time.time()print("Pandas Loading Time = {}".format(e-s))### Read in  

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读