当前位置: 首页 > 科技观察

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

时间:2023-03-16 15:25:20 科技观察

多么坚强的朱莉娅!读取CSV数据性能比R和Python提升高达22倍工欲善其事,必先利其器。一种方便高效的语言对于数据工作者来说至关重要。目前,数据科学以压倒性优势用于R、Python、Java、MatLab和SAS。其中,Python和R应用最为广泛。然而,自2009年Julia出现以来,凭借其在速度、性能、易用性和语言互操作性等方面的优势,又掀起了新浪潮。最近,使用Julia、Python和R对CSV读取速度进行了基准测试。它选择了3个不同的CSV解析器:R的fread、Pandas的read_csv和Julia的CSV.jl,在R、Python的同类CSV解析器中被认为是“最好的”,和朱莉娅分别。然后用它们分别读取8个不同的真实数据集。那么测试的结果如何呢?一起来看看吧。同构数据集的性能首先,对同构数据集进行性能测试。性能指标是随着线程数从1增加到20加载数据集所花费的时间。由于Pandas不支持多线程,因此报告中的所有数据都是单线程的速度。FloatDataset第一个数据集包含按1000k行和20列排列的浮点值。Pandas需要232毫秒来加载这个文件。首先,单线程下,data.table(fread)比CSV.jl快1.6倍。当使用多线程处理时,CSV.jl表现更好,速度是data.table的两倍多。单线程CSV.jl是没有多线程的Pandas(Python)的1.5倍,而多线程CSV.jl可以达到11倍。StringDatasetI这个数据集在并且有1000k行20列,所有列都没有缺失值。Pandas需要546毫秒来加载文件。使用R,添加线程似乎不会带来任何性能提升。单线程CSV.jl比data.table快2.5倍,在10个线程中,CSV.jl比data.table快14倍左右。StringDatasetII此数据集与StringDatasetI中的大小相同。不同之处在于每一列都有缺失值。熊猫需要300毫秒。在单线程中,CSV.jl比R快1.2倍,在多线程中,CSV.jl大约快5倍。AppleStockDataset该数据集包含50000k行和5列,大小为2.5GB。这些是AAPL股票的开盘价、最高价、最低价和收盘价。价格的四列是浮点值,一列是日期。单线程CSV.jl比R从data.table读取快约1.5倍。而多线程,CSV.jl大约快22倍!Pandas的read_csv读取需要34秒,这比R和Julia都慢。异构数据集的性能下一步是异构数据集的性能测试。混合数据集该数据集有10k行和200列。这些列中包含的数据值类型是:String、Float、DateTime、Missing。Pandas大约需要400毫秒来加载此数据集。CSV.jl在单线程中比R快2倍,在10个线程中快10倍。MortgageLoanRiskDataset从Kaggle获得的MortgageLoanRiskDataset是一个具有356k行和2190列的混合数据集。这些列是异构的,它们的数据值类型有:String、Int、Float、Missing。Pandas需要119秒来读取这个数据集。单线程data.table读取速度大约是CSV.jl的两倍。但是,如果线程更多,Julia的速度与R一样快或略快。Widedataset这是一个相当宽的数据集,有1000行和20k列。数据集中包含的数据值类型有:String、Int。Pandas需要7.3秒来读取数据集。在这种情况下,单线程data.table比CSV.jl快5倍左右。加入线程后,CSV.jl比R略慢。FannieMaeAcquisitionDataset从FannieMae网站下载的数据集有4000k行25列,数据类型有:Int,String,Float,Missing。单线程data.table比CSV.jl快1.25倍。然而,随着线程数量的增加,CSV.jl的性能不断提高。CSV.jl的多线程速度大约快4倍。总结纵观8个测试:可以看出,Julia的CSV.jl在所有8个数据集中始终比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-aa77376fb96Julia、Python、R测试中的技术更新引发网友讨论我们对“技术刷新”的讨论更加热烈。有网友对Julia寄予厚望:在过去的十年里,大多数生态系统都对Python产生了巨大的价值,尤其是将MATLAB抛在了后面。我认为从旧技术到新技术的长达十年的过渡并不是一个糟糕的时间尺度,甚至不接近于网络技术的复制。Julia对Python的改进足以保证在未来5到10年内进行转换,并以同样的方式将Python抛在后面。不过也有网友表达了对“更新换代成本”的担忧:我认为Python生态在过去1-2年内已经成熟并成为标准,具有很大的价值。从头开始使用一门新语言(即使它可能稍微好一点)会浪费很多精力。从Python2过渡到3一直是一场噩梦。我知道Julia和Python之间存在一些互操作性,但很多东西是不可互操作的,并且在数组索引等方面存在严重差异。为什么人们不能仅仅依靠某种技术,让它成熟并享受越来越高的功能呢?为什么我们总是要撕毁一切并重新开始?