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

博客对比了Julia、Python和R在读取CSV数据时的性能。测试显示,Julia的CSV.jl在多线程处理中表现出色,尤其在处理大型数据集时,速度远超Pandas,并且在某些情况下甚至超越R的data.table。这表明Julia在数据科学领域的竞争力正在增强。
摘要由CSDN通过智能技术生成
fa8e1f6505a6167497ddd5b71454de9b.png

木易 发自 凹非寺

量子位 报道 | 公众号 QbitAI

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

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

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

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

7a6385adef1208bd6a7482c1c1d1fafc.png

不过,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列排列的浮点值。

c6d3f59032ec4a6230b677995a1fb2a3.png

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列,并且所有列中不存在缺失值。

fd13052f7fffc889b7948073c3efd527.png

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

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

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

字符串数据集 II

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

d0e7fed98e0f599617ff9c40448c9acb.png

Pandas需要300毫秒。

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

苹果股价数据集

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

d4544e8aaf1ce95a3304d773e95669e2.png

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

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

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

异构数据集的性能

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

混合型数据集

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

854ba76de933f4884262ddd3f07f6029.png

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

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

按揭贷款风险数据集

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

76ab3da1f7ac4802816c006533b13ac9.png

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

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

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

宽数据集

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

d6ee0ef9b55b0b1c8b0f5607ffa99599.png

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

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

房利美收购数据集

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

898e54cd17c9e36b67e942ff26f837f9.png

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

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

总结

纵览8个测试:

1d4fe3a15cb0a9b3fdfb3985c327316d.png

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

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值