利用Python进行数据分析(原书第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-03 04:23:40

点击下载

作者:(美)韦斯·麦金尼(Wes McKinney)

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

利用Python进行数据分析(原书第2版)

利用Python进行数据分析(原书第2版)试读:

前言

第2版新内容

本书第1版出版于2012年,彼时基于Python的开源数据分析库(例如pandas)仍然是一个发展迅速的新事物。在本次更新、拓展的第2版中,我在一些章节内进行了修改,以解释过去5年中发生的不兼容的变更、弃用和一些新特性。此外,我还添加了新内容,用以介绍在2012年还不存在或者不成熟的工具。最后,我会避免把一些新兴的或者不太可能走向成熟的开源项目写入本书。我希望本版的读者能够发现本书内容在2020年或者2021年仍然几乎像在2017年一样适用。

第2版中的主要更新包括:

·所有的代码,包括把Python的教程更新到了Python 3.6版本(第1版中使用的是Python 2.7)

·更新了Python第三方发布版Anaconda和其他所需Python包的安装指引

·更新pandas库到2017年的最新版

·新增一章,关于更多高级pandas工具和一些使用提示

·新增statsmodels和scikit-learn的简明使用介绍

除了以上更新内容,我还重新组织了第1版的部分重要内容,使本书对新手来说更易于理解。本书约定

以下印刷约定将在本书中使用:斜体(Italic)

表示新的术语、URL、email地址、文件名和文件扩展名。等宽字体(Constant width)

用于程序清单以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、表达式和关键字等。等宽粗体(Constant width bold)

表示命令或其他应当由用户键入的文本。等宽斜体(Constant width italic)

表示应当由用户提供的值来替代的文本,或者其他由上下文决定的值。本符号表示提示或建议。本符号表示一般性说明。本符号表示警告。使用代码示例

可以通过本书的GitHub仓库获取本书每一章中的数据文件和相关材料。GitHub仓库地址:http://github.com/wesm/pydata-book。

本书的目的在于帮助你完成工作。一般来说,本书提供的示例代码,你可以在你的程序或文档中使用而无须联系我们获取许可,除非你需要重造大量代码。举例来说,使用本书中的代码段编写程序无须授权许可,但销售或发行O’Reilly图书的CD-ROM代码示例则需要许可。引用本书代码回答问题不需要许可,但在你的产品文档中大量使用本书示例代码则需要许可。

我们鼓励注明资料来源的行为,但这并不是必需的。来源注明通常包括书名、作者、出版社及ISBN,例如:“Python for Data Analysis by Wes McKinney(O’Reilly).Copyright 2017Wes McKinney,978-1-491-95766-0”。

如果你认为你对本书示例代码的使用超过了正常使用范围或者需要以上介绍的授权许可,请联系permissions@oreilly.com。O’Reilly SafariSafari(前身为Safari Books Online)是一个会员制的培训、参考网站,服务于企业、政府、教育者和个人。

会员可以访问数千书籍、培训视频、学习路径、交互教程和超过250家出版商的企划列表,包括O’Reilly Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley&Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones&Bartlett、Course Technology等。

更多信息,请访问http://oreilly.com/safari。如何联系我们

对于本书如果有任何意见或疑问,请按照以下地址联系本书出版商。美国:

O’Reilly Media,Inc.

1005Gravenstein Highway North

Sebastopol,CA 95472中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

我们为本书准备了一个网页,用于陈列勘误、示例和其他附加信息。访问地址是:http://bit.ly/python_data_analysis_2e。

针对本书评论或提出技术问题,请发送邮件至:bookquestions@oreilly.com。

关于本书的更多信息、课程、会议及新闻,请访问我们的网站:http://www.oreilly.com。

Facebook联系我们:http://facebook.com/oreilly

Twitter联系我们:http://twitter.com/oreillymedia

YouTube观看我们的视频:http://www.youtube.com/oreillymedia致谢

本书是全世界很多人多年来富有成效的讨论、协作和支持的成果。我想对他们中的一些代表致以谢意。

怀念:John D.Hunter(1968——2012)

我们亲爱的朋友和同行John D.Hunter在经历了一场与结肠癌的战斗后,于2012年8月28日离开了世界。那时正是我完成本书第1版最终手稿后不久。

John对Python科学计算和数据社区的影响之大难以估量,他给我们留下的遗产价值非凡。除了在2000年初期开发matplotlib之外(那时Python还没有当下如此流行),他还帮助塑造了一代核心开源开发者的文化,如今这些开发者已经成为Python生态系统的顶梁柱,而Python生态系统对于现如今的我们来说似乎是理所当然的。

在2010年1月,我开源生涯的早期,那时候pandas刚刚发布了0.1版本,我便有幸结识了John。即便在最黑暗的时期,他的才华和指导仍在帮助我推动pandas前进,实现Python成为数据分析第一语言的愿景。

John与IPython、Jupyter项目的先锋Fernando Pérez、Brian Granger及其他很多Python社区的倡议人联系紧密。我们四人曾经希望共同写作一本书,但只有我个人时间最为自由,所以这个想法被搁置了。我非常确信他会为过去5年中我们个人及我们社区所取得的成就感到骄傲。

第2版致谢(2017)

距离我在2012年7月完成第1版手稿已经5年了。很多事情都发生了变化。Python社区获得了极大的成长,围绕Python的开源软件生态系统也十分繁荣。pandas核心开发者孜孜不倦的付出,使得pandas项目高速成长,也使得pandas的用户群体遍布Python数据科学生态系统的各个角落,没有他们本书将不会存在。pandas的核心开发者包括但不限于:Tom Augspurger、Joris van den Bossche、Chris Bartak、Phillip Cloud、gfyoung、Andy Hayden、Masaaki Horikoshi、Stephan Hoyer、Adam Klein、Wouter、Overmeire、Jeff Reback、Chang She、Skipper Seabold、Jeff Tratner和y-p。

在第2版的实际写作过程中,非常感谢O’Reilly的工作人员在写作进程中给予的耐心帮助。他们是Marie Beaugureau、Ben Lorica和Colleen Toporek。我再次得到了优秀技术审阅人的支持,他们是Tom Augpurger、Paul Barry、Hugh Brown、Jonathan Coe和Andreas Müller。感谢你们。

本书的第1版已经被翻译成多种语言,包括汉语、法语、德语、日语、韩语和俄语。将本书翻译给外国读者,是一份工作量大且缺少关注的付出。感谢你们帮助全世界更多人士学会如何编程及使用数据分析工具。

在过去几年中,Cloudera和Two Sigma投资公司对我的持续开源开发工作的支持使我感到十分幸运。由于开源项目相对于用户基数的比例越来越小,向重要开源项目提供开发支持变得越来越重要。这是一件值得去做的正确工作。

第1版致谢(2012)

如果没有众多相关人士的支持,写作本书对我来说将会十分困难。

对于O’Reilly的工作人员,我非常感谢我的编辑Meghan Blanchette和Julie Steele,他们在整个写作过程对我给予指导。Mike Loukides还在建议阶段与我一起工作,帮助本书付梓。

我收到了大量相关人士丰富的技术审阅。尤其是Martin Blais和Hugh Brown,他们自始至终在提高本书示例的清晰度、组织度上提供了令人难以置信的帮助。James Long、Drew Conway、Fernando Pérez、Brian Granger、Thomas Kluyver、Adam Klein、Josh Klein、Chang She和Stéfan van der Walt每个人都审阅了本书的一章或多章,从很多角度提供了有效反馈。

我从数据社区的朋友和同行那里获得了很多关于示例和数据集的优秀想法,他们是:Mike Dewar、Jeff Hammerbacher、James Johndrow、Kristian Lum、Adam Klein、Hilary Mason、Chang She和Ashley Williams。

当然,我也非常感激开源科学Python社区的众多领头人,他们为我的开发工作打下了基础,并在本书写作过程中给予我鼓励:IPython核心团队(Fernando Pérez、Brian Granger、Min Ragan-Kelly、Thomas Kluyver和其他相关人士)、John Hunter、Skipper Seabold、Travis Oliphant、Peter Wang、Eric Jones、Robert Kern、Josef Perktold、Francesc Alted、Chris Fonnesbeck以及其他由于人数太多而无法提及的人们。还有很多人士一直以来提供了支持、想法和鼓励:Drew Conway、Sean Taylor、Giuseppe Paleologo、Jared Lander、David Epstein、John Krowas、Joshua Bloom、Den Pilsworth、John Myles-White以及很多已经忘了姓名的人士。

我还要感谢前些年生活中的一些人。首先是在AQR的前同事,他们都曾为我在pandas方面的工作喝彩,他们是:Alex Reyfman、Michael Wong、Tim Sargen、Oktay Kurbanov、Matthew Tschantz、Roni Israelov、Michael Katz、Chris Uga、Prasad Ramanan、Ted Square和Hoon Kim,以及我的指导教授Haynes Miller(麻省理工学院)和Mike West(杜克大学)。

2014年,我在更新本书代码示例、修正一些由于pandas变更产生的错误时,从Phillip Cloud和Joris Van den Bossche处获得了重要帮助。

个人方面,感谢Casey在写作过程中为我提供了无价的日常支持,忍受我的情绪起伏直到我按计划表写出了最终手稿。最后,感谢我的父母Bill和Kim,他们教会我如何去追寻梦想、永不止步。第1章准备工作1.1本书内容

本书关注的是利用Python操作、处理、清洗和操作数据时的基本要点。我的目标是提供一份Python编程语言以及Python面向数据的类库生态系统和工具的指南,该指南将帮助你成为一个高效的数据分析师。尽管“数据分析”出现在书名里,但本书将明确专注于Python语言的编程、类库、工具而不是数据分析方法论。这就是你需要的Python数据分析编程。1.1.1 什么类型的数据

当我说“数据”时,我想表达的准确含义是什么?主要的关注点是结构化数据,这个有意义的术语包含了众多常见的数据形式,例如:

·表格型的数据,每一列可能会包含不同的类型(字符串、数值、日期或其他)。这类数据包含了大部分类型的数据,它们通常存储在关系型数据库或者由制表符、逗号分隔的文本文件中。

·多维数组(矩阵)。

·由键位列关联的多张表数据(对于SQL用户来说就是主键或外键)。

·均匀或非均匀的时间序列。

以上是一份大致完整的清单。但该清单有时并不完全准确,很多数据集可以转换为一种更适合分析、建模的结构形式。如果不进行转换,从数据集中提取特征形成一种结构形式也是可行的。例如,一个新闻文章的数据集可以被处理为一个词频表,然后再用于情感分析。

大部分表格程序(比如微软Excel,或许是全世界应用最广泛的数据分析工具)的用户对这些类型的数据并不陌生。1.2为何利用Python进行数据分析

对很多人来说,Python编程语言拥有强大的吸引力。从1991年面世以来,Python与Perl、Ruby等语言成为最流行的解释型语言。Python和Ruby从2005年之后格外流行,可以基于众多web框架,比如Rails(Ruby)和Django(Python)进行网站搭建。此类语言通常称为脚本语言,因为它们可以用于快速编写小型程序、脚本或对其他任务进行自动化。我并不喜欢“脚本语言”这个术语,因为它的言外之意似乎是“脚本语言”无法构建大型软件。在解释型语言中,由于历史和文化上的原因,Python发展出了一个大型、活跃的科学计算及数据分析社区。在过去十年里,Python已经从一个最前沿或者说“后果自负”的科学计算语言,成为数据科学、机器学习和学术/工业界通用软件开发等领域最为重要的语言之一。

在数据科学、交互式计算以及数据可视化等领域,Python经常被拿来和其他开源或商业编程语言、工具进行对比,比如R、MATLAB、SAS、Stata等。近些年,Python提高了对类库的支持(比如pandas和scikit-learn),使得它成为数据分析任务的一个流行选择。再综合考虑Python在通用软件工程上的总体实力,它便成为搭建数据应用的首选语言。1.2.1 Python作为胶水

Python在科学计算方面的成功部分是因为它很容易整合C、C++和FORTRAN等语言的代码。大部分现代计算环境都拥有相似的存量程序集,这些程序集使用FORTRAN和C的库进行线性代数、调优、积分、快速傅里叶变换等算法运算。很多公司和国家实验室都使用Python将过去数十年产生的存量软件黏合在一起。

很多程序中包含了一小部分运行起来要花费大量时间的代码,而大量“胶水代码”却很少运行。很多情况下,胶水代码的执行时间可以忽略不计;精力应当更多地投入优化计算瓶颈的方面,有些时候需要将代码迁移到底层语言,比如C。1.2.2 解决“双语言”难题

在许多组织中,通常会使用一种更特殊的计算语言,比如用SAS或R针对想法进行研究、原型实现和测试,之后再将这些想法迁移到用Java、C#或C++编写的大型生产环境上。逐渐地,人们发现Python不但更适用于研究和原型实现,也适合搭建生产系统。当一种语言可以满足需求时,为什么要维持两个开发环境呢?当使用相同程序工具集来兼顾研究人员和软件工程师的好处越发明显时,我认为会有越来越多的公司选择走使用一种语言的路线。1.2.3 为何不使用Python

虽然Python可以为很多分析应用和通用系统提供一个优秀环境,但仍然有一些场景用Python并不合适。

由于Python是一个解释型语言,大多数情况下Python代码的运行效率会低于Java或C++等编译型语言。因为开发者时间通常比CPU时间更有价值,很多人就愉快地选择了使用Python。然而,当需要一款低延迟、高资源利用要求的应用时(例如高频交易系统),为了尽可能获得最高性能,在底层语言(也意味着更低的代码生产力)比如C++上花费编程时间将会更加值得。

当搭建高并发、多线程应用,尤其是多CPU绑定线程时,使用Python则会成为一项挑战。原因在于Python拥有全局解释器锁(GIL),这是一种防止解释器同时执行多个Python指令的机制。GIL存在的技术原因超出了本书的讨论范围。然而在大数据处理应用中,计算机集群需要在合理时间内处理一个数据集,单进程多线程系统的场景仍然是有需求的。

这并不是说Python无法执行真正的多线程、并行代码。Python的C语言拓展使用本地多线程(在C或C++中)以并行方式运行代码,而不受GIL的影响,因为这些拓展通常无须与Python对象交互。1.3重要的Python库

对于那些对Python数据生态系统以及本书所使用的类库不太熟悉的人士,我将简要地介绍一部分重要的库。1.3.1 NumPy

NumPy(http://numpy.org)是Numerical Python的简写,是Python数值计算的基石。它提供多种数据结构、算法以及大部分涉及Python数值计算所需的接口。NumPy还包括其他内容:

·快速、高效的多维数组对象ndarray

·基于元素的数组计算或数组间数学操作函数

·用于读写硬盘中基于数组的数据集的工具

·线性代数操作、傅里叶变换以及随机数生成

·成熟的C语言API,允许Python拓展和本地的C或C++代码访问NumPy的数据结构和计算设施。

除了NumPy赋予Python的快速数组处理能力之外,NumPy的另一个主要用途是在算法和库之间作为数据传递的数据容器。对于数值数据,NumPy数组能够比Python内建数据结构更为高效地存储和操作数据。此外,用底层语言编写的库,例如用C或Fortran编写的库,可以在NumPy数组存储的数据上直接操作,而无须将数据复制到其他内存中后再操作。因此,许多Python的数值计算工具将NumPy数组作为基础数据结构,或与NumPy进行无缝互操作。1.3.2 pandas

pandas(http://pandas.pyda ta.org)提供了高级数据结构和函数,这些数据结构和函数的设计使得利用结构化、表格化数据的工作快速、简单、有表现力。它出现于2010年,帮助Python成为强大、高效的数据分析环境。在本书中主要使用的pandas对象是DataFrame,它是用于实现表格化、面向列、使用行列标签的数据结构;以及Series,一种一维标签数组对象。

pandas将表格和关系型数据库(例如SQL)的灵活数据操作能力与NumPy的高性能数组计算的理念相结合。它提供复杂的索引函数,使得数据的重组、切块、切片、聚合、子集选择更为简单。由于数据操作、预处理、清洗在数据分析中是重要的技能,pandas将是本书的重要主题。

介绍一点背景知识,早在2008年,我在一家量化投资企业——AQR资本管理公司供职时,便开始了pandas的开发。那时候,我有一些独特的需求是工具清单上任何单个工具无法满足的:

·带有标签轴,支持自动化或显式数据对齐功能的数据结构——这可以防止未对齐数据和不同数据源的不同索引数据所引起的常见错误

·集成时间序列函数功能

·能够同时处理时间序列数据和非时间序列数据的统一数据结构

·可以保存元数据的算术操作和简化

·灵活处理缺失数据

·流行数据库(例如基于SQL的数据库)中的合并等关系型操作

我想将以上的工作在同一个地方完成,最好还能在一个拥有通用软件开发能力的语言中实现。Python就是一个很好的备选项,但是那时候并没有这类数据结构的整合集,也没有能提供相关功能的工具。结果就是pandas最初被开发出来用于解决金融和商业分析问题,pandas尤其擅长深度时间序列和处理商业进程中产生的时间索引数据。

使用R语言进行统计计算的用户对DataFrame的名称会非常熟悉,因为这个对象是根据相似的R data.frame对象进行命名的。与Python不同的是,数据框在R语言中是标准库中的内容。因此,pandas中的很多特征通常与R核心的实现或者R的附加库提供的功能一致。

pandas的名字的来源是panel data,这是计量经济学中针对多维结构化数据集的术语。pandas也是Python data analysis(Python数据分析)自身的简写短语。1.3.3 matplotlib

matplotlib(http://matplotlib.org)是最流行的用于制图及其他二维数据可视化的Python库。它由John D.Hunter创建,目前由一个大型开发者团队维护。matplotlib被设计为适合出版的制图工具。对于Python编程者来说也有其他可视化库,但matplotlib依然使用最为广泛,并且与生态系统的其他库良好整合。我认为将它作为默认可视化工具是一个安全的选择。1.3.4 IPython与Jupyter

IPython项目(http://ipython.org)开始于2001年,由Fernando Pérez发起,旨在开发一个更具交互性的Python解释器。在过去的16年中,它成为Python数据技术栈中最重要的工具之一。尽管它本身并不提供任何计算或数据分析工具,它的设计侧重于在交互计算和软件开发两方面将生产力最大化。它使用了一种执行-探索工作流来替代其他语言中典型的编辑-编译-运行工作流。它还提供针对操作系统命令行和文件系统的易用接口。由于数据分析编码工作包含大量的探索、试验、试错和遍历,IPython可以使你更快速地完成工作。

2014年,Fernando和IPython团队发布了Jupyter项目(http://jupyter.org)。Jupyter项目旨在设计一个适用于更多语言的交互式计算工具。IPython web notebook则成为Jupyter notebook,可以支持超过40种编程语言。IPython系统目前可以作为一个内核(一种编程语言模式)用于在Jupyter中使用Python。

IPython自身已成为Jupyter开源项目中的一个组件,后者提供交互性、探索性的高效环境。IPtyhon最古老、最简单的“模式”就是一个加强版的Python命令行,用于提高编写、测试、调试Python代码的速度。你也可以通过基于Web、支持多语言的代码“笔记本”——Jupyter Notebook来使用IPython系统。IPython命令行和Jupyter notebook对于数据探索和可视化非常有用。

Jupyter notebook系统允许你使用Markdown和HTML创建包含代码和文本的富文档。其他编程语言也针对Jupyter实现了内核,允许你在Jupyter中使用多种语言而不仅仅是Python。

对我个人来说,IPython涉及我工作的大部分内容,包括运行、调试、测试代码。

在随书资料(http://github.com/wesm/pydata-book)中,你可以找到包含本书所有章节示例代码的Jupyter notebook。1.3.5 SciPy

SciPy(http://scipy.org)是科学计算领域针对不同标准问题域的包集合。以下是SciPy中包含的一些包:scipy.integrate

数值积分例程和微分方程求解器scipy.linalg

线性代数例程和基于numpy.linalg的矩阵分解scipy.optimize

函数优化器(最小化器)和求根算法scipy.signal

信号处理工具scipy.sparse

稀疏矩阵与稀疏线性系统求解器scipy.special

SPECFUN的包装器。SPECFUN是Fortran语言下实现通用数据函数的包,例如gamma函数。scipy.stats

标准的连续和离散概率分布(密度函数、采样器、连续分布函数)、各类统计测试、各类描述性统计。SciPy与NumPy一起为很多传统科学计算应用提供了一个合理、完整、成熟的计算基础。1.3.6 scikit-learn

scikit-learn项目(http://scikit-learn.org)诞生于2010年,目前已成为Python编程者首选的机器学习工具包。仅仅七年,scikit-learn就拥有了全世界1500位代码贡献者。其中包含以下子模块。

·分类:SVM、最近邻、随机森林、逻辑回归等

·回归:Lasso、岭回归等

·聚类:k-means、谱聚类等

·降维:PCA、特征选择、矩阵分解等

·模型选择:网格搜索、交叉验证、指标矩阵

·预处理:特征提取、正态化

scikit-learn与pandas、statsmodels、IPython一起使Python成了高效的数据科学编程语言。本书中并不会提供详细的scikit-learn指引,但我会简要介绍scikit-learn中的一些模型以及如何与本书中出现的其他工具一起使用这些模型。1.3.7 statsmodels

statsmodels(http://statsmodels.org)是一个统计分析包。它源自斯坦福大学统计学教授Jonathan Taylor利用R语言实现的各类分析模型。Skipper Seabold和Josef Perktold早在2010年便创建了新的statsmodels项目。自那之后该项目迅速成长,拥有大量活跃用户和贡献者者。Nathaniel Smith开发了Patsy项目,为R语言公式系统所驱动的statsmodels包提供公式、模型规范框架。

与scikit-learn相比,statsmodels包含经典的(高频词汇)统计学、经济学算法。它所包含的模型如下。

·回归模型:线性回归、通用线性模型、鲁棒线性模型、线性混合效应模型等

·方差分析(ANOVA)

·时间序列分析:AR、ARMA、ARIMA、VAR等模型

·非参数方法:核密度估计、核回归

·统计模型结果可视化

statsmodels更专注于统计推理,提供不确定性评价和p值参数。相反,scikit-learn更专注于预测。

和scikit-learn一样,我将简要介绍如何与NumPy和pandas一起使用statsmodels。1.4安装与设置

由于每个人使用Python的应用场景不一样,设置Python、安装附加包并没有一个统一的解决方案。很多读者并没有一个适合本书后续内容的Python开发环境,因此我将给出一份各操作系统上的详细Python安装说明。我推荐使用免费的Anaconda发布版。在本书写作的时候,Anaconda提供Python 2.7和Python 3.6两个版本,当然未来某个时间版本会变更。本书使用Python 3.6版本,我推荐使用Python 3.6或更高版本。1.4.1 Windows

在Windows上起步,需要先下载Anaconda安装器(http://anaconda.com/downloads)。我推荐读者按照Anaconda官网下载页上的安装说明进行安装,当读者读至此时安装说明可能会和本书出版时的说明不太一样。

现在,让我们来确定所有设置是否都正确。鼠标右击开始菜单,选择命令行,打开命令行应用(也就是cmd.exe)。通过输入python来启动Python解释器。你应该可以看到符合你下载的Anaconda版本的信息:C:\Users\wesm>pythonPython 3.5.2 |Anaconda 4.1.1 (64-bit)| (default, Jul 5 2016, 11:41:13)[MSC v.1900 64 bit (AMD64)] on win32>>>

要退出命令行,按下Ctrl-D(Linux或macOS),按下Ctrl-Z(Windows),或者输入命令exit()后按下回车键。1.4.2 Apple(OS X和macOS)

下载OS X版的Anaconda安装器,命名如Anaconda3-4.1.0-MacOSX-x86_64.pkg。双击.pkg文件运行安装器。安装器运行时,会自动将Anaconda执行路径添加到你的.bash_profile文件中,该文件位于/Users/$USER/.bash_profle。

确认安装正常,可以尝试在系统命令行(打开终端应用得到命令提示符)中运行IPython:$ ipython

要退出命令行,按下Ctrl-D,或者输入命令exit()后按下回车键。1.4.3 GNU/Linux

Linux下的安装细节取决于你所用的Linux版本,但是我会给出部分Linux系统的Python安装细节,例如Debian、Ubuntu、CentOS和Fedora。设置方法与OS X大致相同,Anaconda的安装方法除外。安装器是一段shell脚本,必须通过终端执行。选择x86(32位)还是x86_64(64位)安装器取决于你的操作系统是32位还是64位。安装时,你需要使用一个文件名类似于Anaconda3-4.1.0-Linux-x86_64.sh的文件,并在bash命令行输入:$ bash Anaconda3-4.1.0-Linux-x86_64.sh部分Linux发行版包含所有所需的Python包,可以通过像apt这样的工具进行安装。本书的安装是针对Anaconda的。这两种方式下都很容易进行跨版本重现和包版本更新。

在接受许可后,需要选择Anaconda的安装路径。推荐在主目录下的默认位置进行安装——例如/home/$USER/anaconda($USER一般就是你的用户名)。

Anaconda可能会问你是否需要将它的bin/目录添加到$PATH变量中去。如果在安装后出现了问题,你可以自行修改.bashrc(或者.zshrc,如果你使用的是zsh命令行):export PATH=/home/$USER/anaconda/bin:$PATH

完成修改后,你可以新开一个终端进程或通过source~/.bashrc再次执行你的.bashrc。1.4.4 安装及更新Python包

在本书阅读中,你可能想要安装Anaconda并不包含的额外Python包。通常通过以下命令进行安装:conda install package_name

如果不奏效你可以使用pip包管理工具进行安装:pip install package_name

你还可以使用conda update命令来更新包:conda update package_name

pip还支持通过--upgrade标识升级:pip install --upgrade package_name

贯穿本书,你会有多次机会使用以上命令。当你能够同时使用conda和pip进行包安装时,请不要尝试使用pip更新conda安装的包,否则可能会导致环境问题。当使用Anaconda或者Miniconda时,最好还是使用conda进行更新。1.4.5 Python 2和Python 3

Python 3.x的第一个版本发布于2008年年底。它包含了大量与Python 2.x代码不兼容的变更。因为距离Python在1991年第一次发布已经过去了17年,鉴于长期以来的经验教训,创造一个“震撼”的Python 3版本是极好的。

2012年,大部分科学数据分析社区仍然在使用Python 2.x,因为当时很多包并没有完全兼容Python 3。因此,本书的第1版使用了Python 2.7。现如今,用户可以根据喜好在Python 2.x和Python 3.x进行选择,因为基本上两个版本都有全量的库支持。

然而,Python 2.x将在2020年结束开发周期(包括重要安全补丁),所以在Python 2.7下创建新项目并不是个好主意。因此,本书将使用Python 3.6,该稳定版部署更为广泛、支持更为友好。我们将Python 2.7称为“传统Python”,将Python 3.x简称为“Python”。我推荐你也这么做。

本书使用Python 3.6作为基础,你的Python版本可能比3.6更新,但本书的代码示例应该是向前兼容的。部分代码示例可能会有不同的运行结果,或者无法在Python 2.7中运行。1.4.6 集成开发环境和文本编辑器

当被问及我的标准开发环境时,我会回答说“IPython加文本编辑器”。通常,我会在IPython或Jupyter notebook中写一段代码,然后迭代测试、调试。这种方式有助于在交互情况下操作数据,并可以通过肉眼确认特定数据集是否做了正确的事。像pandas和NumPy库都被设计为适合在命令行下使用。

然而,当开发软件时,一些用户可能倾向于使用功能更为丰富的集成开发环境(IDE),而不是功能相对简单的文本编辑器比如Emacs或Vim。下面介绍一些IDE:

·PyDev(免费),基于Eclipse平台的IDE

·PyCharm,Jetbrains公司开发(对商业用户收费,对开源用户免费)

·Python Tools for Visual Studio(适合Windows用户)

·Spyder(免费),Anaconda集成的IDE

·Komodo IDE(收费)

由于Python十分流行,大多数文本编辑器,比如Atom和Sublime Text 2都对Python有较好的支持。1.5社区和会议

除了网络搜索,科学、数据相关的Python邮件列表对于解决问题也非常有帮助。可以看看下列邮件列表:

·pydata:与数据分析和pandas相关的谷歌群组列表

·pystatsmodels:与statsmodels和pandas相关的问题

·scikit-learn邮件列表(scikit-learn@python.org)以及Python机器学习相关内容

·numpy-discussion:NumPy相关问题

·scipy-user:与SciPy或科学相关的Python问题

我有意不给出上述邮件列表的URL以免以后发生变更,这些URL很容通过互联网搜索找到。

每年全世界都会举办很多Python编程者会议。如果你想联系其他和你有共同爱好的Python编程人士,建议你在可能的情况下尝试参加一个会议。很多会议会为没有能力负担入场费或旅行费的人士提供经济支持。以下会议可供考虑:

·PyCon和EuroPython:北美和欧洲的两大主要Python会议

·SciPy和EuroSciPy:北美和欧洲面向科学计算的会议

·PyData:全世界范围内一系列区域性的会议,主题为数据科学和数据分析用例

·国际和地区性的PyCon会议(参见http://pycon.org上的完整列表)1.6快速浏览本书

如果你从未使用Python编程,你需要在第2章和第3章上花些时间,这两章我提供了一份关于Python语言特征、IPython命令行和Jupyter notebook的教程。这些内容是本书后续章节所需的预备知识。如果已经有Python经验,你可以跳过这两章。

下一章,我会简单介绍NumPy的关键特性,并在附录A中提供高级的NumPy使用技术。之后,我会介绍pandas,并将本书后续内容集中于应用pandas、NumPy和matplotlib(可视化)进行数据分析的主题上。我已经尽可能地按照递增的方式来组织全书的内容,但在部分章节中偶尔还是会有些细微的交叉,比如一些还不需要引入概念的独立场景。

尽管读者们可能会有很多不同的工作目的,但工作任务大体上会分为以下几个部分。与外部世界交互

读写各种格式的文件以及数据存储准备

对分析数据进行清洗、处理、联合、正态化、重组、切片、切块和转换转换

将数学或统计操作应用到数据集的分组上以产生新的数据集(例如通过分组参数对一张大表进行聚合)建模和计算

将数据接入到统计模型、机器学习算法和其他计算工具上演示

创建动态或静态的图形可视化或文字概述1.6.1 代码示例

本书大部分代码示例会按照IPython或Jupyter notebook中的形式用输入In和输出Out展现:In [5]: CODE EXAMPLEOut[5]: OUTPUT

当你看到这样的代码示例时,其用意就是让你将示例代码输入到In区,然后按下回车键执行代码(Jupyter中按下shift-Enter),然后输出结果展现在Out区。1.6.2 示例数据

每章的示例数据托管在GitHub仓库(http://github.com/wesm/pydata-book)上。你可以在命令行中使用Git版本控制系统下载这些数据,也可以直接从GitHub网站上下载数据的zip打包文件。如果你遇到了问题,请在我个人网站(http://wesmckinney.com)上获取关于如何获得本书资料的最新指引。

我已经尽了最大的努力保障这包含了复现示例所需的所有事项,但可能还有一些错误或遗漏。如果发现了错误或遗漏,请给我发邮件:book@wesmckinney.com。报告本书错误的最佳途径位于O’Reilly网站上的勘误页(http://bit.ly/pyDataAnalysis_errata)。1.6.3 导入约定

Python社区对一些常用模块采用了命名约定:import numpy as npimport matplotlib.pyplot as pltimport pandas as pdimport seaborn as snsimport statsmodels as sm

这意味着,当你看到np.arrange时,它引用的是NumPy中的arrange函数。这是因为一次性从像NumPy这样的大包中引入所有内容(from numpy import*)在Python软件开发中被认为是拙劣实践。1.6.4 术语

我会使用编程和数据科学中的一些术语,这些术语你可能不熟悉,以下是一些简单的定义。处理/处置/规整(munge/munging/wrangling)

描述的是将非结构化或者同时又很凌乱的数据整理成结构化、清晰形式的整个过程。时下,这个词在很多数据骇客中流传。在英文中,“Munge”(处理)和“grunge”(垃圾)谐音。伪代码

用一种类似代码的形式描述算法或者过程,而事实上又不是实际有效的源代码。语法糖

并不增加新特性,但便利于代码编写的编程语法。第2章Python语言基础、IPython及Jupyter notebook

2011年到2012年,我写了本书的第1版,当时并没有多少Python数据分析资源。这是个蛋生鸡、鸡生蛋的问题:很多我们现在觉得理所当然的库,比如pandas、scikit-learn和statsmodels在当时并不成熟。2017年,出现了大量关于数据科学、数据分析以及机器学习的文献,补充了先前仅面向计算机科学家、物理学家和其他研究领域的专业人员的通用科学计算工作。此外,还出现了大量非常优秀的书籍,这些书主要是关于Python编程语言自身以及如何成为高效的Python软件工程师。

本书是介绍如何使用Python处理数据的,我认为独立地概述一下Python内建数据结构的特性以及数据操作方面的库是很有必要的。因此,本章及第3章将介绍一些基本信息和知识,这些信息足以确保你读懂本书的后续章节。

在我看来,在Python中高效地分析数据并不需要完全精通如何利用Python语言开发软件。推荐使用IPython命令行和Jupyter notebook来实验代码示例,以及探索各种类型、函数和方法的文档。尽管我已经尽量按照增量方式来展现书中的内容,但可能还会偶尔遇到一些没有完全介绍的内容。

本书的大部分内容是关于如何基于数据表进行分析以及用于大型数据集的数据准备工具。为了使用这些工具,通常必须先把凌乱数据整理为更好看的(或者说更结构化的)表格形式。幸运的是,Python就是一个将数据快速规整为合理形式的理想语言。使用Python语言的能力越强,准备待分析数据集的工作就越轻松。

本书的一些工具最好是通过IPython或者Jupyter会话来探索。一旦学会了如何使用IPython和Jupyter来探索数据,我推荐你实验本书的示例并且可以再实验尝试一些别的内容。和其他键盘控制的命令行环境一样,练就常用命令的肌肉记忆也是学习曲线的一部分。有一些Python中的概念在本章并未提及,比如类和面向对象编程,你会发现这些概念其实在Python数据分析中也是有用的。

为了加深你的Python知识,建议通过Python官方教程或者一本优秀的通用Python编程书籍来补充本章没有介绍的内容。推荐的入门书籍包括:

·《Python Cookbook》(第3版),作者为David Beazley和Brian K.Jones(O’Reilly)

·《Fluent Python》,作者为Luciano Ramalho(O’Reilly)

·《Effective Python》,作者为Brett Slatkin(Pearson)2.1Python解释器

Python是一种解释型语言。Python解释器通过一次执行一条语句来运行程序。标准的交互式Python解释器可以通过在命令行输入python命令来启动:$ pythonPython 3.6.0 | packaged by conda-forge | (default, Jan 13 2017, 23:17:12)[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linuxType "help", "copyright", "credits" or "license" for more information.>>> a = 5>>> print(a)5

你在命令行中看到的>>>提示符是你键入代码的地方。要退出Python解释器回到命令行提示符,可以输入exit()或者按下Ctrl-D。

通过Python命令,再把.py文件作为第一个参数就可以非常方便地运行Python程序。假设我们已经写好了一个叫作hello_world.py的文件:print('Hello world')

可以执行以下命令去运行程序(hello_world.py必须在命令行的当前路径下):$ python hello_world.pyHello world

虽然一些Python编程者通过这种方式执行他们所有的代码,但是那些做数据分析或科学计算的人士则会使用IPython和Jupyter notebook。IPython是一个加强版的Python解释器,Juypyter notebook是一种基于Web的代码笔记本,最初也是源于IPython项目。我在本章会介绍如何使用IPython和Jupyter,并在附录A中深入介绍IPython的功能。当你使用%run命令时,IPython会在同一个进程内执行指定文件中的代码,确保你在执行完成时可以立即探索结果。$ ipythonPython 3.6.0 | packaged by conda-forge | (default, Jan 13 2017, 23:17:12)Type "copyright", "credits" or "license" for more information.IPython 5.1.0 -- An enhanced Interactive Python.? -> Introduction and overview of IPython's features.%quickref -> Quick reference.help -> Python's own help system.object? -> Details about 'object', use 'object??' for extra details.In [1]: %run hello_world.pyHello worldIn [2]:

默认的IPython提示符采用In[2]:风格的显示,而不是标准的>>>提示符。2.2IPython基础

本节,我们将带你运行IPython命令行和Jupyter notebook,并介绍一些核心概念。2.2.1 运行IPython命令行

你可以像启动标准Python解释器那样,通过ipython命令启动IPython命令行:$ ipythonPython 3.6.0 | packaged by conda-forge | (default, Jan 13 2017, 23:17:12)Type "copyright", "credits" or "license" for more information.IPython 5.1.0 -- An enhanced Interactive Python.? -> Introduction and overview of IPython's features.%quickref -> Quick reference.help -> Python's own help system.object? -> Details about 'object', use 'object??' for extra details.In [1]: a = 5In [2]: aOut[2]: 5

你可以将Python语句输入命令行,然后按下回车键运行。当你在IPython中仅输入一个变量名,它会返回一个表示该对象的字符串:In [5]: import numpy as npIn [6]: data = {i : np.random.randn() for i in range(7)}

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载