你所不了解的编程语言Julia


本文摘自《Julia数据科学应用》

现在的编程语言有几十种,有些是通用的,有些则专注于某个领域,但每种语言都号称比其他语言更优秀。最强大的语言(能够快速执行复杂运算的语言)学习起来应该很难(要想掌握就更难了),它们的用户仅局限于那些对编程具有天赋的“硬核”程序员。雄心勃勃的数据科学家不得不面对这样一种前景:花费大量时间和精力学习了一门语言,却对他们的工作帮助甚微,写下了一行又一行复杂的代码,却实现不了一种可用的算法。

“即插即用”的编程语言是另外一种情况,它们将所有的编程复杂性都进行了精心的封装。那些最单调乏味的(一般也是应用最广泛的)算法都被预先包装好了,供用户方便地使用,几乎不需要学习过程。这些语言的问题是,它们的速度会很慢,而且对内存和运算能力有很苛刻的要求。数据科学家们又面临了一种与前面相反的困境:语言学习没有陡峭的学习曲线,这是个优点,但想用这些语言来完成任务,却困难重重。

Julia正是位于这两种极端情况中间的一种语言,它最大程度地综合了上面两类语言的优点。其实,它就是一门设计用来进行技术计算的编程语言,它计算速度快,易于使用,并内置了许多数据处理工具。尽管它还处于初级阶段,那些对它进行了充分测试的人们已经感受到了它的巨大潜力,并确信它在技术计算和数据科学领域内有很大的用武之地。

以下一些特点使Julia在众多编程语言中脱颖而出。

极其卓越的性能。Julia在很多数据分析任务以及其他编程实践中都表现出了令人难以置信的性能。它的表现可以和C语言媲美,C语言经常被用来作为衡量运算速度的标准。

强大的基础库。Julia有一个强大的基础库,它不需要其他平台,就可以进行所有的线性代数运算,这些运算是数据分析模块的必备组件。

支持多分派。Julia实现了多分派机制,这使它可以使用同一种函数实现不同的过程,使函数更容易扩展,并可以对不同类型的输入重复使用。

容易上手。特别是对于那些从Python、R、Matlab或Octave迁移过来的使用者,学习Julia特别容易。

用户友好的界面。不论是在本地还是云上,Julia的用户界面都非常友好,在所有的流程中,用户与Julia的交流都非常顺畅。Julia还对所有的功能和数据类型提供了方便易用的帮助文件。

与其他语言无缝对接。这些语言包括(但不限于)R、Python和C。这使你不需要进行完整的迁移,就可以使用现有的代码库。

开源。Julia以及它的所有文档与教程都是开源的,非常易于获取,详尽而又全面。

开发者承诺。Julia的开发者承诺会一直加强这门语言的性能,并对使用者提供尽可能的帮助。他们提供了大量的讨论,组织年度会议,并提供咨询服务。

自定义函数。Julia的自定义函数可以和内置在基础代码中的函数一样快速而简洁。

并行能力。Julia具有强大的并行能力,这使得在多核计算机和集群上的部署非常容易。

极大的灵活性。Julia在开发新程序方面极其灵活,不论是编程新手,还是专家级用户,Julia适合各种编程水平的使用者,这个特性在其他语言中是很难得的。

在学习和使用Julia的过程中,你肯定会发现它的更多优点,尤其是在数据科学方面。

1.1 Julia如何提高数据科学水平

“数据科学”是个相当含糊的名词,自从它成为科学领域一门学科后,就具有很多不同的意义。在本书中,我们这样来定义它:数据科学通过各种统计学和机器学习的技术与方法,将数据转换为有用的信息或知识。

由于数据的快速增长,数据科学必须利用各种工具的强大功能来应对大数据的挑战。因为数据科学的一大部分任务就是运行脚本来处理规模庞大、结构复杂的数据集(通常被称为“数据流”),所以一门高性能的编程语言对于数据科学来说不是奢侈品,而是必需品。

考虑一下某种特定的数据处理算法,它通过传统语言实现,需要运行几个小时。那么算法性能的适度提高就可以对数据处理过程的整体速度造成相当大的影响。作为一门新语言,Julia做的就是这样一件事情,这使它成为了数据科学应用的理想工具,既适合经验丰富的数据科学家,也适用于入门者。

1.1.1 数据科学工作流程

人们认为数据科学是由多个环节组成的一个流程,每个环节都与手头的数据和分析目标密切相关。很多时候,这个目标是实现一个仪表盘或某种智能可视化结果(通常是可交互的),这通常被称为“数据产品”。

数据科学包括从真实世界(比如HDFS系统中的数据流,CSV文件中的数据集,或者关系数据库中的数据)中获取数据,对数据进行处理并得到有用的信息,以及将信息以一种精炼和可操作的形式返回到真实世界中。最终结果通常是数据产品的形式,但也不是必须的。举例来说,你可能被要求在公司的内部数据上面应用数据科学,但只要将结果以可视化的方式与公司管理者共享就可以了。

看一个小公司的例子,这个公司正在对博客订阅者进行问卷调查,从而进行数据驱动的市场研究。这个数据科学过程包括以下5个步骤。

1.从营销团队获取数据。

2.进行数据准备,将数据转换成可以用于预测分析的形式。

3.对数据进行探索性分析,分辨出是否某些人更倾向于购买某些特定产品。

4.对工作进行规范化,使整个工作过程达到资源有效和无误差。

5.开发模型,深入研究公司客户对哪些产品最感兴趣,以及他们期望为这些产品付多少钱。

我们会在第5章中对这个过程进行更详细的介绍。图1.1是数据科学过程的

图0:你所不了解的编程语言Julia

一幅完整图景,其中也包含了Julia语言的适用范围。我们通常用三个堆叠起来的圆形表示Julia,在图中,这个符号指示出了Julia的用武之地。很明显,除了数据产品开发和数据获取,Julia几乎可以用于数据科学过程的各个阶段。

想想看,Julia可以在多大程度上简化你的工作流程?你不需要从其他平台上抓取代码来修补自己的流程,从而造成令人困扰的瓶颈。而且,只要你在Julia中调试通过了代码,也没有必要将其转换为像C++或Java之类的语言,因为这样做不会有性能上的提高。这一点非常重要,在用R和Matlab之类的语言构建原型时,这种转换是个必需的步骤。

1.1.2 Julia被数据科学社区接受的过程

你可能心生疑虑:“既然Julia是这么完美的一种语言,为什么还没有被数据科学社区广泛接受呢?”我们完全可以期待,Julia这种功能丰富的语言崭露头角,未来会像R和Python一样,在数据科学领域内占有一席之地。

尽管Julia对于任何类型的数据处理项目来说都是一种明智的选择,但是与其他更成熟的语言相比,它提供的扩展包还不够多(尽管随着用户数量的增加,可用的Julia扩展包的数量也在平稳地增长)。主要原因是Julia是一门年轻的语言,而且随着时间的推移,必定还会发展变化。

更重要的是,数据科学从业者与学习者还没有确信Julia可以像Python和R那样容易地学习和掌握。这两种语言都以具有庞大的用户社区为傲,用户社区使编程不仅简单,而且具有乐趣。想想Python Challenge吧:一系列编程任务,使学习Python就像是在游戏里面闯关。

毫无疑问,总有一天Julia也会发展出同等规模的粉丝圈,但现在它的影响力还不够,特别是在数据科学从业者中间。尽管Julia潜力巨大,但很多人发现,在Julia中写出清晰的代码并将初始程序调试通过是一件相当困难的事情。对新手来说,整个开发过程令人望而却步,甚至半途而废。

预先开发好的程序通常以“库”或“包”的形式来提供。尽管Julia提供了足够多的包来完成数据科学任务,但是还缺少一些算法,需要自己编程实现。在网页发展的初级阶段,HTML和CSS也面临了同样的问题,但是当它们的深奥技术逐渐成为主流,形势就一片大好了。对Julia的先驱者来说,可能会发生同样的事情。即使你没有积极地参与Julia编程社区,但在对这门语言逐渐熟练的过程中,你也肯定会受益匪浅。而且,当社区不断增长完善时,Julia用户完成任务会越来越容易,特别是对先驱者来说。

1.2 Julia 扩展

尽管现在能够扩展Julia功能的库文件(通常称为“包”)还比较少,但是Julia资源正在不断地增加。从2015年初到2016年中,Julia包的数量翻了一番,而且还看不出减慢的迹象。由于Julia的用户多数是从事高级计算的,所以这些包都是用来满足他们的需求的。包的更新就更加频繁了,这使得这门语言的鲁棒性不断提高。最后,因为Julia社区规模较小,并且联系紧密,所以很少有重复开发。

1.2.1 包的质量

“现有的包的质量如何?”你可能会问这个问题。因为开发这些包的用户大多经验丰富,他们会尽力写出高质量的代码,从GitHub用户奖励的“星星”就可以反映出这一点。值得注意的是,从2015年末到我写完这本书为止,各种Julia包获得的星星数量增加了50%。很明显,在这个著名的程序仓库中,上传的Julia代码受到了越来越多的青睐。

很多GitHub中的包(不管是什么语言)都有一个有趣的特点,就是通过测试来建立程序的完整性和覆盖率等指标,这样在你开始使用这些程序之前,就可以清楚地了解它们的可靠性。对于最新版本的Julia(0.4),测试结果相当感人:在所有610个包中,63%的包通过了所有测试,只有11%的包没有通过测试(其余的包还没有进行测试,或者是不可测试的)。

1.2.2 找到新的包

如果想了解Julia包开发情况的最新信息,你可以访问http://pkg.julialang. org/pulse.html 。此外,在本书的末尾,我们给出了一个参考列表,其中包括了数据科学应用中最常用的包。值得注意的是,尽管Julia不像其他语言那样有那么多类型的扩展包,但是对数据分析而言,Julia的扩展包完全够用了。本文的主要内容就是阐述这些扩展包的工作原理,以及如何使用它们来解决艰巨的数据科学问题。

我假设你具有基本的编程经验,并对数据结构、GitHub仓库和数据分析过程有所了解。如果你曾经独立实现过某种算法,完整地开发过某种程序,或使用过GitHub上的现成程序解决过实际问题(哪怕是个简单的问题),那么你就有了一个良好的开端。

最重要的是,我希望你有一个脚踏实地的态度,在遇到问题时,可以熟练使用各种技术文档和论坛来寻求解决方案。最后,你必须对学习这门语言有种发自内心的兴趣,并将其与你的数据分析项目紧密地结合起来。

读到现在,你应该知道学习本书的最大收益就是:在掌握用于数据科学的Julia语言方面取得显著进步。你可能不会成为Julia开发专家,但你学到的知识足以使你看懂新的脚本,并完全可以使用Julia完成一些有趣的数据分析项目。其中的一些数据工程任务,如果使用其他编程语言来完成的话,会不厌其烦。

本书会提出一系列在数据科学流程中常见的、有代表性的实际问题,并指导你使用Julia去解决这些问题。你不需要去重新发明轮子,因为可以使用现有的内置功能和扩展包解决绝大多数问题。而且,你还可以使用几个真实数据集进行练习,以别人的成功经验为指导,不用在盲人摸象的情况下不断重复试错的过程。

本书将要介绍的内容如下。

1.可以用于Julia开发的几种现成的IDE(集成开发环境),以及如何使用文本编辑器来创建和编辑Julia脚本。

2.通过几个相对简单的示例程序,介绍Julia语言特性(主程序结构和函数)。

3.使用Julia完成数据工程任务的几种不同方式,包括数据的导入、清洗、格式化和存储,以及如何进行数据预处理。

4.数据可视化,以及几种简单但很强大的用于数据探索目的的统计方法。

5.通过各种技术去除不必要的变量,实现数据降维。在这部分内容中,我们还将涉及特征评估技术。

6.机器学习方法,包括无监督式学习方法(各种聚类技术)和监督式学习方法(决策树、随机森林、基本神经网络、回归树、极限学习机等)。

7.图分析方法,研究如何在现有数据上应用目前最流行的算法,并确定不同实体之间的联系。

除了上面这些内容,我们会继续讨论数据科学中的一些基本知识,这样,在深入钻研数据科学的各个环节之前,你会对数据科学的整体流程有一个清晰的认识。而且,书中的所有资料都带有补充信息,这对Julia初学者是非常重要的,补充信息介绍了将Julia安装到计算机上的方法,以及学习这门语言的一些资源。

在本书中,你将会接触到很多示例和问题,它们可以加强你对每章内容的理解和掌握。如果你确信已经掌握了书中的大部分知识,就可以编写自己的程序,充分发挥这门非凡编程语言的巨大威力。

本书会指导你如何以并行的方式运行Julia(如果你不能使用集群,在单机上也可以)。对于那些勇气十足、希望接受挑战的人,在最后一章可以利用本书中学到的所有知识和技能,使用Julia从零开始构建一项完整的数据科学应用。你准备好了吗?

余下全文(1/3)
分享这篇文章:

请关注我们:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注