书名:数据科学实战手册(第2版)
ISBN:978-7-115-49925-7
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 [印] 塔特尔(Prabhanjan Tattar)
[美] 奥杰德(Tony Ojeda)
墨菲(Sean Patrick Murphy)
班福特(Benjamin Bengfort)
达斯古普塔(Abhijit Dasgupta)
译 刘旭华 李 晗 闫 晗
责任编辑
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
Copyright © 2017 Packt Publishing. First published in the English language under the title Practical Data Science Cookbook, Second Edition, ISBN 978-1-78712-962-7. All rights reserved.
本书中文简体字版由Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。
版权所有,侵权必究。
本书对想学习数据分析的人来说是一本非常实用的参考书,书中有多个真实的数据分析案例,几乎是以手把手的方式教你一步一步地完成从数据分析的准备到分析结果报告的整个流程。无论是数据分析工作的从业者,还是有志于未来从事数据分析工作的在校大学生,都能从本书中获取一些新知识、新思想。
同时,本书也是一本优秀的学习和提高R及Python编程的参考书。很多人有这样的感触,单纯地学习编程语言是很枯燥的过程,但利用本书学习R和Python语言可以很好地解决这个问题,生动实用的数据集以及非常有意思的分析结果会极大地激发读者学习的兴趣。
本书案例包括汽车数据分析、税收数据分析、就业数据分析、股市数据分析、社交网络分析、大规模电影推荐、Twitter数据分析、新西兰海外游客预测分析以及德国信用数据分析等。
Prabhanjan Tattar有9年的统计分析工作经验。他的主要精力集中在通过简洁优美的程序解释统计和机器学习技术。生存分析和统计推断是他主要感兴趣和研究的领域,他已经在同行评审期刊上发表了多篇研究论文,并写作了两本关于R的书:RStatistical Application Development by Example(Packt Publishing)和A Course in Statistics withR(Wiley)。他还在维护几个R包:gpk、RSADBE和ACSWR。
非常感谢读者的鼓励和反馈,这使得本书(第2版)有了很多改进,希望读者从本书中受益。还要感谢Tushar Gupta把我介绍到这个项目,感谢Cheryl Dsa对我写作拖拉的忍耐,感谢Karan Thakkar鹰眼般敏锐的编辑工作以及整个Packt团队的大力支持。我还要感谢第1版的作者们,因为本书是在他们工作的基础上完成的。在个人方面,我始终感谢我的家人:可爱的Pranathi、亲爱的妻子Chandrika、女神般的母亲Lakshmi和我深爱着的父亲Narayanachar。
Tony Ojeda是一位经验丰富的数据科学家和企业家,在商业流程的最优化方面非常专业,并且对创造和执行创新型数据产品及解决方案非常有经验。他在佛罗里达国际大学(Florida International University)获得金融硕士学位,并且在德保罗大学(DePaul University)获得了MBA学位。他是华盛顿特区数据实验室的创始人、华盛顿特区数据社区的联合创始人,致力于数据科学的教育事业和活动组织。
Sean Patrick Murphy在约翰· 霍普金斯大学的应用物理实验室做了15年的高级科研人员,他专注于机器学习、建模和模拟、信号处理以及高性能计算。现在,他是旧金山、纽约和华盛顿特区多家公司的数据顾问。他毕业于约翰·霍普金斯大学,并在牛津大学获得MBA学位。他还是华盛顿特区数据创新见面会的联合组织者,是MD数据科学见面会的联合创始人。同时,他也是华盛顿特区数据社区的联合创始人。
Benjamin Bengfort是一位非常有经验的数据科学家和Python开发者。他曾在业界和学术界工作过8年。他现在在马里兰大学派克学院攻读计算机博士学位,研究元识别(Metacognition)和自然语言处理。他拥有北达科他州立大学的计算机硕士学位,并且在那里教授过本科的计算机科学课程。他是乔治城大学的客座教授,在那里教授数据科学和分析。本杰明曾经在华盛顿特区参加过两次数据科学培训:大规模机器学习和多领域大数据技术应用。他非常感激这些将数据模型以及商业价值融合的课程,他正在将这些新兴组织构建为一个更成熟的组织。
Abhijit Dasgupta是在华盛顿特区马里兰-弗吉尼亚地区工作的数据顾问,他有着多年的生物制药行业咨询、商业分析、生物信息以及生物工程咨询方面的经验。他拥有华盛顿大学生物统计专业的博士学位,并且有40多篇被审稿人接收的论文。他对统计机器学习非常感兴趣,并且非常乐于接受有趣和有挑战性的项目。他是华盛顿特区数据社区的成员,并且是华盛顿特区统计编程社群的创始人和联合组织者(华盛顿特区地区R用户组的前身)。
刘旭华:现为中国农业大学理学院应用数学系副教授,北京理工大学博士,美国北卡莱罗纳大学教堂山分校(University of North Carolina at Chapel Hill)访问学者,主要从事数理统计、数据科学、数学与统计软件等领域的教学与科研工作,主持及参与过多项国家自然科学基金、北京市自然科学基金等项目。曾翻译过《R语言统计入门》等书籍。
本书的翻译工作得到中国农业大学教务处2016—2020年度“概率论与数理统计”“数学实验”“数理统计”核心课程建设项目、理学院教改项目“大数据背景下的概率统计课程建设探索”的资助。他负责翻译了本书第1~4章的内容并对全书进行了统稿。
李晗:2015年毕业于广州华南理工大学,硕士期间主要从事信号处理、数据分析方面的研究。目前就职于中兴通讯,主要从事数据库、数据分析、容器化微服务方面的开发与运维工作。工作之余,还对多种技术与方向怀有浓厚的兴趣,包括区块链、人工智能、互联网信息安全、技术翻译等。他负责翻译了本书第8~11章。
闫晗:中国人民大学统计学院硕士,“统计之都”编辑部“搬砖工”。他负责翻译了本书第5~7章。
在本书翻译的过程中,借鉴了由郝智恒、王佳玮、谢时光、刘梦馨等译者翻译的第1版译稿,本书译者对他们表示感谢。
Alberto Boschetti 是一位在信号处理和统计学方面有资深经历的数据科学家。他拥有电信工程博士学位,目前在伦敦生活和工作。在工作中,他每天都要面对自然语言处理、机器学习以及分布式处理领域中的一些具有挑战性的问题。他对工作很有激情,总是追踪最新的数据科学技术的发展,参加相关聚会、会议等交流。他的著作有Python Data Science Essentials、Regression Analysis with Python和Large Scale Machine Learning with Python等,这几本书都由Packt出版社出版。
非常感谢我的家人、朋友和同事们。另外,非常感谢开源社区。
Abhinav Rai从事数据科学工作快10年了,目前在微软工作。他在电信、零售市场及在线广告领域都有工作经验。他感兴趣的领域包括机器学习中不断发展的方法及相关技术。他对分析大规模和海量数据集特别感兴趣,并在这种背景下有一些深刻的见解。他拥有Deendayal Upadhyay Gorakhpur University数学硕士学位(NBHM奖学金)以及印度统计研究所计算机科学硕士学位。严谨和老练是他从事数据分析工作的特点。
欢迎阅读本书。对上一版非常正面的反馈以及读者从中的获益使得本书出版成为可能。当Packt出版社邀请我作为第2版的合作者时,我在网上事先浏览了一些评论,很快发现了本书流行的原因以及它的一些小小的不足之处。因此,这一版保留了上一版的优点并尽可能地去掉那些缺陷。为提升本书的实用性,本书新增了第10章和第11章。
我们生活在数据时代。每一年,数据都在大量快速地增长,因此分析数据和从数据中创造价值的需求也比以往任何时候都更为重要。那些知道如何使用数据以及如何用好数据的公司,在后续的竞争中会比那些无法使用数据的公司更有优势。基于此,对于那些具备分析能力,能够从数据中提取有价值的信息,并且将这些信息用于实践产生商业价值的人才的需求会继续增大。本书为读者提供了多种学习如何利用数据创造价值的机会。书中所用的数据来自很多不同的项目,而且这些项目可以体现出数据科学项目的各种新进展。每一章的内容都是独立的,它们包含了电脑屏幕截图、代码片段、必要的详细解释。我们对处理数据的过程和实际应用特别关注,这些内容都是以循序渐进的方式来安排写作的。写作本书的目的在于,向读者介绍成为数据科学家的路径,以及向读者展示这些方法是如何应用在多种不同的数据科学项目上的。此外,我们还希望读者在今后自己做项目时,能够很方便地应用我们讲到的方法。在本书中,读者将学到不同的分析和编程方法,而所有讲授的概念和技能都是以实际的项目作为引导,因此读者可以更好地理解它们。
第1章向读者介绍了数据科学管道,并且帮助使用Mac、Windows和Linux操作系统的读者恰当地搭建数据科学环境。这一章还引导读者在前述平台上安装R和Python。
第2章带领读者对汽车数据进行分析和可视化,从中发现随时间变化的燃料效率的变化趋势和模式。在这一章中,读者将初尝获取、探索、修正、分析和沟通等流程。上述过程将在R中实现。
第 3 章向读者展示如何使用Python将自己的分析从一次性的临时的工作转变为可复用的产品化代码。这些工作都是基于一份收入数据展开的。
第4章向读者展示如何搭建自己的选股系统,并且使用移动平均法分析股票历史数据。在这一章中,读者将学习如何获取、描述、清洗数据以及如何产生相对估值。
第5章展示如何得到美国劳工统计局的就业和薪资数据,然后在R中进行不同层级的地理空间分析。相同的分析用Python也可以实现。本章的关注点在于数据的转换、操控和可视化。
第6章对应于第2章的内容,但是使用的是强大的编程语言Python。这一章关注分析模型的Python实现。
第7章向读者展示了如何构建、可视化以及分析由漫画书中人物关系构成的社交网络。读者将看到R和Python两种语言的实现。
第8章将带领读者使用Python创建一个电影推荐系统。另外,读者也能够学习如何利用R和Python代码实现一个预测模型,并掌握在实现预测模型时协同过滤的使用方法。
第9章向读者展示如何连接到Twitter API,以及如何画出Twitter用户档案中包含的地理信息。另外,读者也能学习RESTful API在文本挖掘中的使用方法。
第10章解释如何创建时间序列对象,并描述各种可视化时间序列数据的方法。另外,读者也能学到如何为数据创建一个合适的模型,并识别数据中是否包含趋势和季节性组成元素。
第11章利用一些基本的树方法和随机森林来展示探索性数据分析。通过本章,读者将能学习到如何对特定数据应用探索性数据分析方法。
要阅读本书,你需要一个能够连接到互联网的电脑,并且能够安装本书中所需要的开源软件。本书用到的主要软件包括R和Python,这两个编程语言带有大量免费的包和库。第1章会介绍如何安装这些软件以及它们的包和库。
本书旨在使用能够亲自实践的现实案例,启发那些希望学习数据科学以及数值编程的数据科学工作者。无论你是一名数据科学领域的新手,还是一名具有丰富经验的专家,在学习了数据科学项目的结构以及本书中所展示的示例代码之后都会有所收获。
阅读本书时,你会发现几个标题会多次出现(准备工作、操作流程、工作原理、更多内容),下面我们简单介绍这些版块的作用。
这个版块告诉你在项目流程中你能得到什么,描述如何安装软件或为完成项目事先需要的设置。
这个版块包含为了完成项目所需要的步骤。
这个版块通常由对“操作流程”版块内容的详细解释构成。
这个版块由与项目流程有关的其他信息构成,目的是使读者对项目流程有更好的理解。
本书中,你将发现对不同的信息用到了许多不同的文本格式。下面有一些格式的例子以及对它们含义的解释。正文中的代码、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟URL、用户输入、Twitter用户定位等的格式展示如下:“在数据库中为JIRA创建一个新用户,使用如下命令授权用户链接到我们刚创建的jiradb
数据库。”
代码块如下:
<Contextpath="/jira"docBase="${catalina.home}
/atlassian- jira" reloadable="false" useHttpOnly="true">
命令行输入或输出如下书写:
mysql -u root -p
新术语和重要词语用黑体显示。在屏幕上看到的词语,比如在菜单或对话框中,类似这样的形式:“从管理面板选择系统信息。”
这种图标表示警告或重要提示。
这种图标表示一些小技巧。
本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。
本书提供如下资源:
源代码;
书中彩图文件。
要获得以上配套资源,请在异步社区本书页面中单击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。
如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、软件测试、前端、网络技术等。
异步社区
微信服务号
传统的食谱书籍包含作者擅长的烹饪秘诀,可以帮助读者丰富可做食物的种类。许多人相信,一份食谱的最终收获就是菜品本身。类似于此,读者可以用同样的观点来阅读本书。本书中每一章都伴随着不同目标、针对不同数据集、应用数据科学管道(pipeline)的各个阶段进行分析,进而展示给读者。同时,正如烹饪一样,最后结果可以仅仅是对某一个特定数据集的分析。
然而,我们希望读者能有更广阔的视角。数据科学工作者通过实践进行学习,确保每一次重复和假设验证都能增进实践知识。通过使用两种不同的编程语言(R和Python)结合数据科学管道对多个数据集进行处理,我们希望读者可以学会抽象出分析模式,能够看到更广阔的图景,并能对数据科学这一尚未完善的领域有更深刻的理解。
我们同时也希望读者认识到,数据科学食谱并不像传统烹饪食谱那样清晰明确。当厨师开始做某道菜时,他们在脑海中对最后成品的样子是很明确的。然而对数据科学工作者来说情形则完全不同。人们对要分析的数据集的内容可能并不是很清楚,在不同时间和资源限制下,分析结果可能是这样也可能是那样。数据科学工作者的菜谱本质上只是深入挖掘数据的一条路径,是朝着正确的问题并最终完成可能的最好的菜肴之路前行的开始。
如果读者具有统计学或数学背景,那么本书所展现的建模技术本身可能并不会让你兴奋。你可以把注意力集中在数据科学管道中那些偏重于解决实践问题的方法,如加载一个大数据集、使用可扩展工具结合已有技术完成数据应用、交互式可视化展示及Web应用等,而略过那些报告和论文。我们希望可以提升你对数据科学的欣赏和理解,帮助你在你自己的领域用好数据科学。
实践中数据科学工作者需要丰富多样的工具才能完成他们的工作。数据分析人员利用各种工具完成抓取、清洗、可视化、建模以及展示数据等大量任务。如果你与许多数据工作者交流过,那么你将发现他们的工具中最重要的部分是进行数据分析和建模的语言。回答哪种编程语言对某个任务是最合适的这种问题堪比回答世界上最难回答的问题。
本书中,我们将同时关注两种应用广泛且用于数据分析的不同的语言——R和Python,读者可以根据自己的喜好选择用哪一种。我们将提示读者每种语言所适用的任务,我们也会对每种语言针对同一数据集分析的结果进行对比。
在学习新的概念和技术时,深度和广度总是需要权衡的问题。时间和精力有限,应该同时学习R和Python达到中等程度,还是全力学习一种语言?从我们的职业经验看,强烈建议读者精通一种语言,同时酌情了解另一种。这是否意味着可以跳过关于某种语言的某些章节呢?当然不是!在你阅读本书时,确实应该选择一种语言并深入下去,不仅掌握这种语言,而且能熟练地使用它。
为继续本章的内容,应确保你有足够的带宽能在合理的时间内下载几个数GB大小的软件。
开始安装各种软件之前,我们需要对贯穿本书的数据分析过程所要用到的重复性步骤有所了解。
下面是数据分析的5个关键步骤。
1.获取:数据科学管道的第一步是获取不同来源的数据,它包括关系型数据库、NoSQL和文档、网页抓取、分布式数据库(如Hadoop平台上的HDFS、RESTful API和文本文件)以及PDF文档(当然我们不希望看到这种格式)。
2.探索和理解:第二步是理解你要分析的数据以及数据是如何收集的。这一步通常需要进行有意义的探索分析。
3.修改、整合和处理:这一步通常是数据科学管道中最耗时也是最重要的一步。数据几乎从来不会以你分析需要的形式出现。
4.分析和建模:这一步是最有意思的部分。数据科学家开始探索数据变量间的统计关系,施展他们掌握的机器学习技巧来对数据进行聚类、分类、归类,进一步创建预测模型以便对未来的数据进行分析。
5.沟通和实施:在管道的最后一步,我们需要以吸引人的形式和结构展示结果,有时是对我们自己展示从而进行下一轮分析,有时是对各种不同的用户。展示的数据产品可以是一次性报告,也可以是可扩展的成千上万人使用的Web产品。
虽然上述步骤是按顺序列出的,但并不是每一个分析项目都要严格按照上面的顺序一步一步地实施。事实上,灵活的数据科学工作者知道这些步骤是相互交织的。通常,数据探索分析会提示你数据是如何清洗的,然后对清洗过的数据进行进一步的探索分析进而更深入地理解。上述步骤中哪一步先来通常依赖于你开始时对数据的熟悉程度。如果你使用每天产生和获取数据的系统,那么初始的数据探索和理解过程可能不需要太长时间,当然这需要假设前述系统不出问题。相反,如果你对手头要处理的数据没有任何背景知识,那么数据探索和理解过程将需要非常多的时间(很多是非编程时间,比如与系统开发者的沟通等)。
下图展示了数据科学管道的整个流程。
正如你可能已经知道的,数据改写、整合和处理可能消耗项目时间和资源的80%甚至更多。在完美的世界里,我们总是拥有完美的数据。但不幸的是,现实并非如此,你能遇到的数据问题几乎是无限的。有时候,数据字典可能会改变,也可能会丢失,所以在这种情况下理解字段值是不可能的。有些数据字段可能包含垃圾信息或者包含一些与别的字段混淆了的值。升级一个Web应用产品可能产生一些漏洞,导致之前的数据无法收集,从而丢失成百上千行的数据。如果发生了这些问题,你所分析的数据就可能会包含所有这些错误。
最后一步,沟通和实施是非常关键的,但这一步错综复杂,通常不受重视。注意管道中的最后一步并不是数据可视化,也不是仅画一些漂亮的或引人入胜的图形,这本身也是一个丰富的主题。相反,数据可视化将和数据一起成为一个更大问题中的一部分。有些数据科学工作者可能会考虑得更远,他们声称最终分析结果应该是一个论据,如果不能用它来说服决策者,那么你所做的所有努力都将毫无价值。
R项目的主页上对R的定义是“R是一个用于统计计算和绘图的编程语言和环境”,目前R已成为统计和数据分析的通用语言之一。在本书的前半部分我们将选择R作为默认的工具。
请确保你的电脑已经连接了网络并有足够的带宽,因为你可能要下载一个大于200MB的软件。
安装R是很简单的,请执行如下步骤。
1.访问CRAN(Comprehensive R Archive Network),并且下载当前操作系统所对应的最新版本的R。
截至2017年6月,最新版本的R是3.4.0版本。该版本是2017年4月发布的。
2.当下载好之后,请按照CRAN提供的通俗易懂的指导文档,在你的平台上安装R。对于Windows和Mac用户来说,只要双击安装包即可。
3.安装好R之后,打开它。你将看到一个类似下图的窗口。
4.CRAN的一个重要改进版MRAN可以在微软的相关网站上获得,这是微软对R软件的贡献。事实上,本书的作者是这个版本的粉丝并强烈推荐微软这一版本,它已在多个场合展示过,MRAN版本比CRAN版本速度更快,并且所有的代码在这两个版本下都能同样运行。因此,我们有充分的理由选择MRAN版本。
5.你可以在下载完R之后即停止,但是你会因此而错过一款非常出色的R语言的集成开发环境(IDE)—— RStudio。访问官网下载RStudio,按照网上提供的安装指南进行安装。
6.安装好之后,请运行RStudio。下面的截图展示了本书作者个性化配置的RStudio界面,控制台在左上角,编辑器在右上角,当前空间的变量列表在左下角,当前路径在右下角。
R是一种解释型编程语言,最初出现在1993年,是S统计编程语言的实用化,而S语言则是在20世纪70年代诞生于Bell实验室(S-PLUS是S语言的商业版本)。R是专注于统计分析和可视化领域的语言。因为它拥有开源证书,所以它有时候又称为GNU S。虽然你也可以用R做许多并非直接与统计分析相关的工作(如网页爬取),但R仍然是一个领域特定语言,并且没有打算成为一门通用语言。
R同时也受到CRAN的支持,CRAN是Comprehensive R Archive Network的首字母组合。CRAN包含了以往版本中关于R的相关文档,并且提供下载,可以使用旧版本的R进行可重复性分析。除此之外,CRAN包含了成百上千个可以免费下载的扩展包,这极大地增加了R的功能。事实上,正是因为近几年很多新的统计算法都是首先集成在R中,才使得R成为多个领域中数据分析开发平台的首选。
RStudio可以在GNU Affero通用公共许可证V3版下获取。它是开源的,可以免费使用。RStudio公司除了提供R的商业支持之外,也提供了额外的工具和服务。
R有着数量庞大的扩展包,这使得R的功能得以大大增加。事实上,在很多国家的大学统计系中,R都是默认首选语言。因此,当发展出新的统计算法和技术时,R通常是第一个实现它们的语言。更幸运的是,安装新增的R包非常简单。
只要R或RStudio已经安装完毕,那你就已经准备好了。
在R中安装新增包非常简单。
1.打开R的交互环境或者更实用的RStudio。
2.假如我们要安装ggplot2,只要在输入如下命令后按下回车键即可:
install.packages("ggplot2")
我们假设,在本书后面的章节中,每当我们键入一行文本时,都会默认在末尾键入回车键。
3.此时,你会在电脑屏幕上看到如下文字。
trying URL 'http://cran.rstudio.com/bin/macosx/contrib/3.0/
ggplot2_0.9.3.1.tgz'Content type 'application/x-gzip' length
2650041 bytes (2.5
Mb)
opened URL
==================================================
downloaded 2.5 Mb
The downloaded binary packages are in
/var/folders/db/z54jmrxn4y9bjtv8zn_1zlb00000gn/T//Rtmpw0N1dA/
downloaded_packages
4.也许你已经注意到,你需要知道扩展包的准确名称,如刚才例子中你要安装的ggplot2。访问r-project网站,确保你输入的包名是准确的。
5.RStudio提供了安装扩展包更为简单的机制。如果你还没有打开它,那么现在打开RStudio。
6.在菜单栏单击进入Tools,选择Install Packages,这时会弹出一个窗口,如下图所示。
7.当你在Packages区域开始键入包名时,RStudio会自动展示一列可能的包名。这种自动补全功能简化了包的安装过程。更好的是,具有类似扩展包名称的包或者是与你要安装的包名前几个字母相同的老版本及新版本的包,你都可以看到。
8.现在安装一些新的包,这些包都是我们强烈推荐给读者安装的。在R窗口界面输入如下命令:
install.packages("lubridate")
install.packages("plyr")
install.packages("reshape2")
如果你在packtpub网站上拥有一个账户,那么对于所有的Packt图书都可以下载样例代码。如果你在其他地方购买了本书,那么你可以在访问官网注册之后,通过电子邮件获取。
无论你是使用RStudio的图形界面还是直接使用install.package
命令,你需要做的事情是一样的。针对目前的R版本,只要找到一个合适的库来安装。当你使用命令语句来安装包时,R会报告一个在CRAN上能找到的包的地址,以及这个包在你的电脑上下载的路径。
R最强大的力量来源是其社区,这里再回顾两个网站。R-bloggers是一个整合了R相关新闻、入门指南的网站,这个网站上目前有超过750篇博客。如果你有关于R的问题,那么在这里可以找到很多信息。此外,Stack Overflow是一个很好的问答网站,在这个网站中,使用标签rstat可以找到很多关于R的问答。
当你的R技能增长之后,你可能希望构建一个R包给别人使用。本书的内容并不包含如何构建R包,但是请记住,R语言的核心正是由用户提交的丰富而广泛的包。
对我们来说,很幸运的一点是,在大多数Mac OS X版本以及很多Linux的版本上已经预装了Python(最新的Ubuntu和Fedora都安装了Python 2.7或者最新版本)。因此,我们在这一步不需要做太多的事,只需要检查是否一切都已经安装好了。
在本书中,我们使用Python 3.4.0版本。
请确保你的网络连接正常,我们可能需要安装一些工具。
在命令窗口执行以下步骤。
1.打开一个新的窗口,输入如下命令:
which python
2.如果你已经安装了Python,那么将看到如下内容:
/usr/bin/python
3.用python-version
命令查看你的Python版本。
python --version
如果你打算使用OS X,那么你可能会因为以下几个原因而希望安装一个独立的Python版本。首先,每次升级你的操作系统时,它都会删掉已经安装的Python包,这样你就必须重新安装已经安装过的包。其次,Python的新版本发布频率会比Apple公司自身的更新频率要高。因此,如果你需要紧随Python的更新而更新,最好安装独立的版本。最后,Apple公司的Python版本和Python官方的版本有一点不同,它在硬盘上的位置并不像官方Python那样有一个标准。
网上有很多指南可以帮助你在你的Mac上安装独立的Python版本,这里不再介绍。
在Windows系统下安装Python比较复杂,它有3种选择。第一个选项是你可以选择标准的Windows版本,然后从官网下载Python的可执行安装包进行安装。这种方式的潜在问题在于安装路径,有可能配置文件的路径和标准的Python安装路径不一致。因此,在安装每个Python包时都会遇到路径问题。此外,网上很多关于Python的教程和问答并不适用于Windows环境。我们看到很多学生在Windows上安装Python时遇到非常多的问题。除非你是专家,否则我们不建议你使用这个选项。
第二个选项是安装一个已经集成好所有科学、数值以及与数据相关包的Python预装版本。目前有两个比较合适的预装版本,一个来自Enthought公司,另一个来自Continuum Analytics公司。Enthought公司提供了适合Windows 32位和64位的Python 3.5的Canopy(华盖)版本。这个版本的免费版叫作Canopy Express,其中预装了50多个Python包,包含pandas、Numpy、SciPy、IPython和matplotlib,它们都可以直接使用。对于本书的内容来说,这些包已经足够了。Canopy Express还有一个自己的集成开发环境,类似于MATLAB或者RStudio。
Continuum Analytics公司提供的Anaconda是一个完全免费的集成Python 2.7以及3.6的版本,包含100多个包,这些包可以进行科学计算、数学、工程、数据分析等。Anaconda包含Numpy、SciPy、pandas、IPython、matplotlib和更多的包。对于本书而言,这些包绰绰有余。
第三个选项也是最佳选项,就是在Windows上使用一个Linux的虚拟机。可以使用Oracle提供的免费的VirtualBox,这样你就可以选择喜欢的Linux版本来运行Python。这种方法的缺点是在虚拟机上执行操作可能会有延迟,此外你还需要掌握Linux命令行的操作。不过,这是一名数据科学工作者应该掌握的。
按照如下步骤,使用VirtualBox安装Python。
1.如果你选择在Linux虚拟机上运行Python,登录VirtualBox的官网,从“Oracle软件”处免费下载VirtualBox。
2.参考如下安装指南,在 Windows 下进行安装:https://www.virtualbox. org/manual/ ch01.html#intro-installing。
3.安装好之后,完成指南中1.7节(开启VirtualBox)和1.8节(生成你的第一个虚拟机),以及1.9节(运行你的虚拟机)的部分。
4.当你的虚拟机开始运行时,参考本书1.4节中的内容进行Python的安装。
如果你想要安装Continuum Analytics的Anaconda版本,请参考这份详尽的指南来进行安装:http://docs.continuum. io/anaconda/install.html。
对很多读者而言,基于他们不同的经验,可以很轻松地选择是安装一个预装的Python版本还是安装虚拟机。然而,如果你对这个选择还有所困惑的话,那么请往下看。如果你之前只使用过Windows操作系统,也不太熟悉*nix命令行操作,那么基于虚拟机的操作对你来说有一些难度,但这也会迫使你提高你的水平。虽然这需要很多的努力和坚持,但是对于成为一名数据科学家而言,这两件事情都是很有用的(请相信我们)。如果你有时间,也具有相关的知识,那么最好所有的工作都在虚拟机上执行,这将帮助你更快地成为一名优秀的数据科学家,也会帮助你更方便地在相关环境中部署你的代码。如果你没有时间,或者没有相关知识,那么可以使用备选方案,安装Anaconda版本。很多人也是这样选择的。
在本书后续的内容中,我们会首先介绍基于Linux、Mac OS X的Python包的安装方法,其次才会介绍Anaconda的安装。因此,对于Windows用户来说,我们会假设你要么安装了虚拟机,要么安装了Anaconda版本。如果你选择了其他的环境,那么我们也很赞赏你探索未知的勇气并且祝你好运。Google会常伴你左右。
虽然常常称Python是“自带电池的”,但其自带的包往往不能发挥这个语言在数据分析上的强大功能。在本节,我们将安装一个名为SciPy
的“兵器库”,它包括NumPy、SciPy、pandas、matplotlib和Jupyter。
假设你已经安装了标准的Python。
在前一节如果你决定安装Anaconda版本(或者Python的其他自带所需库的版本),那么你可以忽略这部分。
为了检查特定的Python包是否已恰当地安装,请打开你的Python解释器并试着载入包。如果成功,则说明包已经安装在了你的机器上。为了实现这个操作,你可能需要通过sudo命令来获得机器的根访问权限。
以下步骤将帮助你在Linux操作系统中安装Python数据分析库。
1.你需要知道使用的Linux版本。Linux版本常常决定了你使用的包管理系统,包括apt-get、yum以及rpm。
2.打开浏览器,输入http://www.scipy.org/install.html,这里包含适用于多数操作系统的安装方案。
3.如果有变化,则这些指南可以用如下步骤代替。
(1)打开shell。
(2)如果你使用的是Ubuntu或者Debian,则输入如下代码:
sudo apt-get install build-essential python-dev pythonsetuptools
python-numpy python-scipy python-matplotlib
ipython
ipython-notebook python-pandas python-sympy python-nose
(3)如果你使用的是Fedora,则输入如下代码:
sudo yum install numpy scipy python-matplotlib ipython
python-pandas sympy python-nose
4.在OS X系统的Macintosh上安装Python数据分析库,有多种选择。
(1)第一个选择是每个工具都下载一个已经预编译过的安装包(.dmg),然后像安装Mac应用一样,安装它们(我们推荐这种方法)。
(2)第二个选择是,如果你的Mac上有MacPorts(一个安装软件的命令行工具系统),并且也安装了XCode,那么你只需要输入:
sudo port install py27-numpy py27-scipy py27-matplotlib
py27- ipython +notebook py27-pandas py27-sympy py27-nose
(3)第三个选择是Chris Fonnesbeck提供的一种经测试可行的安装方法,本书中所有的包都可以通过这种方式安装。请参考http://fonnesbeck.github.io/ ScipySuperpack。
上述方法都会花费一些时间,因为需要安装大量的软件。
历史上,安装SciPy库曾经非常有挑战,因为安装过程非常繁复,甚至还需要Fortran。因此,我们不建议你自己从源代码开始进行编译,除非你自己乐于折腾这些内容。
现在,一个自然的问题是:我们刚刚都安装了些什么?我们安装了NumPy、SciPy、matplotlib、IPython、IPython Notebook、pandas、SymPy和nose的最新版本。这些包的描述如下。
在后续章,我们将更深入地讨论上述包。然而,如果我们不提Python IDE,肯定会被人认为是不专业的。简单来说,我们推荐在你最喜欢的文本编辑器中集成Python的IDE,比如来自GitHub的开源的Atom、sublime,或者Ruby程序员最爱的TextMate。Vim和Emacs也是非常好的选择,因为它们除了功能强大之外,还可以很容易地在远程服务器上使用(数据科学家经常使用这种工作方式)。这些编辑器都有很多插件,它们可以提供代码补全、高亮、缩进等功能。如果你一定要选择一个IDE,那么可以试试PyCharm(社区版本是免费的)。你会发现大多数Python IDE比处理数据更适合网页开发。
本书后面的数据分析可能还需要用到一些其他的Python包。正如R有一个供社区提交构建包的仓库,Python也有一个类似的功能,它以Python包指数(PyPI)的形式呈现。截至2014年8月28日,PyPI中包含48 054个包。
在这里,你只要连接到互联网即可。除非特别指出,否则这里的步骤都假设你使用的是操作系统默认的Python版本,而且不是Anaconda。
接下来的步骤将向你展示如何下载Python包,并用命令行进行安装。
1.下载包的源代码,可以将其保存到任何你喜欢的地方。
2.对包进行解压。
3.打开一个控制台。
4.定位源代码的路径。
5.输入如下命令:
python setup.py install
6.如果需要根访问,那么输入如下命令:
sudo python setup.py install
一种更便捷和简单的方法是使用pip安装。请按照如下步骤进行操作。
1.首先,检查你的pip是否已经安装好。打开Python解释器,输入:
>>>import pip
2.如果没有出现错误,说明你的pip已经安装好了,那么你可以直接跳到第5步;如果你看到了错误提示,那么接下来我们快速安装pip。
3.下载get-pip.py到你的机器上。
4.打开终端窗口,定位到下载的文档,输入:
python get-pip.py
或者
sudo python get-pip.py
5.如果pip已经安装好,那么请保证你现在在系统命令行的提示符下。
6.如果你使用系统默认的Python版本,那么请输入:
pip install networkx
或者
sudo pip install networkx
7.如果你使用的是Anaconda版本,那么输入如下命令:
conda install networkx
8.现在,让我们试着安装其他包,比如ggplot。输入:
pip install ggplot
或者
sudo pip install ggplot
你至少有两种不同的方法安装Python包。比较老派的方法是,下载包的源代码,在你自己的机器上拆包,然后运行带有安装标签的setup.py
脚本。如果你愿意,也可以在文本编辑器中打开setup.py
,看看这里的脚本到底在干什么。基于你当前环境的权限管理,你可能需要sudo权限。
第二种方法是使用pip安装。这种方法会自动抓取远程库中的包,然后在本地进行安装。如果这种方法可行,我们建议使用这种方法。
由于pip很有用,所以我们建议读者阅读其在线指南。请特别注意其中非常有用的功能pip freeze > requirements.txt
,这个功能可以让你和你的同事交流外部相关的依赖性。
另外,conda
是包管理器以及Anaconda版本Python的pip的替代品。其官方网站的介绍中说,“它是一个跨平台的Python包的管理器。”conda的理念非常高端,超越了Python本身。如果你在使用Anaconda,那么我们强烈建议你深入研究conda的功能,并且学会使用它,用它代替pip来作为你的包的管理器。
virtualenv是Python工具的一种变形。一旦开始使用这个工具,你就会义无反顾地爱上它。virtualenv会创建一个本地环境,并在这个环境下安装自带的Python版本。一旦从shell中激活这个环境,你就可以很方便地用pip install
在本地安装包了。
首先,这听起来可能有点奇怪。为什么会有人希望这么做呢?因为这不仅可以帮助你处理涉及跨版本的Python包的依赖关系所带来的问题,而且还可以让你能够在不破坏其他重要环节的前提下快速地试验。假设你建立了一个网页应用,用的是包awesom_template
的0.8版本,但是你的新数据产品需要这个包的1.2版本。在这种情况下你该怎么办呢?如果使用virtualenv,那么你可以二者都用。
另外一个例子是,如果你在某台机器上没有管理员权限,那么你该怎么办呢?你不能用sudo pip install
来安装包,因而无法进行数据分析。然而如果有virtualenv,则这些都不成问题。
虚拟环境是软件开发者高效协同的开发工具。环境可以保证软件在不同的机器上以不同的依赖方式运行(比如生产或者开发服务器)。环境同时能够提醒其他开发者,这里有待开发的软件需求。Python的virtualenv保证了软件是在整体环境中创建的,可以独立测试、协同部署。
假设你已经完成了前面的步骤,那么现在你就已经准备好了。
按照如下步骤,安装并测试虚拟环境。
1.打开一个shell命令行,输入命令pip install virtualenv
或者sudo pip install virtualenv
。
2.安装完成后,在命令窗口输入virtualenv
,你将看到如下截屏中的内容。
3.创建一个临时路径,用如下命令转变当前路径:
mkdir temp
cd temp
4.在这个路径下,创建第一个虚拟环境,并命名为venv:
virtualenv venv
5.你将看到类似如下的文字:
New python executable in venv/bin/python
Installing setuptools, pip...done.
6.现在,新的本地Python版本已经生成了。如果要用它,那么只需激活这个环境,使用如下代码:
source ./venv/bin/activate
7.注意,活动的脚本无法直接执行,必须先用source
命令激活。此外,注意你的shell命令提示符可能已经发生了变化,前缀已变成了venv
,这表明你现在正在虚拟环境下工作。
8.要想验证这一点,使用which
命令来观察Python的位置:
which python
你将看到如下输出:
/path/to/your/temp/venv/bin/python
9.输入如下命令进行安装:
pip install flask
Flask是用Python写的一个微型网站框架。这个命令同时会安装很多Flask用到的包。
10.最后,我们验证一下虚拟环境和pip带来的版本控制的力量:
pip freeze > requirements.txt
cat requirements.txt
应该有如下输出结果:
Flask==0.10.1
Jinja2==2.7.2
MarkupSafe==0.19
Werkzeug==0.9.4
itsdangerous==0.23
wsgiref==0.1.2
11.请注意,不仅捕捉到了包名,包括包的版本号也捕捉到了。requirements.txt
的优美之处在于,如果我们有了一个新的虚拟环境,那么只要简单地输入如下命令,就可以安装列出来的不同版本的Python包:
pip install -r requirements.txt
12.如果要注销虚拟环境,则只需要输入命令:
deactivate
virtualenv生成自己的虚拟环境,有自己独立的安装路径,并且可以不依赖默认的操作系统环境进行独立的操作。如果你希望试验新的库,那么使用virtualenv就可以避免干扰系统层面的Python版本。更进一步,如果你有一个正在工作的应用,而且你希望它保持现状,那么也可以使用virtualenv让你的应用在它自己的virtualenv下运行。
virtualenv是一个很不错的工具。对于任何一名Python程序员来说,它都是无价的。然而,我们还是要提醒诸位,为了提升程序性能,Python提供了很多工具来与C对象打通。因此,在你的虚拟环境下安装特定的Python包(比如NumPy和SciPy),需要安装和编译额外的依赖关系,这是由系统来指定的。比较顺利的时候,这些编译也是非常冗长的,这也是我们为什么要维护一个虚拟环境的原因之一。更糟糕的是,如果某些依赖没有安装,将导致编译失败,产生一些如同外星语言一般的报错信息,复杂的依赖链条会让你感到非常困扰。即便是有经验的数据科学家,也会对此头痛不已。
一个简单的解决方案是,使用包管理器来把复杂的库安装到系统环境下。这些工具使用第三方包的预编译格式。如果你在系统环境安装了这些Python包,那么当你初始化virtualenv时,可以用--system-site-packages
来做标记。这个标记告诉virtualenv使用系统已经安装的包,并且设法避免编译新增的安装包。要在你的环境下使用系统已经安装好的包(比如,当你希望使用一个包的新版本时),使用pit install -I
,在虚拟环境下安装依赖关系到virtualenv,并且忽视全局的包。当你只需要在系统上安装大规模的包,同时使用virtualenv来进行其他类型的开发时,这种技术是比较有效的。
本书剩余的部分,我们将假设你已经安装了virtualenv以及本章提到的工具。因此,我们不会太过强调或者纠结于虚拟环境的细节。你只要知道,虚拟环境是一个你可以单独执行本书中所有示例的安全环境。