《利用Python进行数据分析·第2版》第1章导读:数据科学生态全景、环境搭建与全书导航

原创2026-10-01 21:53:121,719 阅读
文章标签:文档教程数据分析

《利用Python进行数据分析·第2版》第1章导读:数据科学生态全景、环境搭建与全书导航

本文导读:本文基于开源仓库 python_for_data_analysis_2nd_chinese_version(《利用Python进行数据分析·第2版》中文译本)中的《第01章 准备工作》整理而成。该章是全书的“总纲”,回答了三类核心问题:数据分析到底处理什么数据、为什么选择 Python(以及它的局限在哪里)、以及以 NumPy / pandas / matplotlib / IPython / SciPy / scikit-learn / statsmodels 为核心的生态由哪些库构成。在此基础上,本章给出了 Windows、macOS、Linux 三平台的完整环境搭建流程,并说明了全书代码示例的阅读方式与后续章节的导航路径。读完本章,你将获得一张完整的数据科学工具地图,并能独立完成 Anaconda 环境安装、包管理与第一个 IPython 会话的验证。


1. 本章定位:从零搭建一套 Python 数据分析工作台

《第01章 准备工作》是全书的起点,它不直接讲解任何数据处理代码,而是做三件事:

  1. 界定“数据”的含义,明确本书讨论的对象是结构化数据;
  2. 论证技术选型,说明为什么 Python 适合数据分析,同时坦白它的不足;
  3. 完成环境准备,给出三大操作系统的安装方法与包管理命令,并预览全书章节结构。

在仓库中,本章对应的文档为 第01章 准备工作.md,后续章节(如 第04章 NumPy基础、第05章 pandas入门)均建立在本章所介绍的环境与生态之上。

1.1 什么样的数据?

书中反复出现的“数据”一词,主要指结构化数据(structured data)——这是一个故意含糊其辞的术语,代指所有通用格式的数据,常见形态包括:

  • 表格型数据:各列可能是不同类型(字符串、数值、日期等),例如保存在关系型数据库中,或以制表符 / 逗号为分隔符的文本文件中的那些数据;
  • 多维数组(矩阵);
  • 通过关键列相互联系的多个表——对 SQL 用户而言,就是主键和外键;
  • 间隔平均或不平均的时间序列。

这绝非一个完整的列表。大部分数据集都能被转化为更适合分析和建模的结构化形式,尽管有时并不明显;如果不行,也可以将数据集的特征提取为某种结构化形式。例如,一组新闻文章可以被处理为一张词频表,而这张词频表就可以用于情感分析。

大部分电子表格软件(比如 Microsoft Excel,它可能是世界上使用最广泛的数据分析工具)的用户不会对此类数据感到陌生。

2. 为什么要使用 Python 进行数据分析

自 1991 年诞生以来,Python 已成为最受欢迎的动态编程语言之一。由于拥有大量 Web 框架(如 Ruby 的 Rails 和 Python 的 Django),2005 年之后 Python 与 Ruby 在网站建设领域非常流行。这些语言常被称作脚本(scripting)语言,但作者并不喜欢这个术语——它似乎在暗示这些语言无法用于构建严谨的软件。

在众多解释型语言中,由于各种历史和文化的原因,Python 发展出了一个巨大而活跃的科学计算(scientific computing)社区。在过去的十年里,Python 从边缘的、甚至“自担风险”的科学计算语言,成长为数据科学、机器学习、学界和工业界软件开发最重要的语言之一。

在数据分析、交互式计算以及数据可视化方面,Python 不可避免地会与其他领域特定语言/工具对比,如 R、MATLAB、SAS、Stata 等。近年来,由于 pandas、scikit-learn 等库的不断改良,Python 已成为数据分析任务的优选方案;结合其在通用编程方面的强大实力,完全可以只使用 Python 这一种语言构建以数据为中心的应用。

2.1 Python 作为胶水语言

Python 能成为成功的科学计算工具,部分原因是它能够轻松地集成 C、C++ 以及 Fortran 代码。大部分现代计算环境都利用了一些 Fortran 和 C 库来实现线性代数、优选、积分、快速傅里叶变换等算法;许多企业和国家实验室也利用 Python 来“粘合”那些已经用了多年的遗留软件系统。

大多数软件由两部分代码组成:

  • 少量需要占用大部分执行时间的代码——这是优化的重点,开发者常直接转用更低级的语言(如 C);
  • 大量不经常执行的“胶水代码”——大部分情况下其执行时间微不足道。

因此,用 Python 编写胶水层、把计算瓶颈下放到低级语言,是科学计算领域的主流做法。

2.2 解决“两种语言”问题

很多组织通常用一种领域特定的计算语言(如 SAS 和 R)对新想法做研究、原型构建和测试,然后再将这些想法移植到更大的生产系统(可能是 Java、C# 或 C++ 编写)中。人们逐渐意识到,Python 不仅适用于研究和原型构建,同样适用于构建生产系统。既然一种语言就够了,为什么要使用两个语言的开发环境?研究人员和工程技术人员使用同一种编程工具,将给企业带来非常显著的组织效益。

2.3 为什么不选 Python

虽然 Python 非常适合构建分析应用以及通用系统,但它对不少应用场景适用性较差,主要短板有两个:

  1. 运行速度:Python 是解释型语言,大部分代码比编译型语言(如 Java 和 C++)慢得多。不过程序员的时间通常比 CPU 时间更值钱,因此很多人愿意做此取舍;但在延迟要求极小或高资源利用率的应用中(例如高频交易系统),耗费时间使用 C++ 这类更低级、更低生产率的语言是值得的。

  2. 并发能力:对于高并发、多线程的应用(尤其是拥有许多计算密集型线程的应用),Python 并不理想。原因在于全局解释器锁(Global Interpreter Lock,GIL)——一种防止解释器同时执行多条 Python 字节码指令的机制。虽然很多大数据处理应用需要运行在集群上,但仍有部分场景需要用单进程多线程系统解决。

需要澄清的是:Python 并非完全不能执行真正的多线程并行代码。例如,Python 的 C 插件使用原生 C 或 C++ 的多线程,只要不频繁与 Python 对象交互,就可以并行运行而不受 GIL 影响。

3. 重要的 Python 库:一张数据科学生态地图

本章对还不熟悉 Python 科学计算生态的读者,逐一介绍了六大核心库。这些库在本书后续章节中均有对应展开,例如 第04章 详解 NumPy 数组、第05章 详解 pandas 的 Series 与 DataFrame。

3.1 NumPy:科学计算的基础包

NumPy(Numerical Python 的简称)是 Python 科学计算的基础包,本书大部分内容都基于 NumPy 以及构建于其上的库。它提供以下功能(不限于此):

  • 快速高效的多维数组对象 ndarray;
  • 用于对数组执行元素级计算以及直接对数组执行数学运算的函数;
  • 用于读写硬盘上基于数组的数据集的工具;
  • 线性代数运算、傅里叶变换,以及随机数生成;
  • 成熟的 C API,用于 Python 插件和原生 C、C++、Fortran 代码访问 NumPy 的数据结构和计算工具。

除快速数组处理能力外,NumPy 在数据分析中还有一个主要作用:作为在算法和库之间传递数据的容器。对于数值型数据,NumPy 数组在存储和处理数据时比内置 Python 数据结构高效得多;低级语言(如 C 和 Fortran)编写的库可以直接操作 NumPy 数组中的数据而无需数据复制。因此,许多 Python 数值计算工具要么以 NumPy 数组为主要数据结构,要么可以与 NumPy 无缝交互。

仓库中 第04章 NumPy基础:数组和矢量计算.md 对此有更深入的展开:NumPy 之所以能高效处理大数组,是因为它在连续内存块中存储数据、独立于其他 Python 内置对象,且可以在整个数组上执行复杂计算而不需要 Python 的 for 循环。书中给出的百万整数数组实验对比显示,基于 NumPy 的算法比纯 Python 快 10 到 100 倍甚至更快,且内存占用更少(见 第04章 开篇的 %time 基准示例)。更底层的机制(ndarray 的 shape、stride、dtype 内部结构)则在 附录A NumPy高级应用.md 中讲解。

3.2 pandas:本书的重点

pandas 提供了快速便捷处理结构化数据的大量数据结构和函数。自 2010 年出现以来,它使 Python 成为强大而高效的数据分析环境。本书用得最多的两个 pandas 对象:

  • DataFrame:一个面向列(column-oriented)的二维表结构;
  • Series:一个一维的标签化数组对象。

pandas 兼具 NumPy 高性能的数组计算能力,以及电子表格和关系型数据库(如 SQL)灵活的数据处理功能。它提供复杂精细的索引功能,能便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。因为数据操作、准备、清洗是数据分析最重要的技能,pandas 是本书的重点。

作者 Wes McKinney 自述:2008 年初他开始在 AQR Capital Management(一家量化投资管理公司)开发 pandas,起因是当时没有任何单一工具能满足这些需求:

  • 有标签轴的数据结构,支持自动或清晰的数据对齐——防止因数据不对齐、处理来源不同索引不同的数据所造成的错误;
  • 集成时间序列功能;
  • 相同的数据结构用于处理时间序列数据和非时间序列数据;
  • 保存元数据的算术运算和压缩;
  • 灵活处理缺失数据;
  • 合并与其他流行数据库(例如基于 SQL 的数据库)的关系操作。

pandas 最初就是面向金融和商业分析设计的,专注于深度时间序列功能,适用于时间索引化的数据。对 R 用户而言,DataFrame 这个名字并不陌生——它源自 R 的 data.frame 对象;但与 Python 不同,data frames 是构建于 R 及其标准库的,因此 pandas 的许多功能并不属于 R 或它的扩展包。pandas 这个名字来源于 panel data(面板数据,多维结构化数据集在计量经济学中的术语)与 Python data analysis 的组合。

仓库中 第05章 pandas入门.md 即从 import pandas as pd 与 from pandas import Series, DataFrame 的引入约定开始,逐步展开两个核心数据结构的具体用法。

3.3 matplotlib:二维数据可视化

matplotlib 是最流行的用于绘制图表和其他二维数据可视化的 Python 库,最初由 John D. Hunter(JDH)创建,目前由一个庞大的开发团队维护。它非常适合创建出版物级别的图表。虽然还有其他 Python 可视化库,matplotlib 是使用最广泛的,且与其他生态工具配合完美,书中将其作为默认可视化工具。

3.4 IPython 和 Jupyter:交互式计算环境

IPython 项目始于 Fernando Pérez 在 2001 年的一个子项目,用于加强 Python 的交互性,此后成为 Python 数据栈最重要的工具之一。虽然 IPython 本身不提供计算和数据分析工具,却能大幅提高交互式计算和软件开发的生产率:

  • 鼓励**“执行-探索”的工作流**,区别于其他编程软件的“编辑-编译-运行”工作流;
  • 方便访问系统的 shell 和文件系统;
  • 大部分数据分析代码包含探索、试错和重复,IPython 可使工作更快。

2014 年,Fernando 和 IPython 团队宣布了 Jupyter 项目——一个更宽泛的多语言交互计算工具计划。IPython web notebook 变成了 Jupyter notebook,现在支持 40 种编程语言;IPython 现作为 Jupyter 的 Python 内核(一种编程语言模式)存在。Jupyter notebooks 还可以编写 Markdown 和 HTML 内容,提供一种创建代码和文本的富文本方法;其他编程语言也在 Jupyter 中植入内核,从而可以在 Jupyter 中使用 Python 以外的语言。

仓库中 第02章 Python语法基础,IPython和Jupyter Notebooks.md 是这一部分内容的完整展开,包含 Python 解释器的启动、IPython shell 的使用以及 Jupyter notebook 的操作细节。

3.5 SciPy:科学计算问题域集合

SciPy 是一组专门解决科学计算中各种标准问题域的包的集合,主要包括:

  • scipy.integrate:数值积分例程和微分方程求解器;
  • scipy.linalg:扩展了由 numpy.linalg 提供的线性代数例程和矩阵分解功能;
  • scipy.optimize:函数优化器(最小化器)以及根查找算法;
  • scipy.signal:信号处理工具;
  • scipy.sparse:稀疏矩阵和稀疏线性系统求解器;
  • scipy.special:SPECFUN(一个实现了许多常用数学函数(如伽玛函数)的 Fortran 库)的包装器;
  • scipy.stats:标准连续和离散概率分布(如密度函数、采样器、连续分布函数等)、各种统计检验方法,以及更好的描述统计法。

NumPy 和 SciPy 结合使用,便形成一个相当完备和成熟的计算平台,可以处理多种传统的科学计算问题。

3.6 scikit-learn:通用机器学习工具包

自 2010 年诞生以来,scikit-learn 成为 Python 的通用机器学习工具包。它的子模块包括:

  • 分类:SVM、近邻、随机森林、逻辑回归等;
  • 回归:Lasso、岭回归等;
  • 聚类:k-均值、谱聚类等;
  • 降维:PCA、特征选择、矩阵分解等;
  • 选型:网格搜索、交叉验证、度量;
  • 预处理:特征提取、标准化。

与 pandas、statsmodels 和 IPython 一起,scikit-learn 对 Python 成为高效数据科学编程语言起到了关键作用。本书不会详细讲解 scikit-learn,但会简要介绍它的一些模型,以及用其他工具如何使用这些模型。

3.7 statsmodels:经典统计学与经济计量学

statsmodels 是一个统计分析包,起源于斯坦福大学统计学教授 Jonathan Taylor,他设计了多种流行于 R 语言的回归分析模型。Skipper Seabold 和 Josef Perktold 在 2010 年正式创建了 statsmodels 项目。受 R 的公式系统启发,Nathaniel Smith 发展出了 Patsy 项目,它提供了 statsmodels 的公式或模型的规范框架。

与 scikit-learn 相比,statsmodels 更关注统计推断,提供不确定估计和参数 p-值;scikit-learn 则注重预测。statsmodels 包含经典统计学和经济计量学算法,子模块包括:

  • 回归模型:线性回归、广义线性模型、健壮线性模型、线性混合效应模型等;
  • 方差分析(ANOVA);
  • 时间序列分析:AR、ARMA、ARIMA、VAR 等模型;
  • 非参数方法:核密度估计、核回归;
  • 统计模型结果可视化。

4. 安装与设置:三大平台完整实操

由于人们用 Python 所做的事情不同,不存在一个普适的 Python 及其插件包安装方案。书中推荐免费的 Anaconda 安装包。写作本书时,Anaconda 提供 Python 2.7 和 3.6 两个版本(以后可能变化);本书使用 Python 3.6,建议选择 Python 3.6 或更高版本。仓库 README.md 也注明本书基于 Python 3.6,且“示例代码应该是向前兼容的”。

4.1 Windows

  1. 下载 Anaconda 安装包并跟随 Anaconda 下载页面的 Windows 安装指导执行;
  2. 打开命令行窗口(cmd.exe),输入 python 打开 Python 解释器,应看到类似下面的 Anaconda 版本输出:
C:\Users\wesm>python
Python 3.5.2 |Anaconda 4.1.1 (64-bit)| (default, Jul  5 2016, 11:41:13)
[MSC v.1900 64 bit (AMD64)] on win32
>>>
  1. 要退出 shell:按 Ctrl-D(Linux 或 macOS 上)、Ctrl-Z(Windows 上),或输入命令 exit() 再按 Enter。

4.2 Apple(OS X, macOS)

  1. 下载 OS X Anaconda 安装包,文件名类似 Anaconda3-4.1.0-MacOSX-x86_64.pkg;
  2. 双击 .pkg 文件运行安装包,安装包运行时会自动将 Anaconda 执行路径添加到 .bash_profile(位于 /Users/$USER/.bash_profile);
  3. 确认安装:在系统 shell 打开 IPython:
$ ipython
  1. 要退出 shell:按 Ctrl-D,或输入命令 exit() 再按 Enter。

4.3 GNU/Linux

Linux 版本很多,书中给出 Debian、Ubuntu、CentOS 和 Fedora 的安装方法。安装包是一个脚本文件,必须在 shell 中运行;取决于系统是 32 位还是 64 位,选择 x86(32 位)或 x86_64(64 位)安装包,得到一个文件名类似 Anaconda3-4.1.0-Linux-x86_64.sh 的文件,用 bash 安装:

$ bash Anaconda3-4.1.0-Linux-x86_64.sh

笔记:某些 Linux 发行版在包管理器中有满足需求的 Python 包,只需用类似 apt 的工具安装即可。这里讲的 Anaconda 安装方式适用于不同的 Linux 发行版,也容易将包升级到最新版本。

接受许可之后,安装程序会询问将 Anaconda 文件放在哪里,推荐安装到默认的 home 目录,例如 /home/$USER/anaconda。安装包还可能询问是否将 bin/ 目录添加到 $PATH 变量;如果安装后有问题,可以修改文件 .bashrc(或 .zshrc,如果使用 zsh shell)为类似以下内容:

export PATH=/home/$USER/anaconda/bin:$PATH

做完之后,开启一个新窗口,或再次用 ~/.bashrc 执行 .bashrc。

4.4 安装或升级 Python 包

阅读本书时,你可能想安装不在 Anaconda 中的 Python 包。通常可以用 conda 安装:

conda install package_name

如果这个命令不行,也可以用 pip 包管理工具:

pip install package_name

升级包的方式:

conda update package_name
pip install --upgrade package_name

注意:当同时使用 conda 和 pip 安装包时,千万不要用 pip 升级 conda 的包,否则会导致环境发生问题。使用 Anaconda 或 Miniconda 时,最好首先使用 conda 进行升级。

4.5 Python 2 与 Python 3:版本选型说明

第一版 Python 3.x 出现于 2008 年,与之前的 Python 2.x 代码存在不兼容的地方。2012 年时,许多科学和数据分析社区仍在使用 Python 2.x(因为许多包尚未完全支持 Python 3),因此本书第一版使用 Python 2.7。

但 Python 2.x 在 2020 年到期(包括重要的安全补丁),因此再用 Python 2.7 已不是好的选择。本书使用 Python 3.6,这一广泛使用、支持良好的稳定版本。书中将 Python 2.x 称为“遗留版本”,将 Python 3.x 简称为“Python”。本书代码基于 Python 3.6,你的版本可能更高,但示例代码向前兼容;部分示例代码在 Python 2.7 上可能有所不同或完全不兼容。

4.6 集成开发环境(IDEs)和文本编辑器

作者的标准开发环境几乎总是“IPython 加文本编辑器”——编程时反复在 IPython 或 Jupyter notebooks 中测试、调试每条代码,交互式操作数据,并可视化验证数据操作的特定集合。需要功能更丰富的 IDE 时,可选:

  • PyDev(免费):基于 Eclipse 平台的 IDE;
  • JetBrains PyCharm(商业用户需订阅,开源开发者免费);
  • Visual Studio 的 Python Tools(Windows 用户);
  • Spyder(免费):Anaconda 附带的 IDE;
  • Komodo IDE(商业)。

此外,大多数文本编辑器(如 Atom 和 Sublime Text 3)对 Python 的支持也非常好。

5. 社区、会议与全书导航

5.1 社区与邮件列表

除了网上搜索,各类科学和数据相关的 Python 邮件列表很容易获得回答,包括:

  • pydata:Google 群组列表,回答 Python 数据分析和 pandas 的问题;
  • pystatsmodels:statsmodels 或 pandas 相关的问题;
  • scikit-learn 与 Python 机器学习邮件列表;
  • numpy-discussion:与 NumPy 相关的问题;
  • scipy-user:SciPy 和科学计算的问题。

每年世界各地举办许多 Python 开发者大会,主要会议包括:

  • PyCon 与 EuroPython:北美和欧洲的两大 Python 会议;
  • SciPy 与 EuroSciPy:北美和欧洲两大面向科学计算的会议;
  • PyData:世界范围内一系列地区性会议,专注数据科学和数据分析;
  • 国际和地区的 PyCon 会议。

5.2 本书导航:五大类任务与章节路线

本书剩余章节围绕数据分析的五大类任务组织:

任务类别 说明
与外部世界交互 阅读编写多种文件格式和数据存储
数据准备 清洗、修改、结合、标准化、重塑、切片、切割、转换数据,以进行分析
转换数据 对旧数据集进行数学和统计操作,生成新数据集(例如通过各组变量聚类成大的表)
建模和计算 将数据绑定统计模型、机器学习算法或其他计算工具
展示 创建交互式和静态的图表可视化和文本总结

导航建议:

5.3 代码示例的阅读方式

本书大部分代码示例按照在 IPython shell 或 Jupyter notebooks 中执行时的样子排版:

In [5]: CODE EXAMPLE
Out[5]: OUTPUT

看到此类示例时,在 In 部分输入代码,按 Enter 执行(Jupyter 中按 Shift-Enter),随后可在 Out 看到输出。

各章示例数据与引入惯例、行话(数据规整 Munge/Munging/Wrangling、伪码 Pseudocode、语法糖 Syntactic sugar)也在本章给出定义,便于后续章节直接引用。


小结:第 1 章完成了从“为什么选 Python”到“怎么搭环境”再到“后续怎么读”的完整铺垫。建立好 Anaconda 环境、熟悉 IPython 交互习惯、记住 import numpy as np、import pandas as pd、import matplotlib.pyplot as plt 等引入惯例之后,就可以进入 第02章 正式学习 Python 语法与交互式工具,逐步掌握全套数据科学技能栈。

登录后查看全文
python_for_data_analysis_2nd_chinese_version