本书主题 🤔

本书重点介绍 Python 中数据操作、处理、清洗和整理的实践方面。它将为你提供成为高效数据分析师所必需的 Python 编程技能、库和工具。

本书主题

  • 目标: 提供 Python 及其面向数据的库中对数据分析至关重要的部分的指南。
  • 重点: 强调 Python 编程、库和工具,而不是数据分析方法论。
  • 类比: 可以将本书看作是学习汽车的机械原理(Python 及其工具),而不是学习如何在不同地形上驾驶(数据分析方法)。

Note

虽然本书名为“数据分析”,但它侧重于数据分析所需的 Python 工具,而不是分析技术本身。这就像在建造房屋之前学习如何使用锤子、锯和钻头。🔨🪚🪛

数据科学:一个广义术语 ☂️

自本书于 2012 年首次出版以来,“数据科学”一词已被广泛使用。它涵盖了广泛的活动,从基本的描述性统计到复杂的统计分析和机器学习。

数据科学:一个广义术语 (续)

  • 数据科学的演变: 该领域以及 Python 在其中的作用已显著增长。
  • 扩展的生态系统: 出现了许多新的 Python 库和工具,支持更高级的数据科学方法论。
  • 基础: 本书提供了探索更专业的数据科学资源所需的基本 Python 技能。

数据科学:一个广义术语 (续)

Note

可以将“数据科学”视为涵盖统计学、机器学习、数据可视化等各种学科的大伞。本书提供了握住那把伞的柄(Python 技能)!

数据整理/数据融合 🤼

数据分析的很大一部分涉及数据操作,也称为数据整理数据融合。这些术语都描述了转换和准备数据以进行分析的过程。

数据整理/数据融合 (续)

  • 数据操作: 将原始数据转换为可用格式的核心过程。
  • 同义词: 整理 (Wrangling) 和融合 (Munging) 是数据操作的可互换术语。
  • 重要性: 这是至关重要的一步,因为现实世界的数据通常很混乱,需要在分析之前进行清理。

数据整理/数据融合 (续)

Note

想象一下,你有一盒乐高积木散落在地板上。数据整理就像按颜色、大小和形状对这些积木进行分类和组织,然后才能开始构建有意义的东西。🧱

哪些类型的数据? 🗂️

本书主要关注结构化数据,其中包括各种常见的数据形式:

  • 表格数据: 类似电子表格的数据,具有不同类型的列(文本、数字、日期等)。这是最常见的类型,包括来自关系数据库(如 SQL)和 CSV 文件的数据。

哪些类型的数据?(续)

  • 多维数组: 矩阵,通常用于数值计算。
  • 多个表: 数据分布在多个相关表中,通过关键列链接(如在关系数据库中)。

哪些类型的数据?(续)

  • 时间序列: 随时间收集的数据点,可以是定期或不定期的时间间隔。

哪些类型的数据?(续)

Note

即使是非结构化数据(如新闻文章的集合)通常也可以转换为结构化形式(如词频表)进行分析。可以把它想象成把一堆食材(非结构化数据)变成一个整齐的食谱(结构化数据)。🍲➡️📝

示例:结构化数据 (表格)

客户ID 姓名 城市 订单日期 总金额
1 Alice 纽约 2023-10-26 120.00
2 Bob 伦敦 2023-10-27 250.50
3 Charlie 巴黎 2023-10-27 75.25
4 Alice 纽约 2023-10-28 180.00

示例:结构化数据 (表格) (续)

  • 列: 表示不同的属性(客户 ID、姓名、城市等)。
  • 行: 表示单个记录或观察结果(每个客户的订单)。
  • 数据类型: 每列可以保存不同类型的数据(整数、文本、日期、数字)。

为什么选择 Python 进行数据分析? 🐍

由于以下几个关键优势,Python 已成为数据分析中非常流行的工具:

  • 解释型语言: 更易于学习和使用,促进快速开发和实验。
  • 庞大而活跃的社区: 庞大的用户和开发者网络提供支持、库和工具。

为什么选择 Python 进行数据分析?(续)

  • 丰富的库生态系统: NumPy、pandas 和 scikit-learn 等强大的库简化了复杂的数据分析任务。
  • 通用语言: 既适用于数据分析,也适用于构建完整的数据驱动应用程序。
  • 胶水语言: 非常适合与现有代码和系统(通常用 C、C++ 或 FORTRAN 编写)集成。

为什么选择 Python 进行数据分析?(续)

Note

Python 就像数据分析的瑞士军刀:用途广泛,具有许多用于不同任务的工具,并且易于使用。🔪🛠️

Python 作为“胶水”🔗

Python 的一个显著优势是它能够充当“胶水代码”,连接不同的软件组件和系统,尤其是用 C、C++ 和 FORTRAN 等语言编写的遗留代码。

Python 作为“胶水” (续)

  • 集成: 轻松与现有代码库集成,特别是那些用于科学计算的代码库。
  • 遗留系统: 允许组织利用对旧软件的现有投资,同时受益于 Python 的数据分析功能。
  • 优化: Python 中的“胶水代码”可以连接到优化的低级代码(例如 C 库)以进行性能关键型计算。

Python 作为“胶水” (续)

Note

可以将 Python 视为通用适配器,它允许你将不同类型的插头(软件组件)连接到同一个插座(你的数据分析工作流程)中。🔌

“双语言”问题和 Python 的解决方案 ✌️

传统上,数据分析通常涉及“双语言问题”:

  1. 研究/原型设计: 使用 R 或 MATLAB 等专用语言进行初始探索和模型开发。
  2. 生产: 用不同的语言(例如 Java、C++)重写代码,以便在更大的系统中部署。

“双语言”问题:Python 的解决方案

Python 通过同时适用于研究/原型设计生产来解决此问题:

  • 单一环境: 减少了维护单独开发环境的需要。
  • 效率: 通过在整个过程中使用相同的语言来节省时间和资源。

“双语言”问题:Python 的解决方案 (续)

  • 协作: 促进研究人员和软件工程师之间的协作,他们现在可以使用相同的工具。
  • JIT 编译器: 像 Numba 这样的库提供了“即时”编译,在不离开 Python 环境的情况下显著提高了性能。

“双语言”问题:Python 的解决方案 (续)

Note

Python 弥合了研究和生产之间的差距,从而实现了更顺畅、更高效的工作流程。这就像拥有一种团队中的每个人,从数据科学家到软件工程师,都可以理解和使用的单一语言。🌉

为什么 选择 Python? 🚫

虽然 Python 在许多领域都很出色,但在某些情况下它可能不是理想的选择:

  • 性能关键型应用程序: 对于需要极低延迟或高资源利用率的应用程序(例如高频交易),C++ 等编译语言可能更合适。

为什么 选择 Python? (续)

  • 并发性和 GIL: Python 的全局解释器锁 (GIL) 可能会限制 CPU 密集型应用程序中的真正多线程。但是,存在解决方法(例如,使用 C 扩展或多处理)。

为什么 选择 Python? (续)

Note

Python 中的 GIL 就像一条单车道,即使你有多个车道(核心)可用,也只允许一辆车(线程)一次通过。这对于某些 CPU 密集型任务来说可能是一个瓶颈。但是,你可以使用像 C 扩展这样的绕行方式。🛣️🚗

重要的 Python 库 📚

本节介绍一些对数据分析至关重要的核心 Python 库。

NumPy:数值 Python

NumPy 是 Python 中数值计算的基础。它提供:

  • ndarray 一种快速高效的多维数组对象,用于存储和操作数值数据。
  • 数学函数: 用于在数组上执行逐元素运算和数组之间的数学计算的各种函数。

NumPy:数值 Python (续)

  • 线性代数、傅里叶变换、随机数生成: 科学计算和数据分析的基本工具。
  • 数据容器: 作为在算法和库之间传递数据的有效容器。
  • C API: 允许与 C、C++ 和 FORTRAN 连接。

NumPy:数值 Python (续)

Note

可以将 NumPy 的 ndarray 视为一个高度优化的数字容器,就像一个专为快速计算而设计的高效电子表格。🔢🚀

pandas:数据操作和分析

pandas 建立在 NumPy 之上,提供用于处理结构化或表格数据的高级数据结构和函数。主要功能包括:

  • DataFrame 一种表格化的、面向列的数据结构,具有行和列标签(类似于电子表格或 SQL 表)。
  • Series 一维标记数组对象。

pandas:数据操作和分析 (续)

  • 数据对齐: 基于标签的自动或显式数据对齐,防止由未对齐数据引起的常见错误。
  • 数据操作: 用于重塑、切片、切块、聚合和选择数据子集的工具。
  • 缺失数据处理: 灵活处理缺失数据。

pandas:数据操作和分析 (续)

  • 时间序列功能: 用于处理时间序列数据的专用工具。
  • 与数据库集成: 支持合并和连接来自不同来源的数据,包括 SQL 数据库。
  • 源自面板数据: “pandas” 来自 “panel data”,一个计量经济学术语,以及 “Python data analysis”。

pandas:数据操作和分析 (续)

Note

pandas 就像 Python 中的一个超级电子表格程序,可以让你轻松地操作、清理和分析数据。📊📈

matplotlib:数据可视化 📊

matplotlib 是最广泛使用的 Python 库,用于创建静态绘图和其他二维数据可视化。

  • 出版质量的绘图: 专为生成适合出版物的高质量绘图而设计。
  • 集成: 与 Python 数据生态系统中的其他库很好地集成。
  • 默认选择: 基本数据可视化的可靠且广泛采用的选择。

matplotlib:数据可视化 (续)

Note

matplotlib 是你创建数据可视化表示的首选工具,就像将数据转换为图表和图形一样。📉📊

IPython 和 Jupyter:交互式计算 💻

IPython 和 Jupyter 为 Python 开发和数据分析提供了一个交互式环境。

  • IPython: 一种增强的交互式 Python shell,可促进“执行-探索”工作流程。

IPython 和 Jupyter:交互式计算 (续)

  • Jupyter Notebook: 一种基于 Web 的笔记本环境,支持多种编程语言(包括通过 IPython 的 Python),并允许你在单个文档中组合代码、文本和可视化。
  • 探索和迭代: 非常适合探索数据、尝试不同的代码片段以及迭代分析。

IPython 和 Jupyter:交互式计算 (续)

Note

IPython 和 Jupyter 就像数据科学家的数字实验室笔记本,可以让你进行实验、记录你的工作并分享你的发现。🧪📓

SciPy:科学计算工具

SciPy 是一个软件包的集合,提供用于各种科学计算任务的工具,包括:

  • scipy.integrate 数值积分和微分方程求解器。
  • scipy.linalg 线性代数例程。
  • scipy.optimize 函数优化和求根算法。

SciPy:科学计算工具 (续)

  • scipy.signal 信号处理工具。
  • scipy.sparse 稀疏矩阵和求解器。
  • scipy.special 特殊数学函数。
  • scipy.stats 统计分布、检验和描述性统计。

SciPy:科学计算工具 (续)

Note

SciPy 就像一个装满了用于科学计算的专用仪器的工具箱,扩展了 NumPy 的功能。🧰🔬

scikit-learn:机器学习 🤖

scikit-learn 是 Python 的主要通用机器学习工具包。它包括以下子模块:

  • 分类: 用于识别对象属于哪个类别的算法(例如,垃圾邮件检测)。
  • 回归: 用于预测连续值属性的算法(例如,预测房价)。

scikit-learn:机器学习 (续)

  • 聚类: 用于对相似对象进行分组的算法(例如,客户细分)。
  • 降维: 减少数据集中变量数量的技术。

scikit-learn:机器学习 (续)

  • 模型选择: 用于选择最佳模型和参数的工具。
  • 预处理: 特征提取和归一化。

scikit-learn:机器学习 (续)

Note

scikit-learn 是你的机器学习工作室,提供用于构建和评估预测模型的各种工具。🤖🛠️

statsmodels:统计建模

statsmodels 是一个统计分析包,专注于统计推断,提供不确定性估计和 p 值。它包括:

  • 回归模型: 线性回归、广义线性模型等。
  • 方差分析 (ANOVA)

statsmodels:统计建模 (续)

  • 时间序列分析: AR、ARMA、ARIMA、VAR 模型。
  • 非参数方法: 核密度估计等。
  • 可视化: 用于可视化统计模型结果的工具。

statsmodels: 统计建模 (续)

Note

statsmodels 是你的统计实验室,提供用于进行严格的统计分析和从数据中得出推论的工具。它补充了 scikit-learn,后者更侧重于预测。🧪📊

其他包 📦

  • 还有许多其他重要的 Python 库。
  • TensorFlow 和 PyTorch:常用于机器学习或人工智能工作。

安装和设置 ⚙️

本节提供使用 Miniconda 和 conda-forge 设置用于数据分析的 Python 环境的说明。

Miniconda

Miniconda 是 conda 的最小安装程序,conda 是一个包、依赖项和环境管理系统。conda-forge 是一个基于 conda 的社区维护的软件发行版。

  • 为什么选择 Miniconda? 提供了一种轻量级且灵活的方式来管理 Python 环境和包。

Miniconda (续)

  • conda-forge: 提供各种软件包,包括数据科学中常用的软件包。
  • Python 3.10: 本书使用 Python 3.10,但也可以使用更新的版本。

Miniconda (续)

Note

可以将 conda 视为 Python 项目的虚拟容器。它可以使你的项目保持隔离,并防止不同软件包版本之间的冲突。Miniconda 是 Anaconda 的精简版本。📦

安装步骤 (Windows、macOS、Linux) 💻

本书提供了在 Windows、macOS 和 Linux 上安装 Miniconda 的详细说明。一般步骤是:

  1. 下载:https://conda.io 下载适当的 Miniconda 安装程序。

安装步骤 (续)

  1. 安装: 运行安装程序,按照屏幕上的提示进行操作。
  2. 验证: 打开终端(或 Windows 上的 Anaconda Prompt)并键入 python。你应该会看到 Python 解释器启动。

安装步骤 (续)

  1. 退出: 键入 exit() 或按 Ctrl-D(在 Windows 上按 Ctrl-Z 然后按 Enter)退出解释器。

安装步骤 (续)

Note

这些步骤就像在开始木工项目之前设置你的工作台。你正在准备好你的工具(Python 及其库)以供使用。🛠️🪚

安装必要的包 📦

安装 Miniconda 后,你可以创建一个 conda 环境并安装必要的包:

  1. 配置 conda-forge: bash conda config --add channels conda-forge conda config --set channel_priority strict

安装必要的包 (续)

  1. 创建环境: bash conda create -y -n pydata-book python=3.10
  2. 激活环境: bash conda activate pydata-book

安装必要的包 (续)

  1. 安装包: bash conda install -y pandas jupyter matplotlib (或安装书中列出的所有包)。

安装必要的包 (续)

  • conda installpip install 使用 Miniconda 时首选 conda install。如果某个包无法通过 conda 获得,请使用 pip install
  • 更新包: 使用 conda update package_namepip install --upgrade package_name

安装必要的包 (续)

Note

创建 conda 环境就像为每个项目设置一个单独的工作区。它有助于避免可能需要相同包的不同版本的不同项目之间的冲突。🏢

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

  • 作者建议使用 “IPython 加一个文本编辑器”。
  • 供你参考的一些 IDE:
    • PyDev(免费)
    • JetBrains 的 PyCharm
    • 用于 Visual Studio 的 Python 工具
    • Spyder(免费)
    • Komodo IDE(商业)

社区和会议 🤝

参与 Python 社区是学习和获得帮助的好方法。有用的资源包括:

  • 邮件列表:
    • pydata(通用的 Python 数据分析)
    • pystatsmodels(statsmodels 和 pandas)
    • scikit-learn(机器学习)
    • numpy-discussion
    • scipy-user

社区和会议 (续)

  • 会议:
    • PyCon 和 EuroPython(通用的 Python)
    • SciPy 和 EuroSciPy(科学计算)
    • PyData(数据科学和数据分析)

Note

Python 社区以其热情和乐于助人而闻名。不要犹豫,提出问题并与其他用户联系!🤗

导航本书 🗺️

  • 第 2 章和第 3 章: Python 语言特性、IPython 和 Jupyter Notebook 的简明教程(对初学者至关重要)。
  • NumPy 简介: NumPy 的简要概述,更高级的主题在附录 A 中。

导航本书 (续)

  • pandas 重点: 本书的其余部分重点介绍使用 pandas、NumPy 和 matplotlib 进行数据分析。
  • 递增结构: 材料以循序渐进的方式呈现。

导航本书 (续)

本书涵盖以下关键领域:

  • 与外部世界交互: 读取和写入数据。
  • 准备: 清理、转换和重塑数据。

导航本书 (续)

  • 转换: 应用数学和统计运算。
  • 建模和计算: 将数据连接到模型和算法。
  • 展示: 创建可视化和摘要。

代码示例

  • 代码示例基于 IPython shell 或 Jupyter notebook。
  • 例如:
In [5]: 代码示例
Out[5]: 输出

代码示例 (续)

  • 可重复性: 本书提供了设置环境以匹配示例中显示的输出的说明。
  • 数据: 示例的数据集托管在 GitHub(或码云 Gitee)上。

导入约定

  • 常见的导入语句:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import statsmodels as sm

总结 📝

  • 本章介绍了将在整本书中使用的核心概念和工具。
  • 我们了解了本书的范围(用于数据分析的 Python)、数据科学的含义以及数据整理的重要性。

总结 (续)

  • 我们探讨了使用 Python 进行数据分析的优势,以及一些潜在的局限性。

  • 我们介绍了关键的 Python 库:NumPy、pandas、matplotlib、IPython/Jupyter、SciPy、scikit-learn 和 statsmodels。

  • 我们介绍了使用 Miniconda 安装和设置 Python 环境。

思考和讨论 💭

  • 你对 Python 作为数据分析工具的最初印象是什么?
  • 你最想了解本章介绍的哪些库?

思考和讨论 (续)

  • 你能想到任何数据整理将是分析过程中关键步骤的真实示例吗?
  • “双语言问题”的概念与你自己使用数据分析或软件开发的经验(如果有)有何关联?

思考和讨论 (续)

  • 为什么为不同的 Python 项目创建单独的环境很重要?
  • 你更喜欢使用 IDE,还是文本编辑器加 IPython?