聚焦全球热点新闻

主页
分享互联网新闻
黑丝人家资讯网-国内外新闻时事,奇事,新鲜事

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍

更新时间:2020-10-20 00:00:00点击:

  木易发自凹非寺 

  量子位报道公众号 QbitAI

  工欲善其事,必先利其器。

  一项便捷且高效的语言对于数据工作者来说是至关重要的。

  目前,数据科学绝大多数使用的是R、Python、Java、MatLab 和 SAS。

  其中,尤为 Python、R的使用最为广泛。

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图1)

  不过,Julia 自 2009 年出现以来,凭借其速度、性能、易用性及语言的互操性等优势,已然掀起一股全新的浪潮。

  最近,便有人使用 Julia、Python 和R对于CSV读取速度进行了基准测试。

  其选用来 3 个不同的 CSV 解析器:

R的 fread、Pandas 的 read_csv、Julia 的 CSV.jl

  这三者分别在R,Python 和 Julia 中被认为是同类 CSV 解析器中“最佳” 。

  之后使用他们分别读取了 8 个不同真实数据集。

  那么,测试的结果又是如何呢?让我们来一起看下。

  同构数据集的性能

  首先从同构数据集开始进行性能测试。

  性能指标是随着线程数从 1 增加到 20 而加载数据集所花费的时间。

  由于 Pandas 不支持多线程,因此报告中的所有数据均为单线程的速度。

  浮点型数据集

  第一个数据集包含以 1000k 行和 20 列排列的浮点值。

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图2)

  Pandas 需要 232 毫秒来加载此文件。

  首先在单线程下,data.table(fread)比 CSV.jl 快 1.6 倍。

  而在使用多线程处理时,CSV.jl 则表现得更好,是 data.table 速度的 2 倍以上。

  单线程 CSV.jl 是没有多线程的 Pandas(Python)的 1.5 倍,而多线程的 CSV.jl 可以达到 11 倍。

  字符串数据集 I

  此数据集在且具有 1000k 行和 20 列,并且所有列中不存在缺失值。

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图3)

  Pandas 需要 546 毫秒来加载文件。

  使用R,添加线程似乎不会导致任何性能提升。

  单线程 CSV.jl 比 data.table 快 2.5 倍,而在 10 个线程中,CSV.jl 则大约比 data.table 快 14 倍。

  字符串数据集 II

  该数据集的大小与字符串数据集 I 中相同。区别在于,其每一列是存在缺失值的。

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图4)

  Pandas 需要 300 毫秒。

  单线程中,CSV.jl 比R快 1.2 倍,而多线程相比,CSV.jl 则快约 5 倍。

  苹果股价数据集

  该数据集包含 50000k 行和 5 列,大小为 2.5GB。这些是 AAPL 股票的开盘价、最高价、最低价和收盘价。价格的四个列是浮点值,并且有一个列是日期。

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图5)

  单线程 CSV.jl 比从 data.table 中读取的R速度快约 1.5 倍。

  而多线程,CSV.jl 的速度提高了约 22 倍!

  Pandas 的 read_csv 需要 34 秒才能读取,这比R和 Julia 都要慢。

  异构数据集的性能

  接下来是关于异构数据集的性能测试。

  混合型数据集

  此数据集具有 10k 行和 200 列。这些列包含的数据值类型有:String,Float,DateTime、Missing。

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图6)

  Pandas 大约需要 400 毫秒来加载此数据集。

  单线程中,CSV.jl 比R快 2 倍,而使用 10 个线程则快了 10 倍。

  按揭贷款风险数据集

  从 Kaggle 取得的按揭贷款风险数据集是一种混合型的数据集,具有 356k 行和 2190 列。这些列是异构的,其数据值类型有:String、Int、Float、Missing。

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图7)

  Pandas 需要 119 秒才能读取此数据集。

  单线程 data.table 读取大约比 CSV.jl 快两倍。

  但是,使用更多线程,Julia 的速度与R一样快或稍快。

  宽数据集

  这是一个相当宽的数据集,具有 1000 行和 20k 列。数据集包含的数据值类型有:String、Int。

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图8)

  Pandas 需要 7.3 秒才能读取数据集。

  在这种情况下,单线程的 data.table 大约比 CSV.jl 快 5 倍。线程的增加,CSV.jl 稍慢于R。

  房利美收购数据集

  从房利美网站上下载的数据集,有 4000k 行和 25 列,数据类型为:Int、String、Float,Missing。

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图9)

  单线程 data.table 比 CSV.jl 快 1.25 倍。

  但是,随着线程的增加,CSV.jl 的性能不断提高。CSV.jl 的多线程处理速度提高了约 4 倍。

  总结

  纵览 8 个测试:

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图10)

  可以看出,在所有八个数据集中,Julia 的 CSV.jl 总是比 Pandas 快,并且在多线程的情况下,它与R的 data.table 互有竞争。

  可见,在 CSV 读取方面,Julia 完全有能力与 Python 或和R竞争甚至做得更好。

  此外,Julia 的 CSV.jl 是独特的。

  因为它是唯一直接以其高级语言完全实现功能的,这有别于先用C实现然后由R或 Python 工具进行封装。

  因此,Julia 代码的后续性能将有着更多的可能。

  该项测试原文地址:

https://towardsdatascience.com/the-great-csv-showdown-julia-vs-python-vs-r-aa77376fb96

  技术更新的讨论

  在 Julia,Python 和R的测试中,引发了网友们更多关于“技术更新”的热烈讨论。

  有些网友对于 Julia 给予了极大的期待:

在过去的十年中,大多数生态系统在 Python 上都具有巨大的价值,尤其是将 MATLAB 抛在脑后。

我认为从旧技术过渡到新技术的十年之久并不是一个糟糕的时标,甚至没有接近网络技术的翻版。

Julia 对 Python 进行了足够的改进,可以保证在接下来的5-10 年内进行转换,并以相同的方式将 Python 抛在后面。

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图11)

  不过,也有网友表达了对“更新重置成本”的担忧:

我认为 Python 的生态系统已经成熟,并且在过去的1-2 年中已成为标准,这具有巨大的价值。

从头开始使用一种新语言(即使该语言可能稍好一些)会浪费很多精力。从 Python2 过渡到 3 已经是一场噩梦。

我知道 Julia 和 Python 之间存在一些互操作性,但是很多东西是无法互操作的,并且数组索引等方面存在令人讨厌的差异。

人们为什么不能仅仅依靠某种技术,使其成熟并享受越来越高的功能?为什么我们总是要撕毁一切并从头开始?

好强一个Julia!CSV数据读取,性能最高多出R、Python 22倍(图12)

  对此,你怎么看呢?欢迎在下方留言跟我们一起讨论。

  参考链接:

  https://towardsdatascience.com/the-great-csv-showdown-julia-vs-python-vs-r-aa77376fb96

  https://news.ycombinator.com/item?id=24746057