木易 发自 凹非寺 
量子位 报道 | 公众号 QbitAI

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

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

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

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

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

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

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

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

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

字符串数据集 II

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

Pandas需要300毫秒。

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

苹果股价数据集

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

单线程CSV.jl比从data.table中读取的R速度快约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倍。

按揭贷款风险数据集

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

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

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

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

宽数据集

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

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

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

房利美收购数据集

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

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

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

总结

纵览8个测试:

可以看出,在所有八个数据集中,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抛在后面。

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

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

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

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

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

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

参考链接:
https://towardsdatascience.com/the-great-csv-showdown-julia-vs-python-vs-r-aa77376fb96
https://news.ycombinator.com/item?id=24746057

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

  1. python:获取微信好友列表信息(二)进行导出微信好友到csv数据读取与处理

    接上一篇:https://blog.csdn.net/seoyundu/article/details/81543656 代码中:对csv文件读取,并利用pandas库处理,统计出好友信息. pand ...

  2. 批式CSV数据读取【Alink使用技巧】

    基本操作 我们先下载个csv文件用作后面的测试数据. 将数据文件 http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris. ...

  3. java csv 追加_如何在Java中添加一个包含CSV数据的列

    基于@plirke示例代码和他的帮助,我编写了一个最终的工作代码.在这里分享它,这样它可能对有类似需求的人有用. import java.io.BufferedReader; import java. ...

  4. 电影数据读取、分析与展示(Python+Scrapy)

    目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 选题背景及意义 1 1.2 国内外研究现状 1 1.2.1 爬虫技术概述 1 1.2.2 爬虫设计者面临的问题与反爬虫技术现状 3 ...

  5. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  6. 深度学习入门笔记(十二):深度学习数据读取

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  7. 解析csv数据绘制曲线图

    一个解析csv数据的小工具,所做项目中要查看脉冲图谱,经理就让我这个刚入职的小萌新写了个小程序.同事将csv格式的脉冲数据发给我,我的想法就是,将这些csv里的数据作为纵轴,x++为横轴,绘制出折线图 ...

  8. python多进程写入mysql_Python实现 多进程导入CSV数据到 MySQL

    前段时间帮同事处理了一个把 CSV 数据导入到 MySQL 的需求.两个很大的 CSV 文件, 分别有 3GB.2100 万条记录和 7GB.3500 万条记录.对于这个量级的数据,用简单的单进程/单 ...

  9. 数据库冗余存储设计对读取性能影响的测试

    两张表 CREATE TABLE `test1` (`a` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,`b` mediumint(8) unsigne ...

最新文章

  1. swift 加载gif 框架图片
  2. 视频聊天创企Tribe获300万美元种子轮融资
  3. 学python买什么书好-学python3什么书好
  4. 插入,选择,归并,快速排序
  5. 提高ASP.NET首页性能的十大方法
  6. 151205 财务管理原理作业(笔试题型)
  7. [html] 网页上的验证码是为了解决什么问题?说说你了解的验证码种类有哪些
  8. Oracle程序开发小技巧(一)
  9. 用ASP连接DBF、DBC、MDB、Excel、SQL Server型数据库的方法:
  10. java实例化全局变量_静态/全局变量的内存隔离(多实例化)
  11. 离散数学第二版屈婉玲教材pdf_离散数学 第二版 [屈婉玲,耿素云,张立昂 编著] 2015年版...
  12. 大数据智能学院的硕士论文怎么写_大数据智能营销笔记本怎么样
  13. matlab fft能量守恒吗,功能关系 能量守恒定律
  14. AEAI Portal中集成百度地图
  15. hadoop安装作业
  16. 解决:AWVS(Acunetix)激活频繁失效(仅供学习)
  17. 混合开发Android FlutterActivity 的透明状态栏
  18. 【词汇辨析】Primary, main, prime and major “主要的、首要的”
  19. 小程序收集箱:批量调节图像曝光度、锐利度、对比度、亮度的demo
  20. Arduino按键控制MP3模块随机播放音乐(YX5300 MP3音乐模块)

热门文章

  1. 什么是按位移位(位移)运算符以及它们如何工作?
  2. python基础(1.5-1.7)
  3. href=#与href=javascript:void(0)的区别
  4. 升级Windows Phone Developer Tools Beta
  5. Autodesk MapGuide Enterprise 2011 Update 1 for Windows发布了
  6. VS2010 ,工程文件减肥
  7. C#判断文件是否存在方法
  8. 浅谈协同工作流的分布式应用
  9. sql2000安装时报错的问题--实例挂起和267目录名无效
  10. Java中的String字符串