https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping
自2014年以来,未对data.table基准进行更新。我听说某个地方Pandas
现在的速度比快data.table
。这是真的?有人做过基准测试吗?我以前从未使用过Python,但会考虑切换是否pandas
可以击败data.table
?
https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping
自2014年以来,未对data.table基准进行更新。我听说某个地方Pandas
现在的速度比快data.table
。这是真的?有人做过基准测试吗?我以前从未使用过Python,但会考虑切换是否pandas
可以击败data.table
?
Answers:
有人做过基准测试吗?
是的,您在问题中链接的基准已针对data.table和pandas的最新版本进行了更新。此外,还添加了其他软件。您可以在https://h2oai.github.io/db-benchmark中找到更新的基准测试。
不幸的是,该基准测试计划在125GB内存计算机上进行(而不是原来的244GB)。结果,pandas和dask无法groupby
对1e9行(50GB csv)数据进行尝试,因为它们在读取数据时会耗尽内存。因此,对于pandas vs data.table,您必须查看1e8行(5GB)数据。
不仅要链接您要的内容,我还要粘贴这些解决方案的最新时间。
请注意,这些时间已过时,
请访问https://h2oai.github.io/db-benchmark以获取更新的时间
| in_rows|question | data.table| pandas|
|-------:|:---------------------|----------:|------:|
| 1e+07|sum v1 by id1 | 0.140| 0.414|
| 1e+07|sum v1 by id1:id2 | 0.411| 1.171|
| 1e+07|sum v1 mean v3 by id3 | 0.574| 1.327|
| 1e+07|mean v1:v3 by id4 | 0.252| 0.189|
| 1e+07|sum v1:v3 by id6 | 0.595| 0.893|
| 1e+08|sum v1 by id1 | 1.551| 4.091|
| 1e+08|sum v1 by id1:id2 | 4.200| 11.557|
| 1e+08|sum v1 mean v3 by id3 | 10.634| 24.590|
| 1e+08|mean v1:v3 by id4 | 2.683| 2.133|
| 1e+08|sum v1:v3 by id6 | 6.963| 16.451|
| 1e+09|sum v1 by id1 | 15.063| NA|
| 1e+09|sum v1 by id1:id2 | 44.240| NA|
| 1e+09|sum v1 mean v3 by id3 | 157.430| NA|
| 1e+09|mean v1:v3 by id4 | 26.855| NA|
| 1e+09|sum v1:v3 by id6 | 120.376| NA|
在5个问题中,有4个问题的data.table速度更快,而且可以扩展。
只要注意这个时机是截至目前,其中id1
,id2
和id3
是字符型字段。那些将很快更改为分类 完成。此外,还有其他因素可能会在不久的将来影响这些时间安排(例如,并行分组 DONE)。我们还将为具有NA和完成的各种基数的 数据添加单独的基准。
此持续基准测试项目还有其他任务,因此,如果您对,和感兴趣join
,请确保稍后进行检查。
当然,我们欢迎您在项目回购中提供反馈!sort
read
blocksize
在read_csv
)。您是否尝试避免调用compute()
并将输出转储到磁盘上,以避免在内存中组装整个输出表?
我和一位同事对大熊猫和data.table之间的性能差异进行了一些初步研究。您可以在我们的Blog上找到研究(分为两部分)(您可以在此处找到第二部分)。
我们发现,在某些任务中,熊猫的性能明显优于data.table,但在某些情况下,data.table的速度要快得多。您可以自己检查一下,并告诉我们您对结果的看法。
编辑:
如果您不想详细阅读博客,这里是我们的设置和发现的简短摘要:
设定
我们比较pandas
和data.table
对以下操作(到目前为止)12个不同的模拟数据集,我们称之为场景。
该计算是在装有Intel i7 2.2GHz,4个物理内核,16GB RAM和SSD硬盘的计算机上执行的。软件版本为OS X 10.13.3,Python 3.6.4和R 3.4.2。分别使用的库版本为pandas为0.22和data.table为1.10.4-3
简而言之
data.table
选择列时似乎更快(pandas
平均要多花费50%的时间)pandas
过滤行速度更快(平均大约50%)data.table
似乎在排序方面要快得多(pandas
有时要慢100倍)pandas
请注意,我试图尽可能简化结果,以免使您无聊。要获得更完整的可视化效果,请阅读研究。如果您无法访问我们的网页,请给我发送消息,我将向您转发我们的内容。您可以在GitHub上找到完整研究的代码。如果您有想法如何改善我们的学习,请给我们发送电子邮件。您可以在GitHub上找到我们的联系人。
不会,实际上,如果数据集大小太大而导致熊猫崩溃,那么您基本上会陷入困惑,这很烂,甚至无法进行简单的groupby-sum。dplyr可能并不快,但不会弄乱。
我目前正在处理一些2G数据集,并且很简单print(df.groupby(['INCLEVEL1'])["r"].sum())
。
dplyr没有遇到此错误。
因此,如果熊猫可以处理数据集,那么我将使用熊猫,如果不能使用,请坚持使用R数据表。
是的,您可以通过简单的方法将dask转换回pandas数据帧,df.compute()
但这需要花费相当长的时间,因此您最好耐心等待pandas加载或读取数据表。