在新的十年里,什么编程语言看起来最有希望应用于数据科学?
导言
过去的十年也许已经结束了,下一个十年也许看起来并不那么有希望,但数据科学的未来肯定是光明的。数据科学无疑仍然是一个热门职业,而机器学习技术也从未像现在这样令人兴奋!作为一名数据科学家,作为解决问题的最开始的环节,您需要回答的最重要的问题之一是,您应该实际使用什么语言来获得您想要的结果。
在过去的几年里,我们确实看到了各种语言的数据科学工作生态系统的繁荣。话虽如此,对于许多不同的程序员来说,进入这个领域或在语言方面迈出下一步可能是相当困难的。在数据科学领域更是如此,那里的事情会持续地激动人心。当然,这就是数据科学的乐趣所在;不断有新的东西要去认识和学习。话虽如此,理想的情况下,可能会有一些新的语言,你可以从这个语言列表中检查出来,我认为这些语言是有价值的,而且在明年可能会变得更有价值。
Python
在大多数领域,无论是开发,软件工程,甚至是Web开发,一个新的程序员可能想要开始学习如何用Python编程语言来编程。Python不仅是一种多样化的编程语言,具有数据科学之外的许多功能,而且可能是高级数据分析的最佳工具之一。
通过Pandas,SkLearn,Tensorflow,Keras,NumPy等软件包,Python的生态系统颠覆了大多数竞争对手。话虽如此,尽管有些人可能更喜欢其他语言的语法,但很难对这种编程语言可用的软件包数量之少提出异议!幸运的是,许多语言(如R和Julia)的解决方案都有用于调用Python包的包,通常使用C,因为这两种语言都是基于LLVM的,并且在编译器方面与C共享类似的体系结构。
除此之外,Python还有非常棒的数值包。不用说,NumPy是一个很好的例子,它是一个用于Python线性代数的实用程序包。Pandas在处理数据方面也很棒,在我个人看来,在用户友好性方面是无与伦比的。
Python最大的缺点当然是速度。然而,鉴于Python是由基于LLVM的语言C来解释的,因此它在使用这个编译器库的其他语言中将是普遍可扩展的。这就是Python相对于R的真正优势所在,也是它与其他编程语言(有时是低级编程语言)非常接近的地方。这无疑是Python的一大优势,因为它不像一种解释的脚本语言,而是更像一种用于基于C的模块调用的应用程序编程接口(API)。
R
最受欢迎的数据科学语言选择是R编程。R是一种很棒的编程语言,它在范式上不同于大多数程序员使用的许多其他语言,并且肯定通过这种范式让人受益很多。R还有一个很棒的数据科学生态系统。
虽然Python有超过,个注册包——比R多得多,但R本质上是一种更加面向统计的语言。话虽如此,R拥有许多久经考验的工具,如gleam和ggplot2。还有很多更好的软件包起源于R,现在已经扩展到各种编程语言和软件包中。
R最大的缺点可能是它的速度。虽然Python也不算是一种速度很快的语言,但是C语言对它的解释使得将C代码作为Python模块运行是非常可行的。话虽如此,更多的分析和基于可视化的数据科学家肯定会更喜欢R的声明式函数语法,而同时他们仍然会编译完全构建的应用程序。如果使用R的原因不是为了以专业的方式使用它,也不是为了将它部署到生产中,那么它当然仍然可以作为一种突出的学习经验。
最近,在数据科学领域,R肯定已经退居Python之后。我认为这些理由当然是有道理的,我当然喜欢这两种语言,因为它们在不同方面各有其用武之地。这两个肯定都值得一挑。
虽然R是一种用于统计,数据分析和机器学习的优秀语言,但它也不是没有问题。当然,一个明显的问题就是语言的速度。一些数据科学家也从来不需要运行调用大量线程的机器学习算法。话虽如此,在数据科学中,仍然有一些方法可以用R来处理任何事情,尽管可能不是没有一些问题。但是,如果你像我一样,也痴迷于机器学习,那么你可以选择一种较新的编程语言Julia,它是一种编译后的JIT语言,以其速度而备受推崇。
Julia
对于机器学习的未来,如果有什么我可以肯定地说我感到兴奋的话,那毫无疑问就是Julia编程语言和它的生态系统。Julia是一种使用多重分派作为范例的高性能编译编程语言。它可以采取程序员在典型编程语言中习惯的对类型的简单处理,并且对其赋予全新的用途。
Julia相对于竞争对手的最大优势当然是速度。虽然Julia是一种专注于数学计算的完美范例的语言,但不用说速度也是它的优势的一部分。Julia的速度通常可以与C媲美,这也是数据科学界许多人推崇它的一个潜在原因。
话虽如此,我认为关于Julia的一些东西也被低估了,那就是语言是如何对待它的范式的。它是一种令人愉快的语言,因为语言本身永远不会妨碍程序员想要表达的算术。此外,Julia代码的编写非常类似于常规数学的语法,这使得它特别适合我们这些科学迷。
年学习Julia语言的最大障碍肯定是生态系统。虽然能够编写自己的算法是很棒的,但一天只有这么几个小时,有时开源开发人员已经将某些东西的伟大实现写进了其他编程语言。话虽如此,Julia语言还是有一些令人兴奋的软件包值得一查!
此外,Julia之所以伟大,是因为它不仅是一种编译速度快的语言,而且编写速度也快。虽然Julia的速度和编译可能会吸引其他人,但一些科学程序员可能对Julia的语法非常感兴趣。Julia使用多重分派作为范例。这意味着Julia中的任何内容,从函数调用到类型和表达式,都将使用断言运算符生成lambdified表达式。对于那些不熟悉其他语言中lambda表达式的人来说,它允许只通过创建一个表达式就可以将变量调用到函数中。这就是Julia让人着迷的地方。
在这令人惊叹的优势中,最亮眼的还是我之前提到的——速度。
当然,Julia的速度是出了名的。Julia使用JustInTime(JIT)编译,它允许在执行时编译语言。这意味着首先,编译器的启动时间更短,其次,类型可以被难以置信地动态处理。通过让编译器知道要准备哪种类型,甚至可以用不同的Julia代码迭代,从而获得更快的速度。
Scala
另一种以速度著称的有趣编程语言是Scala。虽然Scala曾经是大多数机器学习工程师的大数据分析工具,但最近随着新的解决方案的推出,它的受欢迎程度也在逐渐下降。话虽如此,虽然掌握Scala或Java可能不如十年前对数据科学有价值,但对Hadoop和Spark的了解无疑是非常重要的,并且这些技能可以转化为对其他服务器体系结构和其他语言包的了解,例如PySpark。
话虽如此,我在日常工作中使用Scala的次数比预期的少得多。但并不是所有的工作都是一样的,Scala无疑是一种很棒的编程语言。影响Scala的最大问题主要是时间,以及依赖项缺乏现代化。很多时候,在科学中,依赖关系真的会变得一团糟。对于Python和Julia这样的语言,包管理器的能力可能有点太过分了,而有时Scala的情况就不那么简单了。
Scala的最大障碍可能是采用。Scala已经慢慢地但肯定地变得越来越不受欢迎了。我认为这部分归功于数据分析的兴起,以及最近机器学习生态系统的快速发展。虽然Scala在处理大数据时可能仍然被少量使用,但这种情况似乎正在迅速变化。
C++
今年我会考虑的最后一种数据科学语言是C++。虽然人们通常认为C++与数据科学不像Python那样和谐,但它是一种经过14年发展的久负盛名的语言。您可能有几个原因想要使用C++,但当然也有一些原因会让数据科学中不考虑使用C++。
最大的原因是因为C++本质上是一种相对命令式的语言,它需要更多的状态和内存管理,而不是使用更多的声明性语言,比如像Python那样。话虽如此,对于实验来说,C++可能不是我会使用的语言——因为它是静态类型的,当涉及到处理数据时可能会引起一些相当大的麻烦。
话虽如此,虽然C++可能不是用于实验和分析的最佳语言,但在生态系统中有一些引人注目的库可能会吸引任何机器学习工程师的注意。这里有几个很好的例子可以提及,比如Shogun,MLPack,OpenCV,以及所有典型的端口,这些端口可以在最后一种语言中找到,比如Tensorflow。此外,与Python和R等其他的语言相比,C++自然是一种快得多的语言。这意味着用C++代码和C++生态系统构建的算法通常比它的竞争对手运行得快得多。
信不信由你,C++实际上是机器学习中相当流行的语言。对于更多的基于数据管道/模型的数据科学工作,这一点尤其正确,这些工作可能在一个大型团队中共享。这与该语言不适合分析项目的原因相同,因为许多程序员可能更频繁地一起为同一个目标工作。
目前C++语言的最大障碍可能是采用。虽然C++确实有一系列可以选择的包,但是调试或解决问题可能会非常困难。就通用性而言,C++无疑是当今最好的语言之一,但由于其他语言具有更强的声明性(和数学)能力,它可能不是专门用于数据分析的好选择。这当然是一个取决于个人的东西,而且需要明确的是,C++可能也不想成为你可以学习的第一门数据科学语言。
另一方面,使用C++语言有很多很大的优势。它可以提供一些其他语言无法实现的非常棒的功能!如果您想尽快开始使用C++,那么学习一下线性代数是一个很好的起点。
结论
在年,数据科学家们在选择上会变得异常任性。虽然大多数行业都转向了Python,但幸运的是Python不是唯一可用的编程语言和/或生态系统。R当然也已经存在很长时间了,而且它将是语言中另一个很好的选择。此外,在过去的一年里,新崛起的Julia的生态系统和用户群确实蓬勃发展,使得JulianML,stats和analytics变得更加可行。
此外,仍然有几十万不同的工作岗位在拼命地寻找Scala,C和C++开发人员——特别是具有DS/ML技能的开发人员。话虽如此,我认为所有这些语言肯定都是可行的选择!
那么,在年,你应该选择这些伟大的语言中的哪一种来学习或使用DS/ML呢?当然,答案几乎普遍取决于你需要练习和体验的技能。C++可能比学习Python,R,甚至Julia要难得多。Scala也不像其他一些语言那么容易,但是那些在基于Java的编程语言方面有经验的人可能会发现这种语言很有吸引力。那些完全没有经验的人也可能希望从查询框架开始,比如SQL。