如果让你选择一种语言,你觉得Python和中文,哪个对于未来更重要?
最近,一直以高素质实习生项目闻名的高盛集团发布了一份《2017高盛调查报告》,针对全球2500名在高盛的夏季实习生调查, 当问到你认为“哪个语言在未来会更重要”时,在被调查的全球2500名80、90后优秀年轻人中,72%选了Python。
Python所代表的数据科学分析能力和编程能力正成为年轻人乃至整个世界最看好的热门或者说必备技能。而除了Python,数据科学领域还有大把语言可以选择,如何基于自己的需要选择一门最适合自己的编程语言开始学习呢?
本篇文章将详细对比解析数据科学领域最热门的几大“网红”编程语言:R,Python,SQL,Java, Scala,Matlab,JavaScript,Ruby,并从优缺点、适用领域几个方向让你迅速了解自己最需要哪一款。
数据科学结合了高大上的统计、数量分析理论与实打实的编程能力,是一个让人想想就有点小激动的工作领域。面对众多编程语言,胸怀大志的数据科学家们在术业有专攻之前难免会有乱花渐欲迷人眼之感。
尽管不同选择之间没有高低对错,但是有几点是必须要考虑清楚的。你在数据科学家这条路上能走多远取决于很多因素,具体包括:
深度
在高级数据科学的世界中,老调重弹是没有前途的。选定语言后,努力把各种包和模型都吃透。决定你掌握程度的首要因素是你能接触到哪些特定领域的包。
顶级数据科学家必须既是全面编程小能手,也是鼓捣数字神队友。数据科学日常工作的很大一部分都围绕着获取、加工原始数据或“数据清理”,而那些牛逼闪闪的各种机器学习包在这里都毫无用武之地。
数量
商用数据科学的步伐通常是快到飞起,因此出活儿快的好处简直数不清。这也使得技术部门能够悄悄地争取一席之地,而只有靠谱的做法才能让把工时降到最低。
质量
代码效果最大化有时具有举足轻重的意义,尤其是处理大批量关键数据的时候。编译语言在速度上往往远超解释语言;无独有偶,静态类型语言的故障率也远低于动态类型语言。显而易见,质的提升是以量的减少为代价的。
从某种意义上讲,我们可以画出这样一对轴线(广度-深度;数量-质量)。下面列出的每种语言都可以在上述范围内找到自己的位置。
心里有谱之后,我们一起来看看这些数据科学语言中的“网红”。下面的内容仅是本人及朋友、同事在研究和个人使用中总结出的数家之言,绝不是什么标准答案。排序基本上是按照“网红”程度来的,嘿喂狗~
1. R语言
(1) 简介
R语言以老前辈S语言直系后裔的身份,于1995年闪亮登场,此后一路高歌猛进,从成功走向成功。该项目目前采用的语言包括C、Fortran和R,得到了统计计算R联盟(R Foundation for Statistical Computing)的支持。
(2) 证书
免费哒!
(3) 优点
- 开源数据包质量过硬、领域明确、范围广泛。几乎所有你能想到的数量、统计应用都能找到相应的R包,比如神经网络、非线性回归、系统进化、进阶绘图等。
- 基础安装内置的统计功能和方法非常全面。此外,R语言尤其适合处理矩阵代数。
- 核心优势之一就是利用ggplot2等各种R语言库能够实现数据视觉化。
(4) 缺点
- 质量。R语言比较慢,这是板上钉钉的。
- 领域特定。R语言在统计和数据科学领域如鱼得水,但是在通用编程上就有些力不从心了。
- 不走寻常路。R语言的一些“小脾气”可能会让擅长其他语言的程序猿阴沟里翻船。举个栗子,采用多赋值运算从1开始索引,非传统数据结构。
(5) 小结:本职岗位的尖兵
R语言功能强大,在众多统计和数据可视化应用中表现出众;开源更是带来了大批活跃的贡献者。最近一个时期R语言的走红彰显了它在“本职工作”上的优异表现。
2. Python语言
(1) 简介
1991年,经Guido van Rossum(吉多·范罗苏姆)推出后,Python就成为了通用语言中的大热门,在数据科学社区中得到了广泛应用。目前使用的主流版本是3.6和2.7。
(2) 证书
免费哒!
(3) 优点
- 极受欢迎的主流通用编程语言,模型种类多、适用范围广,有众多社区支持。
- 许多在线服务都提供Python API。
- 上手简单。低门槛使其成为菜鸟程序猿的理想“初恋”。
- Pandas、scikit-learn和Tensorflow等包使Python在高级机器学习应用中也有很强的存在感。
(4) 缺点
- 型别安全:作为一个动态类型语言,Python时时刻刻求关注。类型错误(比如向心心念念期待着Integer的方法传递了一个String)差不多是家常便饭了。
- 对于特定的统计、数据分析问题,R包“海纳百川”式的涵盖范围使其在面对Python时有那么一丢丢优势;但是谈到通用语言,Python总能给你更快、更安全的选择。
(5) 小结:哪里需要哪里搬的好手
Python是数据科学语言的上佳之选,对象绝不仅限于初学者。很多数据科学流程都围绕着ETL(抽取-转换-加载)展开,这与Python的通用性简直是天作之合。诸如谷歌Tensorflow等库更使得Python在机器学习领域大出风头。
3. SQL语言
(1) 简介
结构化查询语言(SQL)是关系数据库的定义者、管理者和查询者。虽然自1974年面世后历经多次实现,但核心原则从未改变。
(2) 证书
看情况-有些实现是免费的,有些受版权保护。
(3) 优点
- 在关系数据库的查询、升级和操作上效率极高。
- 声明语法的使用让SQL通常都具有极强的可读性,比如“SELECT name FROM users WHERE age > 18”的意义就十分明确清晰。
- SQL应用范围广泛,因此熟悉该语言还是很有用的。程序猿们利用诸如SQLAlchemy等模块可以直接把SQL整合到其他语言中。
(4) 缺点
- SQL的分析能力十分有限-除了求和、计数和求平均数,你也没啥能选的。
- 具有命令式语言背景的程序猿可能需要一段时间来掌握SQL的声明语法。
- SQL具有众多实现,比如PostgreSQL、SQLite和MariaDB等。这些实现的差异之大使得互操作性成为了一个颇为棘手的问题。
(5) 小结:高效的经典款
与其作为高级分析工具,SQL在数据处理上表现得更加得心应手。然而,数据科学工作的大头都依赖于ETL,SQL的长盛不衰和简明高效恰恰证明这是一门值得现代数据科学家了解掌握的有用语言。
4. Java语言
(1) 简介
Java是在Java虚拟机上运行的一门非常受欢迎的通用语言。这个抽象计算系统能够实现跨平台的无缝移植。目前有甲骨文公司支持该语言。
(2) 证书
第八版-免费哒!旧版本受版权保护。
(3) 优点
- 无处不在。很多现代系统和应用都建立在Java后台上。它能够将数据科学的各种方法直接与现有的代码库整合;功能强大,你值得拥有。
- 强型别。需要确保型别安全时,Java单刀直入的风格对于那些至关重要的大数据应用而言简直是无价之宝。
- 作为一种高质量、通用型编译语言,Java非常适合编写高效的ETL产品代码和计算强大度的机器学习算法。
(4) 缺点
- Java冗长的代码并不适合专门分析和更为细致的统计应用。R和Python等动态类型语言的输出显然更胜一筹。
- 与R等领域明确的语言相比,Java并没有太多适用于高级统计方法的的库。
(5) 小结:数据科学的有力竞争者
把Java作为数据科学首选语言能够带来不少益处。将数据科学产品代码与现有代码库直接无缝整合的能力是众多公司梦寐以求的;你会发现,Java在此方面和型别安全上的优异表现是货真价实的加分项。然而,面对其它语言时,你也不得不面对没有各类统计特定包可用的现状。尽管如此,Java仍然值得拥有-尤其是你已经掌握了R和/或Python的情况下。
5. Scala
(1) 简介
由Martin Odersky开发,并于2004年发布,Scala是一种在JVM上运行的语言。 它是一种多范式语言,融合了面向对象和函数式编程。集群计算框架Apache Spark就是用Scala编写的。
(2) 证书
免费!
(3) 优点
- Scala + Spark =高性能集群计算。 Scala是使用大容量数据集的人的理想语言选择。
- 多范式:Scala兼容面向对象和函数式编程,这使得Scala的程序员们两种范例都可用。
- Scala被编译为Java字节码并在JVM上运行。 这使得其具有了与 Java语言本身的互操作性,使Scala成为非常强大的通用语言,同时也非常适合数据科学。
(4) 缺点
- 对于初学者来说Scala并不是一个简单的编程语言来起步和运行。 你最好的选择是下载sbt并使用特定的Scala插件设置Eclipse或IntelliJ等IDE。
- 其语法和类型系统通常被认为是比较复杂的。这为来自动态语言(如Python)的用户提供了一个陡峭的学习曲线。
(5) 结论:完美,适合大数据
当使用集群计算来处理大数据时,Scala + Spark是非常棒的解决方案。 如果你有Java和其他静态类语言的经验,你也将会非常欣赏Scala的性能。然而,如果你的应用程序无法用来处理一定量的数据,这恰恰证明了Scala增加的复杂性,你可能会发现使用其他语言(如R或Python)的效率要高得多。
6. Julia
(1) 简介
5年前发布的Julia在数值计算领域让人印象深刻。由于几家主要机构(多为金融行业)的早日采用,其形象得到了提升。
(2) 证书
免费!
(3) 优点
- Julia是一种JIT(“准时”)的编译语言,可以提供良好的性能。 它还提供像Python一样简单、 动态类型和脚本功能的解释性编程语言。
- Julia是专为数值分析而设计的。它也能够进行通用编程。
- 可读性。 该语言的许多用户将此视为其主要优点。
(4) 缺点
- 成熟性。 作为一种新的语言,一些Julia的用户在使用程序包时经历了不稳定。但其核心语言本身据悉是足够稳定,可运用的。
- 程序包数量有限是语言处于新生阶段和开发社群较小的另一个后果。不像建立很长时间的R和Python,Julia目前在软件包上还没有太多的选择性。
(5) 结论:它是未来
Julia的主要问题目前并不能过分苛责。作为最近开发的语言,它不像Python和R这些竞品那样成熟和生产就绪。但是,如果你愿意耐心等待,那么在未来几年里,我们有充分的理由去密切关注Julia的进一步发展。
7. MATLAB
(1) 简介
MATLAB是在学界和业界广泛使用的一种老牌数值计算语言。 它是由MathWorks公司开发和许可的,MathWorks成立于1984年,主营该软件的商业化。
(2) 证书
专有的 - 定价根据用途而有所不同。
(3) 优点
- 专为数值计算而设计。MATLAB非常适合具有复杂数学要求的定量应用,如信号处理,傅里叶变换,矩阵代数和图像处理。
- 数据可视化。 MATLAB有一些很好的内置绘图功能。
- MATLAB通常被作为诸如物理,工程和应用数学等量化类专业的本科课程的一部分。 因此,它在这些领域得到了广泛应用。
(4) 缺点
- 专利许可。 根据用途(学术,个人或企业),你可能需要支付昂贵的许可证费用。 有免费的备选方案如Octave。 这是你需要认真考虑的问题。
- MATLAB不是通用编程的明显选择。
(5) 结论:最适合数学需求高的应用
MATLAB在整个业界和学界的许多定量和数值研究领域的广泛应用使其成为了数据科学的重要选择。其明确的应用场景是当你的应用程序或日常角色需要大量的高级数学功能时,的确,MATLAB是专为此而设计的。
8. 其他编程语言
还有一些数据科学家可能会也可能不会感兴趣的其他主流语言。本节提供了一个快速的概述...当然有充足的论证空间!
C++
C ++并不是数据科学的常见选择,尽管它具有运行速度快的性能和广泛的主流流行度。其简单的原因可能是生产力与性能的问题。
正如一个Quora用户所说:
“如果你正在编写代码进行一些可能只运行一次的专项分析,你是愿意花30分钟的时间编写一个将在10秒内运行的程序,还是在10分钟内编写一个将运行1分钟的程序?”
这个小伙伴抓到了重点。然而,对于重要的生产级别性能而言,C ++将是实现在低级别机器学习算法优化的绝佳选择。
结论:不服务于日常工作,但如果性能表现是至关重要的...
JavaScript
随着近年来Node.js的兴起,JavaScript越来越成为重要的服务器端语言。然而,它在数据科学和机器学习领域的使用已十分有限(不过可查看brain.js和synaptic.js!)。
它具有以下缺点:
(1) 入局太晚(Node.js只有8岁!),意味着...
很少有相关的数据科学库和模块可用。 这意味着没有引起真正的主流兴趣或动力。
(2) 性能方面,Node.js很快。 但JavaScript作为一种语言并不是没有它的槽点。
Node’s的优势在于异步I / O,其被广泛使用,且存在于可编译为JavaScript的语言中。 因此,可以想象,数据科学的有用框架和实时ETL处理可以结合在一起。关键问题是这是否会提供些新的特别之处。
结论:JavaScript距成为重要的数据科学语言还有很长的路要走
Perl
Perl被称为“编程语言的瑞士军刀”,得名于其作为通用脚本语言的多功能性。 它与Python有很多共同之处,同样是一种动态类型的脚本语言。但是,在数据科学领域,它还没有像Python一样的人气。
这看起来有点难以置信,尤其是如果你知道它在定量领域如生物信息学中的应用。 Perl在数据科学方面有几个关键的缺点。它不是很突出,它的语法是不友好的。数据科学专用程序库的开发并不像生物信息学那样有大的进展。在任何领域,势头都是关键。
结论:一个有用的通用脚本语言,但它并不能给你的数据科学简历带来真正的优势
Ruby
Ruby是另一种通用的动态类型的解释语言。然而,它并没有在数据科学得到像Python一样的应用。
这似乎是令人惊讶的,但可能是Python在学术界的主导地位和正面反馈效应的结果。 使用Python的人越多,开发的模块和框架就越多,从而越来越多的人会转而使用Python。SciRuby项目的存在是为了将如矩阵代数这样的科学计算功能引入到Ruby中。但是目前来看,Python还是领先的。
结论: 对于数据科学来说目前还不是一个明显的选择,但对简历也没什么坏处
总结
好了,现在你有了一个数据科学领域编程语言选择的快速指南。然而,选择最合适语言的关键是,你要了解你使用需求的一般性与特殊性,以及你个人偏爱的基于性能与生产力平衡的开发风格。
我一般使用R,Python和SQL,因为我目前的角色主要侧重于开发已有数据的流水线和ETL流程。这些语言可以平衡一般性和生产力来完成这项工作,并可以在需要时使用R的高级统计软件包。
不过 – 也许你已经有了Java的经验, 或者你可能想使用Scala来处理大数据。 或者,你热衷于参与Julia项目。
也许你在大学学过MATLAB,也许你还想给SciRuby一个机会? 或者你有一个完全不同的建议! 如果是这样,请在下面回复 - 我期待着你的声音!
感谢您的阅读!
原文:
https://medium.freecodecamp.org/which-languages-should-you-learn-for-data-science-e806ba55a81f
【本文是51CTO专栏机构大数据文摘的原创译文,微信公众号“大数据文摘( id: BigDataDigest)”】