基本信息
【插图】

编辑推荐
? 掌握用Scikit-Learn、NumPy等工具高效存储、处理和分析数据
? 大量示例+逐步讲解+举一反三,从计算环境配置到机器学习实战,切实解决工作痛点
Python语言拥有大量可用于存储、操作和洞察数据的程序库,已然成为深受数据科学研究人员推崇的工具。本书以IPython、NumPy、Pandas、Matplotlib和Scikit-Learn这5个能完成数据科学大部分工作的基础工具为主,从实战角度出发,讲授如何清洗和可视化数据、如何用数据建立各种统计学或机器学习模型等常见数据科学任务,旨在让各领域与数据处理相关的工作人员具备发现问题、解决问题的能力。
内容简介
计算机书籍
本书是对以数据深度需求为中心的科学、研究以及针对计算和统计方法的参考书。本书共五章,每章介绍一到两个Python数据科学中的重点工具包。首先从IPython和Jupyter开始,它们提供了数据科学家需要的计算环境;第2章讲解能提供ndarray对象的NumPy,它可以用Python高效地存储和操作大型数组;第3章主要涉及提供DataFrame对象的Pandas,它可以用Python高效地存储和操作带标签的/列式数据;第4章的主角是Matplotlib,它为Python提供了许多数据可视化功能;第5章以Scikit-Learn为主,这个程序库为最重要的机器学习算法提供了高效整洁的Python版实现。
本书适合有编程背景,并打算将开源Python工具用作分析、操作、可视化以及学习数据的数据科学研究人员。
作译者
Python科学栈深度用户和开发者,尤其擅长Python科学计算和数据可视化,是altair等可视化程序库的创建人,并为Scikit-Learn、IPython等Python程序库做了大量贡献。现任美国华盛顿大学eScience学院物理科学研究院院长。
目录
译者序 xiii
前言 xv
第 1章 IPython:超越 Python1
1.1 shell还是 Notebook 1
1.1.1 启动 IPython shell 2
1.1.2 启动 Jupyter Notebook 2
1.2 IPython的帮助和文档 3
1.2.1 用符号 获取文档 3
1.2.2 通过符号 获取源代码4
1.2.3 用 Tab补全的方式探索模块 5
1.3 IPython shell中的快捷键 7
1.3.1 导航快捷键7
1.3.2 文本输入快捷键 7
1.3.3 命令历史快捷键 8
1.3.4 其他快捷键9
1.4 IPython魔法命令 9
1.4.1 粘贴代码块:%paste和 %cpaste 9
1.4.2 执行外部代码:%run 10
1.4.3 计算代码运行时间:%timeit 11
译者序
本书书稿已经在 GitHub 上开源(https://github.com/jakevdp/PythonDataScienceHandbook)。 由于本书的纸质版是黑白印刷的,因此作者在 GitHub 上建立了开源项目,以 Notebook 形 式分享了本书的书稿,让读者可以看到彩色的可视化图。此外,作者也在博客(https:// jakevdp.github.io/PythonDataScienceHandbook/)上发布了 Notebook 的 HTML 页 面。除正 文的部分内容外,Notebook 中的代码、注释与纸质版相同。由于 Notebook 是类 JSON 数 据格式,因此也适合做版本管理,配合 GitHub 修复 bug 比较方便。配合本书同时开源的, 还有作者编写的 Python 入门教程 Whirlwind Tour of Python,同样是使用 Notebook 撰写的。 Notebook 是 IPython 的 Web 版,目前已经合并到 Jupyter(http://jupyter.org)项目中,是一 款适合编程、写作、分享甚至教学(Jupyter/nbgrader)的开源工具,其基本功能将在本书 第 1 章中介绍。Notebook 的操作十分简单,在浏览器上即可运行。它不仅可以在浏览器中 直接编写代码、生成可视化图,还支持 Markdown 文本格式,能够在网页中快速插入常用 的 Web 元素(标题、列表、链接、图像)乃至 Mathjax 数学公式,稍加调整便可以幻灯片 形式播放内容,阅读体验一级棒。
看编程书的第一步是搭建开发环境,但这一步往往会吓退不少对编程感兴趣的读者。本书 对应的开发环境可以通过三种方式实现。第一种方式是在线版 Notebook 编程环境,免安
xiii
装,有浏览器就可以学习编程知识,推荐想快速掌握知识的朋友使用。目前,有许多安装 了 Python 编程环境的 Anaconda 发行版的网络平台(PaaS),支持 Jupyter Notebook 编程 环 境,可以免费使 用,如 JupyterHub(https://tmpnb.org)、SageMathCloud(https://cloud. sagemath.com)、微软 Azure(https://notebooks.azure.com)在线编程环境。它们可以在线运 行 Notebook 文件,编写调试运行代码,也支持文件的上传、下载、新建、删除,还可以 运行 Terminal 工具。另外,基于 GitHub 代码仓库,有 nbviewer(https://nbviewer.jupyter. org)可以查看 GitHub 的 Notebook,还有 binder(http://mybinder.org)支持代码仓库一 键部署,都是非常有趣的组合。类似的在线免费 Notebook 编程环境还有很多,特别推 荐德国 Yves Hilpisch 博士的 The Python Quants Group 公司开发的 Python Quants Platform
(http://tpq.io)。Yves 博士的三本 Python 金融学图书均使用该编程环境,读者可以免费注册 使用,其硬件为 CPU Xeon 1231、16GB 内存,能够满足一般的学习与分析需要。Jupyter Notebook 支持许多编程语言(Python、R、Scala、Julia、Haskell、Ruby……),甚至支持 Kotlin(https://github.com/ligee/kotlin-jupyter)、Java 9 的 REPL 新功能 JShell(https://github. com/Bachmann1234/java9_kernel)。第二种方式是在电脑上安装 Anaconda 发行版。作者在 本书前言中介绍了具体的安装方法,安装成功后即可创建 Notebook 编写代码。由于网络 问题,建议国内的朋友使用清华大学 TUNA 镜像(https://mirror.tuna.tsinghua.edu.cn/help/ anaconda/)下载和更新 Anaconda 集成开发环境。第三种方式适合了解 Docker(https:// www.docker.com/)的朋友——可以直接使用 Jupyter 在 GitHub 上的 Docker 镜像(https:// github.com/jupyter/docker-stacks),一键安装,省时省力。里面除了标准 Anaconda 开发环 境,还支持 Spark、TensorFlow 的 Notebook 开发环境。
本书作者 Jake VanderPlus(GitHub 账号为 @jakevdp)目前是华盛顿大学 eScience 学院物 理科学研究院院长。他既是一位天文学家,也是一位会议演讲达人,活跃于历年的 PyData 会议,尤其擅长 Python 科学计算与数据可视化。Jake 在数据可视化方面颇有建树,创 建了 altair、mpld3、JSAnimation 可视化程序 库,同时为 NumPy、Scikit-Learn、Scipy、 Matplotlib、IPython 等著名 Python 程序库做了大量贡献。我在学习贝叶斯估计时,从他 2014 年的系列博文“Frequentism vs Bayesianism”(频率主义与贝叶斯主义)中获益颇 多。2015 年,听说他要在 O’Reilly 出版《Python 数据科学手册》一书,一直持续关注,正 式版终于在 2016 年年底发布。期间,他在 O’Reilly 做了一些 Python 数据科学教程(基 于 O’Reilly 的 Atlas 平台创建 Notebook,代码可在线运行 ),介绍了 Pandas、Seaborn、 Matplotlib 等工具。2017 年 2 月,他在 YouTube 发布了一组视频,通过美国西雅图市弗 雷蒙特桥上穿行的自行车统计数据,演示了 Python 数据科学编程的最佳实践,包括在 Notebook 中编码、重构、测试、发布程序的技巧,可谓短小精悍。此次有幸能翻译大神的 作品,与有荣焉。首先感谢图灵社区,尤其感谢朱巍老师的再次大力支持,夏静文老师、 刘美英老师和岳新欣老师的细致审校。也要感谢一起合作过的小伙伴们,促使我们再次翻 译数据科学的基础教程,让更多用 SQL、Excel、Matlab、SPSS 的分析师了解 Python 数据 科学的工具,用数据更自由地表达,讲出更精彩的故事。
前言
这是一本介绍 Python 数据科学的书。可能话音未落,你脑海中便会浮现一个问题:什么 是数据科学(data science)?要给这个术语下个定义其实很困难,尤其它现在还那么流行
(自然也众口难调)。批评者们要么认为它是一个多余的标签(毕竟哪一门科学不需要数据 呢),要么认为它是一个粉饰简历、吸引技术招聘者眼球的噱头。
我认为这些批评都没抓住重点。如果去掉浮华累赘的装饰,数据科学可能算是目前为止对 跨学科技能的最佳称呼,在工业界和学术界的诸多应用中扮演着越来越重要的角色。跨 学科是数据科学的关键;我认为,如今对数据科学最合理的定义,就是 Drew Conway 于 2010 年 9 月在自己的博客上首次发表的数据科学维恩图(如图 0-1 所示)。
虽然图中交错的标签看着跟开玩笑似的,但我还是认为这幅图道出了“数据科学”的真谛:它是一个跨学科的课题。数据科学综合了三个领域的能力:统计学家的能力——能够 建立模型和聚合(数据量正在不断增大的)数据;计算机科学家的能力——能够设计并使
用算法对数据进行高效存储、分析和可视化;领域专家的能力——在细分领域中经过专业 训练,既可以提出正确的问题,又可以作出专业的解答。
我希望你不要把数据科学看作一个新的知识领域,而要把它看成可以在自己熟悉的领域中 运用的新能力。无论你是汇报竞选结果、预测股票收益、优化网络广告点击率、在显微镜 下识别微生物、在太空中寻找新天体,还是在其他与数据相关的领域中工作,本书都会让 你具备发现问题、解决问题的能力。
目标读者
无论是在华盛顿大学教书时,还是在各种科技会议上演讲时,经常有人问我这样一个问 题:“我应该怎样学习 Python 呢?”问这个问题的都是有技术能力的学生、程序员或科研 人员,他们通常都具备很强的编程能力,善于使用计算机和数学工具。他们中的大多数人 其实并不想学习 Python 本身,而是想把它作为数据密集型任务处理和计算机科学的工具来 使用。虽然网上已经有很多教学视频、博客和教程,但是我一直觉得这个问题还缺少一个 令我满意的答案——这就是创作本书的缘由。
这并不是一本介绍 Python 和编程基础知识的书。它假设读者已经熟悉 Python 的基本语 法,包括定义函数、分配变量、调用对象方法、实现程序控制流等基本能力。这本书将 帮助 Python 用户学习如何通过 Python 的数据科学栈——包括 IPython、NumPy、Pandas、 Matplotlib、Scikit-Learn,以及其他相关的程序库——高效地存储、处理和分析数据。
为什么用Python
Python 作为科学计算的一流工具已经有几十年的历史了,它还被应用于大型数据集的分 析和可视化。这可能会让 Python 早期的创导者感到惊奇,因为这门语言一开始并不是为 数据分析和科学计算设计的。Python 之所以能在数据科学领域广泛应用,主要是因为它 的第三方程序包拥有庞大而活跃的生态系统:NumPy 可以处理同类型(homogeneous) 数组型数据、Pandas 可以处理多种类型(heterogeneous)带标签的数据、SciPy 可以解 决常见的科学计算问题、Matplotlib 可以绘制可用于印刷的可视化图形、IPython 可以实 现交互式编程和快速分享代码、Scikit-Learn 可以进行机器学习,还有其他很多工具将在 后面的章节中介绍。
如果你需要一个 Python 入门教程,那么我推荐你阅读本书的姊妹篇 A Whirlwind Tour of the Python Language。这个简短的教程介绍了 Python 的基本特性,目的是让熟悉其他编程语 言的数据科学家快速学习 Python。
Python 2与Python 3
本书使用 Python 3 的语法,其中包括了 Python 2.x 版本不兼容的语法技巧。虽然 Python 3.0 在 2008 年就发布了,但并没有被快速采用,尤其是在科学和 Web 开发领域。这主要是
因为许多第三方程序库和工具包需要时间来兼容 Python 的新版本。然而,从 2014 年初开 始,数据科学领域最重要的工具的稳定版本都已经同时兼容 Python 2 和 Python 3,因此本 书将使用新版本的 Python 3 语法,不过其中的大部分代码示例无须调整也可以在 Python 2 中运行。如果遇到了 Python 2 不兼容的地方,我会尽量详细说明。
内容概览
本书每一章都重点介绍一到两个程序包或工具,它们是 Python 数据科学的基础。
IPython 和 Jupyter(第 1 章)
这两个程序包为许多使用 Python 的数据科学家提供了计算环境。