一份语言选择指南带你玩数据科学,选出你心中支持的语言

摘要: 数据科学是一个热门的领域,本文介绍数据科学家目前使用的一些热门编程语言,主要是从通用性、性能等方面分析,想入门的或行业研究者可以参考并发表一下自己的观点哦。

09-08 17:10 首页 云栖社区

摘要: 数据科学是一个热门的领域,本文介绍数据科学家目前使用的一些热门编程语言,主要是从通用性、性能等方面分析,想入门的或行业研究者可以参考并发表一下自己的观点哦。


更多深度文章,请关注:https://yq.aliyun.com/cloud



随着大数据时代的到来,网络每天会产生大量的数据,一些行业会对这些数据进行分析并协助企业不断地发展新业务、创建运营模式等,比如电子商务、推荐系统等。那么谁对这些大数据进行分析呢?对应的工作领域是数据科学(Data Science),该领域需要结合先进的统计知识、定量分析能力和编程能力。涉及到编程,大家都会面临一个问题,有太多的编程语言可供选择,那么哪些编程语言适合数据科学领域呢?虽然没有正确答案,但想成为一名成功的数据科学家将考虑以下几点:

特异性

当涉及到先进的数据科学时,你将不仅仅是老瓶装新酒了,需要学习掌握你所选择的编程语言提供的特定领域的各种软件包和模块。

一般性

顶尖数据科学家将具有全面良好的编程技巧以及处理大量数据的能力。科学数据家的日常工作大多是围绕原始数据进行一些处理或数据清洗。

效率

在快节奏的商业数据科学世界里,一般要尽快完成这项工作。同时,这也使得技术债务蔓延——只有明智的做法可以最小化它。

性能

在某些情况下,优化代码的性能显得至关重要,尤其是在处理大量的关键任务数据时。编译语言通常比解释语言快得多;同样,静态类型语言比动态类型的故障要多得多。显而易见,权衡这些会下降生产力。在某种程度上,这被看作是一个双刃剑(一般性-特异性,性能-效率)。每一种语言都会面临这个问题。考虑到这些核心原则,让我们看一下数据科学中使用的一些较流行的编程语言。以下是结合自己的个人经验和研究,仅供参考!

R

你所需要知道的



R语言诞生于1980年左右的S语言的一个分支,目前该项目是由R语言统计计算基金会支持。


许可证


免费!


赞成的理由


开放的源码软件包,R语言有一个几乎涵盖所有的定量和统计应用程序的数据包,包括神经网络、非线性回归模型等;


基础设施是非常全面的、内置一些统计功能和方法,处理矩阵代数效果好。


数据可视化的能力很强,比如ggplot2;


反对的理由


性能方面,R语言不是一个快速的语言;


领域特殊性,R语言对于统计和数据科学是很好的,但不适合通用程序设计;


孤僻,R语言有一些不同于其他编程语言的特点,例如:索引从1开始等;


裁决—— “为它的设计而精彩”


R语言是一个功能强大的语言,擅长各种统计和数据可视化的应用并开放源代码。

Python


你所需要知道的


它由Guido van Rossum于1991年发明,已经成为一个非常流行的通用语言,并在数据科学界广泛使用的。目前主要版本是目前3.6和2.7。


许可证


免费!


赞成的理由


Python是一个受欢迎的主流通用程序设计语言,它有广泛的目标模块和社区支持及一些 API;


Python是一种易学的语言;


一些软件包如pandas、scikit-learn、tensorflow使得Python成为机器学习应用的不二选择;


反对的理由


类型安全性:Python是动态类型语言,类型错误是不可预料的;


对于具体的数据统计和分析的目的,有更快和更安全的通用语言替代Python;


裁决——“优秀的全才”


Python语言对数据科学而言是一个很好的选择。很多数据科学过程都围绕ETL过程(提取、转换和加载),这使得Python的通用性非常适合。还有一些库比如tensorflow使Python在机器学习领域表现优异。

SQL


你所需要知道的


SQL(结构性查询查询语言)定义、管理和查询关系数据库。自1974以来发生了许多的改变,但核心原则保持不变。


许可证


不同—— 某些是免费的,其他是收费的!


赞成的理由


在查询、更新和操纵数据库非常高效;


声明性语法使得SQL语言非常易读,而且没有什么歧义;


SQL具有非常广的应用范围,使其成为一个非常熟悉的有用语言;


反对的理由


SQL的分析能力是相当有限的——除了汇总、计数和平均数据等操作外,你的选择是有限的;


对于来自命令式背景的程序员,对SQL的声明性语法会呈现出一个学习遗忘曲线;


实现SQL有许多不同工具比如PostgreSQL、SQLite等,操作起来难免会“头疼”;


裁决——“长期且高效”


SQL是有用的作为一个数据处理语言不是作为一种先进的分析工具。然而,大多数据科学过程依赖于ETL,SQL的长寿和效率证明了它对于现代数据科学家来说是一种非常有用的语言。

Java


你所需要知道的


Java是一个非常受欢迎的通用型语言,运行在Java虚拟机(JVM)上,目前由甲骨文公司支持。


许可证


第8版——免费!旧版本是收费的。


赞成的理由


无处不在,许多现代的系统和应用程序都是建立在一个java后端;


强类型,Java语言确保类型安全;


Java是一种高性能、通用的汇编语言,这使得它适合于编写高效的ETL生产代码和计算密集型机器学习算法;


反对的理由


对于特定的分析和更专门的统计程序而言,Java的冗长使得它不太可能成为首选;


相比于特定领域语言如R语言,没有大量的可供Java高级统计方法库;


裁决——“数据科学的有力竞争者”


如果将Java作为第一选择的数据科学语言而言,你会发现Java的高性能和类型安全的优势。然而,你没有考虑用于其他语言比如R或Python范围的具体软件包。

Scala


你所需要知道的


由Martin Odersky于2004年开发和发布,Scala运行在JVM的一种语言。它是一个多范式语言,支持面向对象和函数方法。集群计算框架Apache Spark是用Scala写的。


许可证


免费!


赞成的理由


Scala与Spark结合相当于高性能集群计算,对于使用高容量数据集的研究者来说,Scala是一种理想的选择;


多范式:Scala程序员可以两全其美,因为Scala提供面向对象和函数式编程范式;


Scala编译成Java字节码并运行在JVM上,使得它成为一个非常强大的通用型语言;


反对的理由


Scala的建立和运行需要依赖于一些特定的集成开发环境,比如Eclipse、IntelliJ;


语法和类型系统描述复杂。这使得那些学过动态语言如Python学者来说较困难;


裁决——“适合于大数据”


当它涉及到使用集群计算处理大数据时,那么Scala结合Spark是极好的解决方案,然而,如果你的应用程序不处理数据,Scala只会增加复杂度。

Julia


你所需要知道的


Julia发布于5年前,它在数值计算领域留下了深刻的印象,几个主要的组织早期采用它带动了它的发展。


许可证


免费!


赞成的理由


Julia是一个JIT(即时)编译语言,这让它提供了良好的性能,它还提供了像Python这样的简单、动态类型和脚本功能;


Julia专门设计用于数值分析,也能够进行通用编程;


可读性;


反对的理由


不成熟,作为一个新的语言,Julia的用户者使用一些数据包时会不稳定,但核心语言本身稳定;


有限的软件包,小的社区发展;


裁决——“明日之星”


Julia作为一种新兴的语言,它不像Python和R语言那样成熟,如果你愿意耐心,可以关注它在未来几年的发展。

MATLAB

你所需要知道的


MATLAB是一个在学术界和工业界应用的数值计算语言,由MathWorks公司于1984开发并投入市场。


许可证


专有——定价取决于你的使用情况


赞成的理由


为数值计算而设计。MATLAB非常适合复杂的数学要求,如信号处理、傅里叶变换和图像处理等;


数据可视化,MATLAB有一些强大的内置绘图功能;


MATLAB经常作为工程数学与应用数学等本科课程的一部分,因此,MATLAB在这些领域得到广泛应用;


反对的理由


专利许可证,根据使用情况(学术、个人或企业)可能要付昂贵的许可证,也有免费的替代品如Octave;


MATLAB不是通用编程的一个好选择;


裁决——“最好用的数学密集型应用程序”


MATLAB在工业界和学术界被广泛应用于定量和数值计算领域,使它成为数据科学一个重要选择。当你的应用程序或日常的应用需要密集、高级的数学功能时,MATLAB是你的不二选择。


其他语言

还有其他的主流语言,数据科学家对这些可能感兴趣,下面让我们快速的概述下!


C++


C++不是数据科学的共同选择,原因很简单,可能是一个生产力与效率的问题。


正如一个Quora用户提出:


“如果你写的代码做一些是为了特定的分析,可能只会运行这么一次,你愿意花30分钟写一个程序,运行10秒,或10分钟写一个程序,运行1分钟吗?”


这虽然有点道理,但是对于重要的生产级性能,C++是实现低级别优化的机器学习算法的极佳选择。


裁决——“不适合日常工作,但适合性能关键时的应用”

JavaScript


随着Node.js近年来的提升,JavaScript已经成为一个越来越重要的服务器端语言。然而,它在数据科学和机器学习领域的使用却受到了限制,以下是其几个缺点:


起步得晚(Node.js只有8岁!);


很少有一些相关的科学数据库和模块可用,这意味着没有真正主流的兴趣或动力;


性能虽好,但JavaScript也得到许多批评;


Node的强项是在异步I/O,广泛使用编译到JavaScript语言,可以想象下这对数据科学和实时ETL处理结合是多么的方便,但关键问题是这是否会与已经存在的东西有所不同。


裁决——“在JavaScript可以被视为一个重要的数据科学语言前还有许多工作要做”

Perl


Perl被称为“瑞士军刀的编程语言”,由于其作为一个通用脚本语言的通用性。它与Python有很多相似之处。但还没有像Python在数据科学领域那样流行。


考虑它在生物信息学等定量领域中的应用,这有点出人意料。当涉及到数据科学时,Perl有几个主要缺点:表现不是太优异、语法不友好,在开发数据科学专用库方面没有强的动力。在任何领域,动力都是关键。


裁决——“有用的通用脚本语言,但它没有为你的数据科学的简历提供真正的优势”

Ruby


Ruby是一个通用的、动态类型的解释型语言。然而,它没有像Python那样在数据科学上被广泛采用。


这似乎很奇怪,但这很有可能是由于Python在学术界的主导地位,以及正反馈效应,使用Python的人越多,导致更多的模块和框架被开发,同时会带来更多的人转向Python。虽然Sciruby项目带来的科学计算功能,如矩阵代数,但随着时间的推移,Python仍将引领潮流。


裁决——“对于数据科学而言,目前不是显而易见的选择,但这不会伤害你的简历”


结论

通过以上内容,现在你有了一个关于考虑数据科学的语言的指南。关键是要从一般性和特异性理解你的使用需求,以及个人针对性能和生产力而言谁优先的开发风格。


针对以上的内容,或许你有一个完全不同的建议,如果是这样的话,请在下面留言?回复,我期待听到你的回音。


感谢你的阅读!


往期精彩文章

1 Android热修复技术总结

2 看深度学习框架排名第一的TensorFlow如何进行时序预测

3 2017中国容器技术使用情况有奖调查

4 阿里巴巴机器学习系列课程


-END-

云栖社区

ID:yunqiinsight

云计算丨互联网架构丨大数据丨机器学习丨运维


点击“阅读原文”



首页 - 云栖社区 的更多文章: