关于开放版本
第 3 版的《Python 数据分析》现在作为“开放获取”HTML 版本在此网站wesmckinney.com/book
上提供,除了通常的印刷和电子书格式。该版本最初于 2022 年 8 月出版,将在未来几个月和年份内定期修正勘误。如果您发现任何勘误,请在此处报告。
一般来说,本网站的内容不得复制或复制。代码示例采用 MIT 许可证,可在GitHub或Gitee上找到,以及支持数据集。
如果您发现本书的在线版本有用,请考虑订购纸质版本或无 DRM 的电子书(PDF 和 EPUB 格式)以支持作者。
本书的网络版本是使用Quarto 出版系统创建的。
第 3 版的新内容是什么?
本书已更新到 pandas 2.0.0 和 Python 3.10。第 2 版和第 3 版之间的变化主要集中在将内容与自 2017 年以来 pandas 的变化保持最新。
更新历史
本网站将定期更新,以提供新的早期发布内容,并在出版后修复勘误。
- 2023 年 4 月 12 日:更新到 pandas 2.0.0 并修复一些代码示例。
- 2022 年 10 月 19 日:修复表格链接并添加eBooks.com 链接。
- 2022 年 9 月 20 日:最终出版后的网站更新,包括修复了一些小错误。
- 2022 年 7 月 22 日:在今年夏天后期出版之前,将副本编辑和其他改进纳入“QC1”生产阶段。
- 2022 年 5 月 18 日:更新开放获取版本的所有章节。包括来自技术审查反馈(谢谢!)的编辑,第三版的致谢以及其他准备工作,使本书准备好在 2022 年晚些时候印刷。
- 2022 年 2 月 13 日:更新开放获取版本,包括第 7 至第十章。
- 2022 年 1 月 23 日:首次开放获取版本,包括第 1 至第六章。
正文
前言
原文:
wesmckinney.com/book/preface
译者:飞龙
此开放访问网络版本的《Python 数据分析第三版》现已作为印刷版和数字版的伴侣提供。如果您发现任何勘误,请在此处报告。请注意,由 Quarto 生成的本站点的某些方面与 O’Reilly 的印刷版和电子书版本的格式不同。
如果您发现本书的在线版本有用,请考虑订购纸质版或无 DRM 的电子书以支持作者。本网站的内容不得复制或再生产。代码示例采用 MIT 许可,可在 GitHub 或 Gitee 上找到。
本书的第一版于 2012 年出版,当时 Python 的开源数据分析库,尤其是 pandas,非常新且快速发展。到了 2016 年和 2017 年写第二版时,我不仅需要将书更新为 Python 3.6(第一版使用 Python 2.7),还需要更新 pandas 在过去五年中发生的许多变化。现在是 2022 年,Python 语言的变化较少(我们现在使用 Python 3.10,3.11 将于 2022 年底发布),但 pandas 仍在不断发展。
在这第三版中,我的目标是将内容与当前版本的 Python、NumPy、pandas 和其他项目保持同步,同时对于讨论近几年出现的较新的 Python 项目保持相对保守。由于这本书已成为许多大学课程和职业人士的重要资源,我将尽量避免讨论可能在一两年内过时的主题。这样,纸质副本在 2023 年、2024 年甚至更久以后也不会太难理解。
第三版的一个新特性是托管在我的网站上的开放访问在线版本,网址为wesmckinney.com/book
,可作为印刷版和数字版的所有者的资源和便利。我打算保持那里的内容相对及时更新,因此如果您拥有纸质书并遇到某些问题,请在那里查看最新的内容更改。
本书中使用的约定
本书中使用以下排版约定:
斜体
指示新术语、URL、电子邮件地址、文件名和文件扩展名。
等宽
用于程序清单,以及段落内引用程序元素,如变量或函数名、数据库、数据类型、环境变量、语句和关键字。
等宽粗体
显示用户应按照字面意思键入的命令或其他文本。
<等宽斜体>
显示应替换为用户提供的值或由上下文确定的值的文本。
提示:
此元素表示提示或建议。
注意:
此元素表示一般说明。
警告:
此元素表示警告或注意事项。
使用代码示例
您可以在本书的 GitHub 存储库中找到每章的数据文件和相关材料,网址为github.com/wesm/pydata-book
,该存储库在 Gitee 上有镜像(供无法访问 GitHub 的用户使用),网址为gitee.com/wesmckinn/pydata-book
。
这本书旨在帮助您完成工作。一般来说,如果本书提供示例代码,您可以在程序和文档中使用它。除非您复制了代码的大部分内容,否则无需征得我们的许可。例如,编写一个使用本书中几个代码块的程序不需要许可。销售或分发 O’Reilly 图书中的示例需要许可。通过引用本书回答问题并引用示例代码不需要许可。将本书中大量示例代码合并到产品文档中需要许可。
我们感谢,但不要求署名。署名通常包括标题、作者、出版商和 ISBN。例如:“Python for Data Analysis by Wes McKinney(O’Reilly)。版权所有 2022 年 Wes McKinney,978-1-098-10403-0。”
如果您觉得您对代码示例的使用超出了合理使用范围或上述许可,请随时通过 permissions@oreilly.com 与我们联系。
致谢
这项工作是多年来与世界各地许多人进行富有成果的讨论和合作的成果。我想感谢其中的一些人。
追悼:约翰·D·亨特(1968-2012)
我们亲爱的朋友和同事约翰·D·亨特在 2012 年 8 月 28 日与结肠癌搏斗后去世。这发生在我完成本书第一版最终手稿后不久。
约翰在 Python 科学和数据社区的影响和遗产难以估量。除了在 21 世纪初开发 matplotlib(当时 Python 并不那么流行)之外,他还帮助塑造了一代关键的开源开发者文化,这些开发者已经成为我们现在经常视为理所当然的 Python 生态系统的支柱。
我很幸运在 2010 年 1 月早期与约翰建立了联系,就在发布 pandas 0.1 后不久。他的启发和指导帮助我在最黑暗的时刻推动前进,实现了我对 pandas 和 Python 作为一流数据分析语言的愿景。
John 与 Fernando Pérez 和 Brian Granger 非常亲近,他们是 IPython、Jupyter 和 Python 社区中许多其他倡议的先驱。我们曾希望一起合作写一本书,但最终我成为了拥有最多空闲时间的人。我相信他会为我们在过去九年中所取得的成就感到自豪,无论是作为个人还是作为一个社区。
致谢第三版(2022 年)
自从我开始写这本书的第一版以来已经有十多年了,自从我最初作为 Python 程序员开始我的旅程以来已经有 15 年了。那时发生了很多变化!Python 已经从一个相对小众的数据分析语言发展成为最受欢迎、最广泛使用的语言,支持着数据科学、机器学习和人工智能工作的多数(如果不是大多数!)。
自 2013 年以来,我并没有积极参与 pandas 开源项目,但其全球开发者社区仍在蓬勃发展,成为以社区为中心的开源软件开发模式的典范。许多处理表格数据的“下一代”Python 项目直接模仿 pandas 的用户界面,因此该项目已经对 Python 数据科学生态系统未来的发展轨迹产生了持久的影响。
希望这本书能继续为想要学习如何在 Python 中处理数据的学生和个人提供宝贵的资源。
我特别感谢 O’Reilly 允许我在我的网站wesmckinney.com/book
上发布这本书的“开放获取”版本,希望它能触达更多人,并帮助扩大数据分析领域的机会。J.J. Allaire 在帮助我将这本书从 Docbook XML“移植”到Quarto时是一个救星,Quarto 是一个出色的新科学技术出版系统,适用于印刷和网络。
特别感谢我的技术审阅者 Paul Barry、Jean-Christophe Leyder、Abdullah Karasan 和 William Jamir,他们的详细反馈极大地提高了内容的可读性、清晰度和可理解性。
致谢第二版(2017 年)
距离我在 2012 年 7 月完成这本书第一版手稿已经快五年了。很多事情发生了变化。Python 社区已经大幅增长,围绕它的开源软件生态系统也蓬勃发展。
如果不是 pandas 核心开发者们不懈的努力,这本书的新版将不会存在,他们已经将这个项目及其用户社区发展成为 Python 数据科学生态系统的支柱之一。这些人包括但不限于 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。
在撰写这本第二版时,我要感谢 O’Reilly 的工作人员在写作过程中耐心地帮助我。其中包括 Marie Beaugureau、Ben Lorica 和 Colleen Toporek。我再次有幸得到 Tom Augspurger、Paul Barry、Hugh Brown、Jonathan Coe 和 Andreas Müller 等杰出的技术审阅者的帮助。谢谢。
这本书的第一版已经被翻译成许多外语,包括中文、法语、德语、日语、韩语和俄语。翻译所有这些内容并让更广泛的受众获得是一项巨大且常常被忽视的工作。感谢您帮助更多世界上的人学习如何编程和使用数据分析工具。
在过去几年里,我很幸运地得到了 Cloudera 和 Two Sigma Investments 对我持续的开源开发工作的支持。随着开源软件项目相对于用户群体规模而言资源更加稀缺,企业为关键开源项目的开发提供支持变得越来越重要。这是正确的做法。
致谢第一版(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,Ari Levine,Chris Uga,Prasad Ramanan,Ted Square 和 Hoon Kim。最后,我的学术导师 Haynes Miller(MIT)和 Mike West(Duke)。
2014 年,我得到了 Phillip Cloud 和 Joris van den Bossche 的重要帮助,更新了书中的代码示例,并修复了由于 pandas 变化而导致的一些不准确之处。
在个人方面,Casey 在写作过程中提供了宝贵的日常支持,容忍我在本已过度忙碌的日程表上拼凑出最终草稿时的起起伏伏。最后,我的父母 Bill 和 Kim 教导我始终追随梦想,永不妥协。
一、初步
原文:
wesmckinney.com/book/preliminaries
译者:飞龙
此开放访问网络版本的《Python 数据分析第三版》现已作为印刷版和数字版的伴侣提供。如果您发现任何勘误,请在此处报告。请注意,由 Quarto 生成的本站点的某些方面与 O’Reilly 的印刷版和电子书版本的格式不同。
如果您发现本书的在线版本有用,请考虑订购纸质版或无 DRM 的电子书以支持作者。本网站的内容不得复制或再生产。代码示例采用 MIT 许可,可在 GitHub 或 Gitee 上找到。
这本书关注的是在 Python 中操纵、处理、清理和处理数据的基本原理。我的目标是为 Python 编程语言及其面向数据的库生态系统和工具提供指南,使您能够成为一名有效的数据分析师。虽然书名中有“数据分析”一词,但重点特别放在 Python 编程、库和工具上,而不是数据分析方法论。这是您进行数据分析所需的 Python 编程。
在我 2012 年首次出版这本书之后不久,人们开始使用“数据科学”这个术语作为从简单的描述性统计到更高级的统计分析和机器学习等各种内容的总称。自那时以来,用于进行数据分析(或数据科学)的 Python 开源生态系统也显著扩展。现在有许多其他专门关注这些更高级方法的书籍。我希望这本书能够作为足够的准备,使您能够转向更具领域特定性的资源。
注意:
有些人可能将本书的大部分内容描述为“数据操纵”,而不是“数据分析”。我们还使用整理或整理这些术语来指代数据操纵。*### 什么样的数据?
当我说“数据”时,我确切指的是什么?主要关注的是结构化数据,这是一个故意模糊的术语,包括许多不同形式的常见数据,例如:
- 表格或类似电子表格的数据,其中每列可能是不同类型(字符串、数字、日期或其他)。这包括通常存储在关系数据库或制表符或逗号分隔文本文件中的各种数据。
- 多维数组(矩阵)。
- 由关键列相互关联的多个数据表(对 SQL 用户来说可能是主键或外键)。
- 均匀或不均匀间隔的时间序列。
这绝不是一个完整的列表。即使可能并不总是明显,大部分数据集都可以转换为更适合分析和建模的结构化形式。如果不行,可能可以从数据集中提取特征到结构化形式。例如,一组新闻文章可以处理成一个词频表,然后用于执行情感分析。
像 Microsoft Excel 这样的电子表格程序的大多数用户,可能是世界上最广泛使用的数据分析工具,对这些数据类型并不陌生。*## 1.2 为什么选择 Python 进行数据分析?
对许多人来说,Python 编程语言具有很强的吸引力。自 1991 年首次亮相以来,Python 已成为最受欢迎的解释性编程语言之一,与 Perl、Ruby 等一起。自 2005 年左右以来,Python 和 Ruby 特别受欢迎,用于构建网站,使用它们众多的 Web 框架,如 Rails(Ruby)和 Django(Python)。这些语言通常被称为“脚本”语言,因为它们可以用于快速编写小程序或脚本来自动化其他任务。我不喜欢“脚本语言”这个术语,因为它带有一种暗示,即它们不能用于构建严肃的软件。出于各种历史和文化原因,在解释性语言中,Python 已经发展成一个庞大而活跃的科学计算和数据分析社区。在过去的 20 年里,Python 已经从一个前沿或“自担风险”的科学计算语言发展成为学术界和工业界数据科学、机器学习和通用软件开发中最重要的语言之一。
对于数据分析、交互式计算和数据可视化,Python 不可避免地会与其他广泛使用的开源和商业编程语言和工具进行比较,如 R、MATLAB、SAS、Stata 等。近年来,Python 改进的开源库(如 pandas 和 scikit-learn)使其成为数据分析任务的热门选择。结合 Python 在通用软件工程方面的整体实力,它是构建数据应用程序的主要语言的绝佳选择。
Python 作为胶水
Python 在科学计算中的成功部分在于轻松集成 C、C++和 FORTRAN 代码。大多数现代计算环境共享一组类似的传统 FORTRAN 和 C 库,用于进行线性代数、优化、积分、快速傅里叶变换等算法。许多公司和国家实验室使用 Python 将几十年的传统软件粘合在一起的故事也是如此。
许多程序由小部分代码组成,其中大部分时间都花在其中,大量“胶水代码”很少运行。在许多情况下,胶水代码的执行时间微不足道;最有价值的努力是在优化计算瓶颈上,有时通过将代码移动到像 C 这样的低级语言来实现。
解决“双语言”问题
在许多组织中,通常使用更专门的计算语言如 SAS 或 R 进行研究、原型设计和测试新想法,然后将这些想法移植为更大的生产系统的一部分,比如 Java、C#或 C++。人们越来越发现 Python 不仅适合用于研究和原型设计,也适合用于构建生产系统。当一个开发环境足够时,为什么要维护两个呢?我相信越来越多的公司会选择这条道路,因为让研究人员和软件工程师使用相同的编程工具集通常会带来重大的组织效益。
在过去的十年里,一些解决“双语言”问题的新方法出现了,比如 Julia 编程语言。在许多情况下,充分利用 Python 将需要使用低级语言如 C 或 C++编程,并创建 Python 绑定到该代码。也就是说,像 Numba 这样的“即时”(JIT)编译器技术提供了一种在 Python 编程环境中实现出色性能的方法,而无需离开 Python 编程环境。
为什么不用 Python?
虽然 Python 是构建许多种分析应用程序和通用系统的优秀环境,但也有一些用途不太适合 Python。
由于 Python 是一种解释性编程语言,通常大多数 Python 代码运行速度会比像 Java 或 C++这样的编译语言编写的代码慢得多。由于程序员时间通常比CPU 时间更有价值,许多人愿意做出这种权衡。然而,在具有非常低延迟或对资源利用要求苛刻的应用程序中(例如高频交易系统),花费时间以低级语言(但也低生产力)如 C++编程,以实现可能的最大性能,可能是值得的。
Python 可能是一个具有挑战性的语言,用于构建高度并发、多线程的应用程序,特别是具有许多 CPU 绑定线程的应用程序。造成这种情况的原因是它具有所谓的全局解释器锁(GIL),这是一种机制,防止解释器一次执行多个 Python 指令。GIL 存在的技术原因超出了本书的范围。虽然在许多大数据处理应用中,可能需要一组计算机集群来在合理的时间内处理数据集,但仍然存在一些情况,其中单进程、多线程系统是可取的。
这并不是说 Python 不能执行真正的多线程、并行代码。使用本地多线程(在 C 或 C++中)的 Python C 扩展可以在不受 GIL 影响的情况下并行运行代码,只要它们不需要经常与 Python 对象交互。
1.3 必要的 Python 库
对于那些对 Python 数据生态系统和本书中使用的库不太熟悉的人,我将简要介绍其中一些。
NumPy
NumPy,简称 Numerical Python,长期以来一直是 Python 中数值计算的基石。它提供了大多数涉及 Python 中数值数据的科学应用所需的数据结构、算法和库粘合剂。NumPy 包含,除其他内容外:
- 快速高效的多维数组对象ndarray
- 执行数组元素计算或数组之间的数学运算的函数
- 用于读取和写入基于数组的数据集到磁盘的工具
- 线性代数运算、傅里叶变换和随机数生成
- 成熟的 C API,用于使 Python 扩展和本地 C 或 C++代码能够访问 NumPy 的数据结构和计算功能
除了 NumPy 为 Python 增加的快速数组处理功能外,它在数据分析中的主要用途之一是作为数据容器,在算法和库之间传递数据。对于数值数据,NumPy 数组比其他内置 Python 数据结构更有效地存储和操作数据。此外,使用低级语言(如 C 或 FORTRAN)编写的库可以在 NumPy 数组中存储的数据上操作,而无需将数据复制到其他内存表示中。因此,许多 Python 的数值计算工具要么将 NumPy 数组作为主要数据结构,要么针对与 NumPy 的互操作性。
pandas
pandas提供了高级数据结构和函数,旨在使处理结构化或表格数据变得直观和灵活。自 2010 年出现以来,它已经帮助 Python 成为一个强大和高效的数据分析环境。本书中将使用的 pandas 中的主要对象是 DataFrame,这是一个表格化的、以列为导向的数据结构,具有行和列标签,以及 Series,这是一个一维带标签的数组对象。
pandas 将 NumPy 的数组计算思想与电子表格和关系数据库(如 SQL)中发现的数据操作能力相结合。它提供了方便的索引功能,使您能够重新塑造、切片、执行聚合操作和选择数据子集。由于数据操作、准备和清理在数据分析中是如此重要,pandas 是本书的主要关注点之一。
作为背景,我在 2008 年初在 AQR Capital Management 期间开始构建 pandas,这是一家量化投资管理公司。当时,我有一套明确的要求,任何单一工具都无法很好地满足:
- 具有带有标签轴的数据结构,支持自动或显式数据对齐——这可以防止由于数据不对齐和来自不同来源的不同索引数据而导致的常见错误
- 集成的时间序列功能
- 相同的数据结构处理时间序列数据和非时间序列数据
- 保留元数据的算术操作和减少
- 灵活处理缺失数据
- 在流行数据库(例如基于 SQL 的数据库)中找到的合并和其他关系操作
我希望能够在一个地方完成所有这些事情,最好是在一种适合通用软件开发的语言中。Python 是这方面的一个很好的候选语言,但当时并不存在一个集成了这些功能的数据结构和工具集。由于最初构建是为了解决金融和业务分析问题,pandas 具有特别深入的时间序列功能和适用于处理由业务流程生成的时间索引数据的工具。
我在 2011 年和 2012 年的大部分时间里与我以前的 AQR 同事 Adam Klein 和 Chang She 一起扩展了 pandas 的功能。2013 年,我停止了日常项目开发的参与,pandas 自那时起已成为一个完全由社区拥有和维护的项目,全球范围内有超过两千名独特贡献者。
对于使用 R 语言进行统计计算的用户,DataFrame 这个名字将是熟悉的,因为该对象是根据类似的 R data.frame
对象命名的。与 Python 不同,数据框内置于 R 编程语言及其标准库中。因此,pandas 中许多功能通常要么是 R 核心实现的一部分,要么是由附加包提供的。
pandas 这个名字本身来源于panel data,这是一个描述多维结构化数据集的计量经济学术语,也是对Python 数据分析这个短语的一种变换。
matplotlib
matplotlib是用于生成图表和其他二维数据可视化的最流行的 Python 库。最初由 John D. Hunter 创建,现在由一个庞大的开发团队维护。它专为创建适合出版的图表而设计。虽然 Python 程序员可以使用其他可视化库,但 matplotlib 仍然被广泛使用,并且与生态系统的其他部分相当好地集成。我认为它是默认可视化工具的一个安全选择。
IPython 和 Jupyter
IPython 项目始于 2001 年,是 Fernando Pérez 的一个副业项目,旨在打造更好的交互式 Python 解释器。在随后的 20 年里,它已成为现代 Python 数据堆栈中最重要的工具之一。虽然它本身不提供任何计算或数据分析工具,但 IPython 旨在用于交互式计算和软件开发工作。它鼓励执行-探索工作流程,而不是许多其他编程语言的典型编辑-编译-运行工作流程。它还提供了对操作系统的 shell 和文件系统的集成访问;这在许多情况下减少了在终端窗口和 Python 会话之间切换的需求。由于许多数据分析编码涉及探索、试错和迭代,IPython 可以帮助您更快地完成工作。
2014 年,Fernando 和 IPython 团队宣布了Jupyter 项目,这是一个更广泛的倡议,旨在设计与语言无关的交互式计算工具。IPython 网络笔记本变成了 Jupyter 笔记本,现在支持超过 40 种编程语言。IPython 系统现在可以作为使用 Python 与 Jupyter 的内核(编程语言模式)。
IPython 本身已成为更广泛的 Jupyter 开源项目的组成部分,为交互式和探索性计算提供了一个高效的环境。它最古老和最简单的“模式”是作为一个增强的 Python shell,旨在加速 Python 代码的编写、测试和调试。您还可以通过 Jupyter 笔记本使用 IPython 系统。
Jupyter 笔记本系统还允许您在 Markdown 和 HTML 中编写内容,为您提供了一种创建包含代码和文本的丰富文档的方式。
我个人经常在我的 Python 工作中使用 IPython 和 Jupyter,无论是运行、调试还是测试代码。
在GitHub 上的附带书籍材料中,您将找到包含每章代码示例的 Jupyter 笔记本。如果您无法访问 GitHub,您可以尝试Gitee 上的镜像。
SciPy
SciPy是一个解决科学计算中一些基础问题的包集合。以下是它在各个模块中包含的一些工具:
scipy.integrate
数值积分例程和微分方程求解器
scipy.linalg
线性代数例程和矩阵分解,扩展到numpy.linalg
提供的范围之外
scipy.optimize
函数优化器(最小化器)和根查找算法
scipy.signal
信号处理工具
scipy.sparse
稀疏矩阵和稀疏线性系统求解器
scipy.special
SPECFUN 的包装器,一个实现许多常见数学函数(如gamma
函数)的 FORTRAN 库
scipy.stats
标准连续和离散概率分布(密度函数、采样器、连续分布函数)、各种统计检验和更多描述性统计
NumPy 和 SciPy 共同构成了许多传统科学计算应用的相当完整和成熟的计算基础。
scikit-learn
自 2007 年项目开始以来,scikit-learn已成为 Python 程序员的首选通用机器学习工具包。截至撰写本文时,超过两千名不同的个人为该项目贡献了代码。它包括用于以下模型的子模块:
- 分类:SVM、最近邻、随机森林、逻辑回归等
- 回归:Lasso、岭回归等
- 聚类:k-means、谱聚类等
- 降维:PCA、特征选择、矩阵分解等
- 模型选择:网格搜索、交叉验证、度量
- 预处理:特征提取、归一化
除了 pandas、statsmodels 和 IPython 之外,scikit-learn 对于使 Python 成为一种高效的数据科学编程语言至关重要。虽然我无法在本书中包含对 scikit-learn 的全面指南,但我将简要介绍一些其模型以及如何将其与本书中提供的其他工具一起使用。
statsmodels
statsmodels是一个统计分析包,由斯坦福大学统计学教授 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 一样,我将简要介绍 statsmodels 以及如何与 NumPy 和 pandas 一起使用它。
其他包
在 2022 年,有许多其他 Python 库可能会在关于数据科学的书中讨论。这包括一些较新的项目,如 TensorFlow 或 PyTorch,这些项目已经成为机器学习或人工智能工作中流行的工具。现在有其他更专注于这些项目的书籍,我建议使用本书来建立通用 Python 数据处理的基础。然后,您应该准备好转向更高级的资源,这些资源可能假定一定水平的专业知识。
1.4 安装和设置
由于每个人都在不同的应用中使用 Python,因此设置 Python 并获取必要的附加包没有单一的解决方案。许多读者可能没有完整的 Python 开发环境,适合跟随本书,因此我将在每个操作系统上提供详细的设置说明。我将使用 Miniconda,这是 conda 软件包管理器的最小安装,以及conda-forge,这是一个基于 conda 的社区维护的软件分发。本书始终使用 Python 3.10,但如果您是在未来阅读,欢迎安装更新版本的 Python。
如果由于某种原因,这些说明在您阅读时已过时,您可以查看我的书籍网站,我将努力保持最新安装说明的更新。
Windows 上的 Miniconda
要在 Windows 上开始,请从https://conda.io下载最新 Python 版本(目前为 3.9)的 Miniconda 安装程序。我建议按照 conda 网站上提供的 Windows 安装说明进行安装,这些说明可能在本书出版时和您阅读时之间发生了变化。大多数人会想要 64 位版本,但如果这在您的 Windows 机器上无法运行,您可以安装 32 位版本。
当提示是否仅为自己安装还是为系统上的所有用户安装时,请选择最适合您的选项。仅为自己安装将足以跟随本书。它还会询问您是否要将 Miniconda 添加到系统 PATH 环境变量中。如果选择此选项(我通常会这样做),则此 Miniconda 安装可能会覆盖您已安装的其他 Python 版本。如果不这样做,那么您将需要使用安装的 Window 开始菜单快捷方式才能使用此 Miniconda。此开始菜单条目可能称为“Anaconda3 (64 位)”。
我假设您还没有将 Miniconda 添加到系统路径中。要验证配置是否正确,请在“开始”菜单下的“Anaconda3 (64 位)”中打开“Anaconda Prompt (Miniconda3)”条目。然后尝试通过输入python
来启动 Python 解释器。您应该会看到类似以下的消息:
(base) C:\Users\Wes>python Python 3.9 [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
要退出 Python shell,请输入exit()
并按 Enter 键。
GNU/Linux
Linux 的详细信息会根据您的 Linux 发行版类型有所不同,但在这里我提供了 Debian、Ubuntu、CentOS 和 Fedora 等发行版的详细信息。设置与 macOS 类似,唯一的区别是 Miniconda 的安装方式。大多数读者会想要下载默认的 64 位安装程序文件,这是针对 x86 架构的(但未来可能会有更多用户使用基于 aarch64 的 Linux 机器)。安装程序是一个必须在终端中执行的 shell 脚本。然后您将会得到一个类似Miniconda3-latest-Linux-x86_64.sh的文件。要安装它,请使用bash
执行此脚本:
$ bash Miniconda3-latest-Linux-x86_64.sh
注意
一些 Linux 发行版在其软件包管理器中具有所有所需的 Python 软件包(在某些情况下是过时版本),可以使用类似 apt 的工具进行安装。这里描述的设置使用 Miniconda,因为它在各种发行版中都很容易重现,并且更简单地升级软件包到最新版本。
您可以选择将 Miniconda 文件放在哪里。我建议将文件安装在您的主目录中的默认位置;例如,/home/$USER/miniconda(自然包括您的用户名)。
安装程序会询问您是否希望修改您的 shell 脚本以自动激活 Miniconda。我建议这样做(选择“是”)以方便起见。
安装完成后,启动一个新的终端进程并验证您是否已经安装了新的 Miniconda:
(base) $ python Python 3.9 | (main) [GCC 10.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
要退出 Python shell,请输入exit()
并按 Enter 键或按 Ctrl-D。*### macOS 上的 Miniconda
下载 macOS Miniconda 安装程序,应该命名为Miniconda3-latest-MacOSX-arm64.sh,适用于 2020 年以后发布的基于 Apple Silicon 的 macOS 计算机,或者Miniconda3-latest-MacOSX-x86_64.sh,适用于 2020 年之前发布的基于 Intel 的 Mac。在 macOS 中打开终端应用程序,并通过使用bash
执行安装程序(很可能在您的Downloads
目录中)来安装:
$ bash $HOME/Downloads/Miniconda3-latest-MacOSX-arm64.sh
当安装程序运行时,默认情况下会自动在默认 shell 环境和默认 shell 配置文件中配置 Miniconda。这可能位于*/Users/$USER/.zshrc*。我建议让它这样做;如果您不想让安装程序修改默认的 shell 环境,您需要查阅 Miniconda 文档以便继续。
要验证一切是否正常工作,请尝试在系统 shell 中启动 Python(打开终端应用程序以获取命令提示符):
$ python Python 3.9 (main) [Clang 12.0.1 ] on darwin Type "help", "copyright", "credits" or "license" for more information. >>>
要退出 shell,请按 Ctrl-D 或输入exit()
并按 Enter 键。
安装必要的软件包
现在我们已经在您的系统上设置了 Miniconda,是时候安装本书中将要使用的主要软件包了。第一步是通过在 shell 中运行以下命令将 conda-forge 配置为您的默认软件包渠道:
(base) $ conda config --add channels conda-forge (base) $ conda config --set channel_priority strict
现在,我们将使用 Python 3.10 使用conda create
命令创建一个新的 conda“环境”:
(base) $ conda create -y -n pydata-book python=3.10
安装完成后,请使用conda activate
激活环境:
(base) $ conda activate pydata-book (pydata-book) $
注意
每次打开新终端时,都需要使用conda activate
来激活您的环境。您可以随时通过在终端中运行conda info
来查看有关活动 conda 环境的信息。
现在,我们将使用conda install
安装整本书中使用的基本软件包(以及它们的依赖项):
(pydata-book) $ conda install -y pandas jupyter matplotlib
我们还将使用其他软件包,但这些软件包可以在需要时稍后安装。有两种安装软件包的方法:使用conda install
和pip install
。在使用 Miniconda 时,应始终优先使用conda install
,但某些软件包无法通过 conda 获得,因此如果conda install $package_name
失败,请尝试pip install $package_name
。
注意
如果您想安装本书其余部分使用的所有软件包,现在可以通过运行:
conda install lxml beautifulsoup4 html5lib openpyxl \ requests sqlalchemy seaborn scipy statsmodels \ patsy scikit-learn pyarrow pytables numba
在 Windows 上,将^
替换为 Linux 和 macOS 上使用的行继续符\
。
您可以使用conda
update
命令更新软件包:
conda update package_name
pip 还支持使用--upgrade
标志进行升级:
pip install --upgrade package_name
您将有机会在整本书中尝试这些命令。
注意
虽然您可以使用 conda 和 pip 来安装软件包,但应避免使用 pip 更新最初使用 conda 安装的软件包(反之亦然),因为这样做可能会导致环境问题。我建议尽可能使用 conda,并仅在无法使用conda install
安装软件包时才回退到 pip。
集成开发环境和文本编辑器
当被问及我的标准开发环境时,我几乎总是说“IPython 加上文本编辑器”。我通常会在 IPython 或 Jupyter 笔记本中编写程序,并逐步测试和调试每个部分。交互式地玩弄数据并直观验证特定数据操作是否正确也是很有用的。像 pandas 和 NumPy 这样的库旨在在 shell 中使用时提高生产力。
然而,在构建软件时,一些用户可能更喜欢使用功能更丰富的集成开发环境(IDE),而不是像 Emacs 或 Vim 这样的编辑器,后者在开箱即用时提供了更简洁的环境。以下是一些您可以探索的内容:
- PyDev(免费),基于 Eclipse 平台构建的 IDE
- 来自 JetBrains 的 PyCharm(面向商业用户的订阅制,对于开源开发者免费)
- Visual Studio 的 Python 工具(适用于 Windows 用户)
- Spyder(免费),目前与 Anaconda 捆绑的 IDE
- Komodo IDE(商业版)
由于 Python 的流行,大多数文本编辑器,如 VS Code 和 Sublime Text 2,都具有出色的 Python 支持。
1.5 社区和会议
除了通过互联网搜索外,各种科学和数据相关的 Python 邮件列表通常对问题有帮助并且响应迅速。一些可以参考的包括:
- pydata:一个 Google Group 列表,用于与 Python 数据分析和 pandas 相关的问题
- pystatsmodels:用于 statsmodels 或与 pandas 相关的问题
- scikit-learn 邮件列表(scikit-learn@python.org)和 Python 中的机器学习,一般
- numpy-discussion:用于与 NumPy 相关的问题
- scipy-user:用于一般 SciPy 或科学 Python 问题
我故意没有发布这些 URL,以防它们发生变化。它们可以通过互联网搜索轻松找到。
每年举办许多全球各地的 Python 程序员会议。如果您想与其他分享您兴趣的 Python 程序员联系,我鼓励您尽可能参加其中一个。许多会议为那些无法支付入场费或旅行费的人提供财政支持。以下是一些可以考虑的会议:
- PyCon 和 EuroPython:分别是在北美和欧洲举办的两个主要的一般 Python 会议
- SciPy 和 EuroSciPy:分别是在北美和欧洲举办的面向科学计算的会议
- PyData:面向数据科学和数据分析用例的全球系列区域会议
- 国际和地区 PyCon 会议(请参阅
pycon.org
获取完整列表)
1.6 浏览本书
如果您以前从未在 Python 中编程过,您可能需要花一些时间阅读 第二章:Python 语言基础、IPython 和 Jupyter Notebooks 和 第三章:内置数据结构、函数和文件,我在这里放置了有关 Python 语言特性、IPython shell 和 Jupyter notebooks 的简明教程。这些内容是本书其余部分的先决知识。如果您已经有 Python 经验,您可以选择略读或跳过这些章节。
接下来,我简要介绍了 NumPy 的关键特性,将更高级的 NumPy 使用留给 附录 A:高级 NumPy。然后,我介绍了 pandas,并将本书的其余部分专注于应用 pandas、NumPy 和 matplotlib 进行数据分析主题(用于可视化)。我以递增的方式组织了材料,尽管在章节之间偶尔会有一些轻微的交叉,有些概念可能尚未介绍。
尽管读者可能对他们的工作有许多不同的最终目标,但通常所需的任务大致可以分为许多不同的广泛组别:
与外部世界互动
使用各种文件格式和数据存储进行读写
准备
清理、整理、合并、规范化、重塑、切片和切块以及转换数据以进行分析
转换
对数据集组应用数学和统计操作以派生新数据集(例如,通过组变量对大表进行聚合)
建模和计算
将您的数据连接到统计模型、机器学习算法或其他计算工具
演示
创建交互式或静态图形可视化或文本摘要
代码示例
本书中的大多数代码示例都显示了输入和输出,就像在 IPython shell 或 Jupyter notebooks 中执行时一样:
In [5]: CODE EXAMPLE Out[5]: OUTPUT
当您看到像这样的代码示例时,意图是让您在编码环境中的 In
区块中键入示例代码,并通过按 Enter 键(或在 Jupyter 中按 Shift-Enter)执行它。您应该看到类似于 Out
区块中显示的输出。
我已更改了 NumPy 和 pandas 的默认控制台输出设置,以提高本书的可读性和简洁性。例如,您可能会看到在数字数据中打印更多位数的精度。要完全匹配书中显示的输出,您可以在运行代码示例之前执行以下 Python 代码:
import numpy as np import pandas as pd pd.options.display.max_columns = 20 pd.options.display.max_rows = 20 pd.options.display.max_colwidth = 80 np.set_printoptions(precision=4, suppress=True)
示例数据
每一章的示例数据集都托管在 GitHub 仓库 中(如果无法访问 GitHub,则可以在 Gitee 上的镜像)。您可以通过使用 Git 版本控制系统在命令行上下载这些数据,或者通过从网站下载仓库的 zip 文件来获取数据。如果遇到问题,请转到 书籍网站 获取有关获取书籍材料的最新说明。
如果您下载包含示例数据集的 zip 文件,则必须完全提取 zip 文件的内容到一个目录,并在终端中导航到该目录,然后才能继续运行本书的代码示例:
$ pwd /home/wesm/book-materials $ ls appa.ipynb ch05.ipynb ch09.ipynb ch13.ipynb README.md ch02.ipynb ch06.ipynb ch10.ipynb COPYING requirements.txt ch03.ipynb ch07.ipynb ch11.ipynb datasets ch04.ipynb ch08.ipynb ch12.ipynb examples
我已尽一切努力确保 GitHub 仓库包含重现示例所需的一切,但可能会出现一些错误或遗漏。如果有的话,请发送邮件至:book@wesmckinney.com。报告书中错误的最佳方式是在 O’Reilly 网站上的勘误页面上。
导入约定
Python 社区已经采用了许多常用模块的命名约定:
import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns import statsmodels as sm
这意味着当你看到np.arange
时,这是对 NumPy 中arange
函数的引用。这样做是因为在 Python 软件开发中,从像 NumPy 这样的大型包中导入所有内容(from numpy import *
)被认为是不良实践。
二、Python 语言基础,IPython 和 Jupyter 笔记本
原文:
wesmckinney.com/book/python-basics
译者:飞龙
此开放访问网络版本的《Python 数据分析第三版》现已作为印刷版和数字版的伴侣提供。如果您发现任何勘误,请在此处报告。请注意,由 Quarto 生成的本站点的某些方面与 O’Reilly 的印刷版和电子书版本的格式不同。
如果您发现本书的在线版本有用,请考虑订购纸质版或无 DRM 的电子书以支持作者。本网站的内容不得复制或再生产。代码示例采用 MIT 许可,可在 GitHub 或 Gitee 上找到。
当我在 2011 年和 2012 年编写本书的第一版时,关于在 Python 中进行数据分析的学习资源较少。这在一定程度上是一个鸡生蛋的问题;许多我们现在认为理所当然的库,如 pandas、scikit-learn 和 statsmodels,在那时相对不成熟。现在是 2022 年,现在有越来越多关于数据科学、数据分析和机器学习的文献,补充了关于面向计算科学家、物理学家和其他研究领域专业人士的通用科学计算的先前作品。还有关于学习 Python 编程语言本身并成为有效软件工程师的优秀书籍。
由于本书旨在作为在 Python 中处理数据的入门文本,我认为从数据操作的角度对 Python 的内置数据结构和库的一些最重要特性进行自包含概述是有价值的。因此,我将在本章和第三章:内置数据结构、函数和文件中提供大致足够的信息,以便您能够跟随本书的其余部分。
本书的很大一部分关注于基于表格的分析和数据准备工具,用于处理足够小以适合个人计算机的数据集。要使用这些工具,有时您必须对混乱的数据进行一些整理,将其整理成更整洁的表格(或结构化)形式。幸运的是,Python 是做这些事情的理想语言。您对 Python 语言及其内置数据类型的熟练程度越高,准备新数据集进行分析就会变得更容易。
本书中的一些工具最好在实时的 IPython 或 Jupyter 会话中进行探索。一旦您学会如何启动 IPython 和 Jupyter,我建议您跟着示例进行实验和尝试不同的东西。与任何基于键盘的类似控制台的环境一样,熟悉常用命令也是学习曲线的一部分。
注意:本章未涵盖一些入门级 Python 概念,如类和面向对象编程,这些概念在您进入 Python 数据分析领域时可能会有用。
为了加深您对 Python 语言的了解,我建议您将本章与官方 Python 教程以及可能是许多优秀的通用 Python 编程书籍结合起来阅读。一些建议让您开始包括:
- 《Python Cookbook》,第三版,作者 David Beazley 和 Brian K. Jones(O’Reilly)
- 《流畅的 Python》,作者 Luciano Ramalho(O’Reilly)
- 《Effective Python》,第二版,作者 Brett Slatkin(Addison-Wesley)## 2.1 Python 解释器
Python 是一种解释性语言。Python 解释器通过逐条执行程序来运行程序。标准的交互式 Python 解释器可以通过命令行使用python
命令调用:
$ python Python 3.10.4 | packaged by conda-forge | (main, Mar 24 2022, 17:38:57) [GCC 10.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> a = 5 >>> print(a) 5
您看到的>>>
是您将输入代码表达式的提示。要退出 Python 解释器,您可以输入exit()
或按 Ctrl-D(仅适用于 Linux 和 macOS)。
运行 Python 程序就像调用python
并将*.py文件作为第一个参数一样简单。假设我们已经创建了包含以下内容的hello_world.py*文件:
print("Hello world")
您可以通过执行以下命令来运行它(hello_world.py文件必须在您当前的工作终端目录中):
$ python hello_world.py Hello world
虽然一些 Python 程序员以这种方式执行他们的所有 Python 代码,但进行数据分析或科学计算的人使用 IPython,这是一个增强的 Python 解释器,或者使用 Jupyter 笔记本,这是最初在 IPython 项目中创建的基于 Web 的代码笔记本。我在本章中介绍了如何使用 IPython 和 Jupyter,并在附录 A:高级 NumPy 中深入探讨了 IPython 功能。当您使用%run
命令时,IPython 会在同一进程中执行指定文件中的代码,使您能够在完成时交互地探索结果:
$ ipython Python 3.10.4 | packaged by conda-forge | (main, Mar 24 2022, 17:38:57) Type 'copyright', 'credits' or 'license' for more information IPython 7.31.1 -- An enhanced Interactive Python. Type '?' for help. In [1]: %run hello_world.py Hello world In [2]:
默认的 IPython 提示采用带编号的In [2]:
样式,与标准的>>>
提示相比。
2.2 IPython 基础知识
在本节中,我将带您快速了解 IPython shell 和 Jupyter 笔记本,并介绍一些基本概念。
运行 IPython Shell
您可以像启动常规 Python 解释器一样在命令行上启动 IPython shell,只是使用ipython
命令:
$ ipython Python 3.10.4 | packaged by conda-forge | (main, Mar 24 2022, 17:38:57) Type 'copyright', 'credits' or 'license' for more information IPython 7.31.1 -- An enhanced Interactive Python. Type '?' for help. In [1]: a = 5 In [2]: a Out[2]: 5
您可以通过键入 Python 语句并按回车键(或 Enter 键)来执行任意 Python 语句。当您只输入一个变量时,IPython 会呈现对象的字符串表示:
In [5]: import numpy as np In [6]: data = [np.random.standard_normal() for i in range(7)] In [7]: data Out[7]: [-0.20470765948471295, 0.47894333805754824, -0.5194387150567381, -0.55573030434749, 1.9657805725027142, 1.3934058329729904, 0.09290787674371767]
前两行是 Python 代码语句;第二个语句创建了一个名为data
的变量,指向一个新创建的列表。最后一行在控制台中打印了data
的值。
许多种类的 Python 对象都被格式化为更易读或漂亮打印,这与使用print
进行正常打印不同。如果您在标准 Python 解释器中打印上述data
变量,它将不太易读:
>>> import numpy as np >>> data = [np.random.standard_normal() for i in range(7)] >>> print(data) >>> data [-0.5767699931966723, -0.1010317773535111, -1.7841005313329152, -1.524392126408841, 0.22191374220117385, -1.9835710588082562, -1.6081963964963528]
IPython 还提供了执行任意代码块(通过一种略微夸张的复制粘贴方法)和整个 Python 脚本的功能。您还可以使用 Jupyter 笔记本来处理更大的代码块,我们很快就会看到。
在终端中运行 Jupyter Notebook
Jupyter 项目的一个主要组件是笔记本,一种用于代码、文本(包括 Markdown)、数据可视化和其他输出的交互式文档。Jupyter 笔记本与内核交互,这些内核是针对不同编程语言的 Jupyter 交互式计算协议的实现。Python Jupyter 内核使用 IPython 系统作为其基础行为。
要启动 Jupyter,请在终端中运行命令jupyter
notebook
:
$ jupyter notebook [I 15:20:52.739 NotebookApp] Serving notebooks from local directory: /home/wesm/code/pydata-book [I 15:20:52.739 NotebookApp] 0 active kernels [I 15:20:52.739 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/?token=0a77b52fefe52ab83e3c35dff8de121e4bb443a63f2d... [I 15:20:52.740 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). Created new window in existing browser session. To access the notebook, open this file in a browser: file:///home/wesm/.local/share/jupyter/runtime/nbserver-185259-open.html Or copy and paste one of these URLs: http://localhost:8888/?token=0a77b52fefe52ab83e3c35dff8de121e4... or http://127.0.0.1:8888/?token=0a77b52fefe52ab83e3c35dff8de121e4...
在许多平台上,Jupyter 会自动在默认的 Web 浏览器中打开(除非您使用--no-browser
启动)。否则,您可以导航到启动笔记本时打印的 HTTP 地址,例如http://localhost:8888/?token=0a77b52fefe52ab83e3c35dff8de121e4bb443a63f2d3055
。在 Google Chrome 中查看图 2.1。
注意
许多人将 Jupyter 用作本地计算环境,但它也可以部署在服务器上并远程访问。我不会在这里涵盖这些细节,但如果这与您的需求相关,我鼓励您在互联网上探索这个主题。
图 2.1:Jupyter 笔记本首页
要创建一个新笔记本,点击“New”按钮并选择“Python 3”选项。您应该看到类似于图 2.2 的内容。如果这是您第一次尝试,请尝试点击空的代码“单元格”并输入一行 Python 代码。然后按 Shift-Enter 执行它。
图 2.2:Jupyter 新笔记本视图
当您保存笔记本(请参见笔记本文件菜单下的“保存和检查点”)时,它将创建一个扩展名为*.ipynb*的文件。这是一种自包含的文件格式,包含当前笔记本中的所有内容(包括任何已评估的代码输出)。其他 Jupyter 用户可以加载和编辑这些文件。
要重命名打开的笔记本,请单击页面顶部的笔记本标题,然后键入新标题,完成后按 Enter。
要加载现有笔记本,请将文件放在启动笔记本进程的同一目录中(或其中的子文件夹),然后从登录页面点击名称。您可以尝试使用 GitHub 上我的wesm/pydata-book存储库中的笔记本。请参见图 2.3。
当您想要关闭笔记本时,请单击文件菜单,然后选择“关闭并停止”。如果您只是关闭浏览器选项卡,则与笔记本相关联的 Python 进程将继续在后台运行。
虽然 Jupyter 笔记本可能感觉与 IPython shell 有所不同,但本章中的几乎所有命令和工具都可以在任何环境中使用。
图 2.3:现有笔记本的 Jupyter 示例视图
Tab Completion
从表面上看,IPython shell 看起来像标准终端 Python 解释器的外观不同版本(使用python
调用)。与标准 Python shell 相比,IPython shell 的一个主要改进是制表完成,在许多 IDE 或其他交互式计算分析环境中都可以找到。在 shell 中输入表达式时,按 Tab 键将搜索命名空间以查找与您迄今为止键入的字符匹配的任何变量(对象、函数等),并在方便的下拉菜单中显示结果:
In [1]: an_apple = 27 In [2]: an_example = 42 In [3]: an<Tab> an_apple an_example any
在此示例中,请注意 IPython 显示了我定义的两个变量以及内置函数any
。此外,在键入句点后,您还可以完成任何对象的方法和属性:
In [3]: b = [1, 2, 3] In [4]: b.<Tab> append() count() insert() reverse() clear() extend() pop() sort() copy() index() remove()
模块也是如此:
In [1]: import datetime In [2]: datetime.<Tab> date MAXYEAR timedelta datetime MINYEAR timezone datetime_CAPI time tzinfo
注意
请注意,默认情况下,IPython 隐藏以下划线开头的方法和属性,例如魔术方法和内部“私有”方法和属性,以避免显示混乱(并使初学者感到困惑!)。这些也可以通过制表完成,但您必须首先键入下划线才能看到它们。如果您希望始终在制表完成中看到此类方法,请更改 IPython 配置中的此设置。请参阅IPython 文档以了解如何执行此操作。
制表完成在许多上下文中起作用,不仅限于搜索交互式命名空间并完成对象或模块属性。在键入任何看起来像文件路径的内容(即使在 Python 字符串中),按 Tab 键将完成与您键入的内容匹配的计算机文件系统上的任何内容。
结合%run
命令(请参见附录 B.2.1:%run
命令),此功能可以为您节省许多按键。
制表完成还可以节省函数关键字参数(包括=
符号!)的完成时间。请参见图 2.4。
图 2.4:在 Jupyter 笔记本中自动完成函数关键字
我们稍后将更仔细地查看函数。
Python 数据分析(PYDA)第三版(一)https://developer.aliyun.com/article/1482369