Julia 数据科学应用

内容简介

本书的目标是教你如何使用 Julia 语言来应对现实世界中数据科学的艰巨挑战。在介绍了 Julia 对于数据科学社区的重要性和若干数据科学基本准则之后,本书讲解了 Julia 基础知识,包括如何安装 Julia 及其功能强大的程序库。本书通过丰富的示例展示了如何使用 Julia 命令、数据集和函数。

本书介绍并描述了专用的脚本和软件包。针对在数据科学流程中经常会遇到的问题,本书提供了有代表性的实用示例,并引导你通过 Julia 使用公开的数据集来解决这些问题。在很多情况下,使用现成的软件包和内置函数就可以完成任务。

本书每一章都包括一些思考题和练习,来帮助你加强学习效果,指导你使用 Julia 从头开始创建一个数据科学应用。

  • 数据科学流程概览,并通过 Julia 实现一个示例,说明了其中的关键点。
  • Julia IDE 的选择。
  • 程序结构与函数。
  • 数据工程中的任务,如数据导入、数据清理、数据格式化和数据存储,以及如何执行数据预处理。
  • 数据可视化,以及一些简单但非常强大的用来进行数据探索的方法。
  • 数据降维和特征评价。
  • 各种机器学习方法,从非监督式学习(不同类型的聚类方法)到监督式学习(决策树、随机森林、 基础神经网络、回归树和极限学习机)。
  • 图分析,包括找出不同实体之间的联系以及如何对其进行挖掘以获取有用的知识。

作者简介

Zacharias Voulgaris 博士出生于希腊雅典。他就读于克里特理工大学生产工程与管理专业,后转而学习计算机科学,在伦敦城市大学获得了信息系统与技术的硕士学位,此后,又研究数据科学,在伦敦大学获得了机器学习博士学位。他曾经在佐治亚理工大学工作并任研究员,他还担任过 SEO 经理、数据科学家,还做过 Microsoft 公司的程序经理,负责 Bing 的数据分析流程。除了数据科学,他对新技术、文学和音乐抱有浓厚的兴趣。

本书内容

前言

我是在几年前发现 Julia 的,从此就被它的强大能力与巨大潜力所吸引。Julia 具有用户友好的集成开发环境(Integrated Development Environment,IDE),这使它很容易上手;它还具有高级的逻辑表达能力(非常类似 Matlab 和其他高级语言)和极高的性能,这使它的功能非常强大。但是,当时我正致力于研究其他更成熟的平台,比如 R 和 Java,未能给予 Julia 太多的关注。

因此,我只了解了 Julia 的一些基础知识,以及当时的教程中提供的一些具体应用,并没有进行更多的研究。除了 Julia 之外,我还知道不断有一些新的有趣的语言被开发出来,但大多数是昙花一现。

那么,为什么我现在又对 Julia 感兴趣了呢?一个原因就是,这些年它一直保持着良好的发展势头,Julia 会议的参与人数每年都有显著的增长。尽管我曾经很熟悉它的基本知识,但当我重拾 Julia 时,发现有很多新的知识需要学习。从我初识 Julia 之后,它已经有了很大的发展。

更重要的原因是,Julia 已经跨过了大西洋,引起了欧洲从业者的极大兴趣,其中一位已经为这种相当年轻的语言创建了一系列视频和练习资料。

在试用了 Julia 0.2版之后,我开始琢磨,除了快速分解质因数和计算第 n 个斐波那契数之外,是否能使用 Julia 来做些真正有用的事情。虽然0.2版仅有几个软件包,文档也做得很差,我只能找到零星几个介绍这门语言的视频,多数还是来自某个 Python 会议上的发言。但是,我还是在计算机上保留着 Julia,并时不时地用它写个脚本,来解决 Project Euler、Programming Praxis 或类似站点上的编程问题。当时我是个项目经理,所以没有很大的积极性去掌握一门新的编程语言。我在 Julia 上所做的一切都是出于兴趣。

但是,几个月之后,我重新开始从事数据科学工作,并更加正式地使用 Julia 编程。我很快就发现,使用 Julia 编写代码比使用 Python 更容易,例如,即使使用 Python 完成一个基本的数据加工任务,也需要一大堆扩展包。

在使用 Julia 解决小问题之后,我决定使用 Julia 独立完成一个完整的数据科学项目。在经历了不可避免的学习曲线和成长阵痛之后,我终于达到了目标。这并不是我最得意的成果,但它证明了在进行一些训练、尝试和纠错之后,Julia 可以高效地完成正式的数据科学任务。

扫描二维码关注公众号,回复: 4038129 查看本文章

在本书中,我会分享在这个项目以及随后的项目中获得的经验,阐述如何在数据科学的各个环节使用 Julia。尽管现在已经有了一些介绍 Julia 的书籍,但还没有一本全面介绍如何在数据科学领域内应用 Julia 的专著。我曾非常期待有这样一本书,但有了多年使用 Julia 的经验之后,我决定亲自上阵,撰写这样的一本书。

我完全清楚,撰写一本介绍正处于发展时期的语言的书风险有多大,但是 Julia 这门语言不会停止发展,如果我等待它完全成熟,这本书就永远不会完成。

我并不期待你能够全面掌握 Julia,或成为一个成熟的数据科学家。如果你渴望扩展技能,学习解决老问题的新方法,并严格按照本书的进度进行学习,那么 Julia 就会成为你进行数据分析的一个有效工具。

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

enter image description here

图1.1 数据科学过程概览。3个堆叠起来的圆形表示可以应用 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 的扩展包完全够用了。本书的主要内容就是阐述这些扩展包的工作原理,以及如何使用它们来解决艰巨的数据科学问题。

1.3 关于本书

如果你正在阅读本书(并计划按照书中的示例进行练习),那么你至少应该对数据科学领域有所涉猎。我假设你具有基本的编程经验,并对数据结构、GitHub 仓库和数据分析过程有所了解。如果你曾经独立实现过某种算法,完整地开发过某种程序,或使用过 GitHub 上的现成程序解决过实际问题(哪怕是个简单的问题),那么你就有了一个良好的开端。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

第2章 建立数据科学工作环境
第3章 Julia 入门
第4章 Julia 进阶
第5章 Julia 数据科学应用概述
第6章 Julia 数据工程
第7章 探索数据集
第8章 构建数据空间
第9章 数据抽样与结果评价
第10章 无监督式机器学习
第11章 监督式机器学习
第12章 图分析
第13章 更上一层楼
附录 A 下载安装 Julia 与 IJulia
附录 B 与 Julia 相关的一些常用站点
附录 C 本书所用的扩展包
附录 D Julia 与其他平台的集成
附录 E Julia 中的并行处理
附录 F 各章思考题答案

阅读全文: http://gitbook.cn/gitchat/geekbook/5bbec02c240954117464545f

猜你喜欢

转载自blog.csdn.net/valada/article/details/83784946