描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111603702
阅读本书可以获得一份关于在Python下操作、处理、清洗、规整数据集的完整说明。本书第二版针对Python 3.6进行了更新,并增加实际案例向你展示如何高效地解决一系列数据分析问题。你将在阅读过程中学习到*版本的pandas、NumPy、IPython和Jupyter。
本书由Wes McKinney创作,他是Python pandas项目的创始人。本书是对Python数据科学工具的实操化、现代化的介绍,非常适合刚学Python的数据分析师或刚学数据科学以及科学计算的Python编程者。数据文件和相关的材料可以在GitHub上找到:
l 使用IPython shell和Jupyter notebook进行探索性计算
l 学习NumPy(Numerical Python)的基础和高级特性
l 入门pandas库中的数据分析工具
l 使用灵活工具对数据进行载入、清洗、变换、合并和重塑
l 使用matplotlib创建富含信息的可视化
l 将pandas的groupby功能应用于对数据集的切片、分块和汇总
l 分析并操作规则和不规则的时间序列数据
利用完整的、详细的示例学习如何解决现实中数据分析问题
本书由Python pandas项目创始人Wes McKinney亲笔撰写,详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas、NumPy、IPython和Jupyter,并增加大量实际案例,可以帮助你高效解决一系列数据分析问题。
第2版中的主要更新包括:
•所有的代码,包括把Python的教程更新到了Python
3.6版本(第1版中使用的是Python
2.7)
•更新了Python第三方发布版Anaconda和其他所需Python包的安装指引
•更新pandas库到2017年的新版
•新增一章,关于更多高级pandas工具和一些使用提示
•新增statsmodels和scikit-learn的简明使用介绍
前言1
第1章 准备工作7
1.1 本书内容7
1.1.1 什么类型的数据7
1.2 为何利用Python进行数据分析8
1.2.1 Python作为胶水8
1.2.2 解决“双语言”难题8
1.2.3 为何不使用Python9
1.3 重要的Python库9
1.3.1 NumPy9
1.3.2 pandas10
1.3.3
matplotlib11
1.3.4 IPython与Jupyter11
1.3.5 SciPy12
1.3.6
scikit-learn12
1.3.7
statsmodels13
1.4 安装与设置13
1.4.1 Windows14
1.4.2 Apple(OS X和macOS)14
1.4.3 GNU/Linux14
1.4.4 安装及更新Python包15
1.4.5 Python 2和Python 316
1.4.6 集成开发环境和文本编辑器16
1.5 社区和会议17
1.6 快速浏览本书17
1.6.1 代码示例18
1.6.2 示例数据18
1.6.3导入约定18
1.6.4术语19
第2章 Python语言基础、IPython及Jupyter notebook20
2.1 Python解释器21
2.2 IPython基础22
2.2.1 运行IPython命令行22
2.2.2 运行 Jupyter notebook23
2.2.3 Tab补全25
2.2.4 内省27
2.2.5 %run命令28
2.2.6 执行剪贴板中的程序30
2.2.7 终端快捷键30
2.2.8 关于魔术命令31
2.2.9 matplotlib集成33
2.3 Python语言基础34
2.3.1 语言语义34
2.3.2 标量类型42
2.3.3 控制流49
第3章 内建数据结构、函数及文件54
3.1 数据结构和序列54
3.1.1 元组54
3.1.2 列表57
3.1.3 内建序列函数61
3.1.4 字典64
3.1.5集合67
3.1.6 列表、集合和字典的推导式69
3.2 函数72
3.2.1 命名空间、作用域和本地函数72
3.2.2 返回多个值73
3.2.3 函数是对象74
3.2.4 匿名(Lambda)函数75
3.2.5 柯里化:部分参数应用76
3.2.6 生成器77
3.2.7 错误和异常处理79
3.3 文件与操作系统82
3.3.1 字节与Unicode文件85
3.4 本章小结86
第4章 NumPy基础:数组与向量化计算87
4.1 NumPy ndarray:多维数组对象89
4.1.1 生成ndarray90
4.1.2 ndarray的数据类型92
4.1.3 NumPy数组算术94
4.1.4 基础索引与切片95
4.1.5 布尔索引100
4.1.6 神奇索引103
4.1.7 数组转置和换轴104
4.2 通用函数:快速的逐元素数组函数106
4.3 使用数组进行面向数组编程109
4.3.1 将条件逻辑作为数组操作110
4.3.2 数学和统计方法111
4.3.3 布尔值数组的方法113
4.3.4 排序114
4.3.5 唯一值与其他集合逻辑115
4.4 使用数组进行文件输入和输出115
4.5 线性代数116
4.6 伪随机数生成118
4.7 示例:随机漫步120
4.7.1 一次性模拟多次随机漫步121
4.8 本章小结122
第5章 pandas入门123
5.1 pandas数据结构介绍123
5.1.1 Series123
5.1.2
DataFrame128
5.1.3 索引对象134
5.2 基本功能135
5.2.1 重建索引136
5.2.2 轴向上删除条目138
5.2.3 索引、选择与过滤140
5.2.4 整数索引144
5.2.5 算术和数据对齐145
5.2.6 函数应用和映射150
5.2.7 排序和排名152
5.2.8 含有重复标签的轴索引155
5.3 描述性统计的概述与计算157
5.3.1 相关性和协方差159
5.3.2 唯一值、计数和成员属性161
5.4 本章小结164
第6章 数据载入、存储及文件格式165
6.1 文本格式数据的读写165
6.1.1 分块读入文本文件171
6.1.2 将数据写入文本格式172
6.1.3 使用分隔格式174
6.1.4 JSON数据176
6.1.5 XML和HTML:网络抓取177
6.2 二进制格式180
6.2.1 使用HDF5格式181
6.2.2 读取Microsoft Excel文件183
6.3 与Web API交互184
6.4 与数据库交互186
6.5 本章小结187
第7章 数据清洗与准备188
7.1 处理缺失值188
7.1.1 过滤缺失值189
7.1.2 补全缺失值191
7.2 数据转换194
7.2.1 删除重复值194
7.2.2 使用函数或映射进行数据转换195
7.2.3 替代值197
7.2.4 重命名轴索引198
7.2.5 离散化和分箱199
7.2.6 检测和过滤异常值202
7.2.7 置换和随机抽样203
7.2.8 计算指标/虚拟变量204
7.3 字符串操作207
7.3.1 字符串对象方法208
7.3.2 正则表达式210
7.3.3 pandas中的向量化字符串函数213
7.4 本章小结215
第8章 数据规整:连接、联合与重塑216
8.1 分层索引216
8.1.1重排序和层级排序219
8.1.2 按层级进行汇总统计220
8.1.3 使用DataFrame的列进行索引220
8.2 联合与合并数据集221
8.2.1 数据库风格的DataFrame连接222
8.2.2 根据索引合并226
8.2.3 沿轴向连接230
8.2.4 联合重叠数据235
8.3 重塑和透视236
8.3.1 使用多层索引进行重塑236
8.3.2 将“长”透视为“宽”240
8.3.3 将“宽”透视为“长”242
8.4 本章小结244
第9章 绘图与可视化245
9.1 简明matplotlib API入门245
9.1.1 图片与子图246
9.1.2 颜色、标记和线类型250
9.1.3 刻度、标签和图例252
9.1.4 注释与子图加工255
9.1.5 将图片保存到文件258
9.1.6 matplotlib设置258
9.2 使用pandas和seaborn绘图259
9.2.1 折线图259
9.2.2 柱状图262
9.2.3 直方图和密度图266
9.2.4 散点图或点图269
9.2.5 分面网格和分类数据270
9.3 其他Python可视化工具271
9.4 本章小结272
第10章 数据聚合与分组操作274
10.1 GroupBy机制274
10.1.1 遍历各分组278
10.1.2 选择一列或所有列的子集279
10.1.3 使用字典和Series分组280
10.1.4 使用函数分组281
10.1.5 根据索引层级分组282
10.2 数据聚合282
10.2.1 逐列及多函数应用284
10.2.2 返回不含行索引的聚合数据287
10.3 应用:通用拆分-应用-联合288
10.3.1 压缩分组键290
10.3.2 分位数与桶分析291
10.3.3 示例:使用指定分组值填充缺失值292
10.3.4 示例:随机采样与排列294
10.3.5 示例:分组加权平均和相关性296
10.3.6 示例:逐组线性回归298
10.4 数据透视表与交叉表298
10.4.1 交叉表:crosstab301
10.5 本章小结302
第11章 时间序列303
11.1 日期和时间数据的类型及工具303
11.1.1 字符串与datetime互相转换305
11.2 时间序列基础307
11.2.1 索引、选择、子集308
11.2.2 含有重复索引的时间序列311
11.3 日期范围、频率和移位312
11.3.1 生成日期范围313
11.3.2 频率和日期偏置316
11.3.3 移位(前向和后向)日期317
11.4 时区处理320
11.4.1 时区的本地化和转换320
11.4.2 时区感知时间戳对象的操作323
11.4.3 不同时区间的操作324
11.5 时间区间和区间算术324
11.5.1 区间频率转换326
11.5.2 季度区间频率327
11.5.3 将时间戳转换为区间(以及逆转换)329
11.5.4 从数组生成PeriodIndex330
11.6 重新采样与频率转换332
11.6.1 向下采样334
11.6.2 向上采样与插值336
11.6.3 使用区间进行重新采样337
11.7 移动窗口函数339
11.7.1 指数加权函数342
11.7.2 二元移动窗口函数343
11.7.3 用户自定义的移动窗口函数344
11.8 本章小结344
第12章 高阶pandas346
12.1 分类数据346
12.1.1 背景和目标346
12.1.2 pandas中的Categorical类型348
12.1.3 使用Categorical对象进行计算350
12.1.4 分类方法352
12.2 高阶GroupBy应用355
12.2.1 分组转换和“展开”GroupBy355
12.2.2 分组的时间重新采样359
12.3 方法链技术361
12.3.1 pipe方法362
12.4 本章小结363
第13章 Python建模库介绍364
13.1 pandas与建模代码的结合364
13.2 使用Patsy创建模型描述367
13.2.1 Patsy公式中的数据转换369
13.2.2 分类数据与Patsy371
13.3 statsmodels介绍373
13.3.1 评估线性模型374
13.3.2 评估时间序列处理377
13.4 scikit-learn介绍377
13.5 继续你的教育381
第14章 数据分析示例382
14.1 从Bitly获取1.USA.gov数据382
14.1.1 纯Python时区计数383
14.1.2 使用pandas进行时区计数385
14.2 MovieLens 1M数据集392
14.2.1 测量评价分歧396
14.3 美国1880~2010年的婴儿名字397
14.3.1分析名字趋势402
14.4 美国农业部食品数据库410
14.5 2012年联邦选举委员会数据库416
14.5.1 按职业和雇主的捐献统计419
14.5.2 捐赠金额分桶421
14.5.3 按州进行捐赠统计423
14.6 本章小结424
附录A 高阶NumPy425
附录B 更多IPython系统相关内容457
第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扲eilly图书的CD-ROM代码示例则需要许可。引用本书代码回答问题不需要许可,但在你的产品文档中大量使用本书示例代码则需要许可。
我们鼓励注明资料来源的行为,但这并不是必需的。来源注明通常包括书名、作者、出版社及ISBN,例如:“Python for Data Analysis by Wes
McKinney(O扲eilly). Copyright 2017 Wes McKinney,
978-1-491-95766-0”。
如果你认为你对本书示例代码的使用超过了正常使用范围或者需要以上介绍的授权许可,请联系[email protected]。
O’Reilly Safari
Safari(前身为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.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
我们为本书准备了一个网页,用于陈列勘误、示例和其他附加信息。访问地址是:http://bit.ly/python_data_analysis_2e。
针对本书评论或提出技术问题,请发送邮件至:[email protected]。
关于本书的更多信息、课程、会议及新闻,请访问我们的网站: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扲eilly的工作人员在写作进程中给予的耐心帮助。他们是Marie Beaugureau、Ben Lorica和Colleen Toporek。我再次得到了优秀技术审阅人的支持,他们是Tom
Augpurger、Paul Barry、Hugh Brown、Jonathan Coe和 Andreas Müller。感谢你们。
本书的第1版已经被翻译成多种语言,包括汉语、法语、德语、日语、韩语和俄语。将本书翻译给外国读者,是一份工作量大且缺少关注的付出。感谢你们帮助全世界更多人士学会如何编程及使用数据分析工具。
在过去几年中,Cloudera 和Two Sigma投资公司对我的持续开源开发工作的支持使我感到十分幸运。由于开源项目相对于用户基数的比例越来越小,向重要开源项目提供开发支持变得越来越重要。这是一件值得去做的正确工作。
第1版致谢(2012)
如果没有众多相关人士的支持,写作本书对我来说将会十分困难。
对于O扲eilly的工作人员,我非常感谢我的编辑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 ,他们教会我如何去追寻梦想、永不止步。
“本书已经是Python数据生态中的一本经典书籍,本次的新版本对Python 3.6到pandas*特性等关键领域都进行了更新,增强了其独特价值。通过解释为什么以及如何使用Python数据工具,本书以新颖、创造性的方式帮助读者高效地学习了这些工具。它是所有现代化数据密集型计算库的重要组成部分“
——Fernando Perez,加州大学伯克利分校助理教授、IPython创始人、Jupyter项目联合创始
雪候鸟nn –
这样的书籍对我的工作帮助很大,先学习了。
瞬间坠落 –
刚拆的书,表面有非常大的折痕,好气啊,不想退了