概述
数据处理和分析是从原始数据中提取有价值信息的过程
⭐⭐ 概念
数据处理
对原始数据进行收集 : 清洗 、 转换和整合的过程 、 确保数据质量和一致性 , 。
数据分析运用统计方法和分析工具从处理后的数据中发现模式 : 趋势和关联关系 、 。
数据可视化通过图表 : 图形和仪表板将分析结果以直观的方式呈现 、 便于理解和决策 , 。
探索性数据分析EDA ( ) 在正式建模前对数据进行初步探索 : 了解数据分布 , 异常值和相关性 、 。
⭐⭐ 特点
数据驱动决策
基于客观数据而非主观判断进行业务决策 : 提高决策的准确性和科学性 , 。
多源数据整合能够处理来自数据库 : API 、 文件 、 传感器 、 日志等多种数据源的异构数据 、 。
实时性要求支持批处理和流式处理两种模式 : 满足不同场景下的实时分析需求 , 。
可扩展性从小规模数据集到 TB/PB 级大数据集群都能高效处理 : 具备良好的水平扩展能力 , 。
可视化呈现通过丰富的图表类型和交互式仪表板直观展示分析结果 : 降低理解门槛 , 。
自动化流程支持数据管道 : Pipeline ( 自动化 ) 实现从数据采集到报告生成的全流程自动化 , 。
迭代优化分析过程可重复 : 可验证 、 便于持续改进模型和方法 , 形成良性循环 , 。
跨领域应用适用于金融 : 医疗 、 电商 、 制造 、 教育等各个行业 、 具有广泛的适用性 , 。
技术栈丰富拥有 NumPy : Pandas 、 Matplotlib 、 Seaborn 等成熟的开源工具和库生态系统 、 。
⭐⭐ 工作流程
数据收集
从各种来源获取原始数据 : 包括数据库查询 , API 调用 、 文件导入 、 网络爬虫等 、 。
数据清洗处理缺失值 : 异常值 、 重复值 、 统一数据格式 , 确保数据质量 , 。
数据转换进行特征工程 : 标准化 、 编码转换等操作 、 使数据适合分析需求 , 。
探索分析运用描述性统计 : 可视化等方法初步了解数据特征和分布规律 、 。
深入分析应用统计分析 : 机器学习 、 时间序列等方法挖掘数据价值 、 。
结果可视化通过图表 : 报告 、 仪表板等形式展示分析结果和洞察 、 。
决策支持基于分析结果为业务决策提供数据支持和建议 : 。
Anaconda
Anaconda 是一个开源的 Python 和 R 语言数据科学平台
- 核心功能
- 包管理
Conda 包管理器: 支持 Python, R 等多语言、 - 环境管理
创建隔离的虚拟环境: 避免依赖冲突, - 预装工具
Jupyter Notebook: Spyder 等 IDE、 - 数据科学库
NumPy: Pandas、 Matplotlib、 Scikit-learn 等、
- 包管理
- 主要优势
- 开箱即用
预装 1500+ 数据科学包: 无需单独安装, - 跨平台
支持 Windows: macOS、 Linux、 - 环境隔离
轻松管理多个项目的环境和依赖: - 社区活跃
强大的社区支持和丰富的文档资源:
- 开箱即用
核心组件
- Conda
- 包管理和环境管理工具
- 支持多语言
Python( R、 Ruby 等、 ) - 自动解决依赖关系
- Anaconda Navigator
- 图形化界面管理工具
- 可视化管理环境
包和应用、
- Jupyter Notebook
- 交互式编程环境
- 支持代码
文本、 图表混合展示、
- Spyder
- 专为数据科学设计的 IDE
- 集成编辑器
控制台和变量浏览器、
版本选择
- Anaconda
- 完整版
包含 1500+ 数据科学包, - 安装包较大
约 3GB( ) - 适合初学者和需要完整功能的用户
- 完整版
- Miniconda
- 精简版
只包含 Conda 和 Python, - 安装包较小
约 400MB( ) - 适合高级用户和需要自定义环境的场景
- 精简版
工作原理
环境管理机制
1 | 环境隔离原理 |
包管理流程
1 | 包安装流程 |
安装配置
安装版本建议
1 | # 如果不需要完整 Anaconda |
Windows 安装
1 | # 方法一 |
macOS 安装
1 | # 方法一 |
Linux 安装
1 | # 下载安装脚本 |
验证安装
1 | # 查看 Conda 版本 |
配置镜像源
1 | # 添加清华镜像源 |
常用配置
1 | # 设置自动激活 base 环境 |
环境管理
创建环境
1 | # 创建新环境 |
切换环境
1 | # 激活环境 |
删除环境
1 | # 删除指定环境 |
导出导入
1 | # 导出环境配置 |
使用建议
1 | # 1. 为每个项目创建独立环境 |
💗💗 environment.yml 示例
1 | name: myenv |
包管理
安装包
1 | # 从 Conda 安装包 |
更新包
1 | # 更新指定包 |
卸载包
1 | # 卸载指定包 |
搜索包
1 | # 搜索包 |
使用建议
1 | # 1. 优先使用 Conda 安装包 |
通道管理
管理通道
1 | # 查看当前通道 |
常用通道
| 通道名称 | 说明 | 适用场景 |
|---|---|---|
| defaults | Anaconda 官方默认通道 | 通用包 |
| conda-forge | 社区维护的通道 | 最新版本的包 |
| bioconda | 生物信息学包 | 生物数据分析 |
| pytorch | PyTorch 官方通道 | 深度学习 |
虚拟环境
命名规范
1 | # 环境命名 |
项目环境隔离
1 | # 为每个项目创建独立环境 |
环境共享
1 | # 团队成员 A |
性能优化
加速包安装
1 | # 使用 mamba |
清理缓存
1 | # 清理未使用的包和缓存 |
并行下载
1 | # 设置并行下载数 |
集成其他 IDE
VS Code 集成
1 | 配置步骤 |
PyCharm 集成
1 | 配置步骤 |
Docker 集成
1 | # 使用 Anaconda 基础镜像 |
Spyder IDE
1 | # 启动 Spyder |
Jupyter
Jupyter Notebook 是一个开源的交互式计算环境
- 核心功能
- 交互式编程
实时执行代码并查看结果: - 富文本支持
Markdown: LaTeX 公式、 HTML、 - 可视化集成
图表: 图像、 视频嵌入、 - 多语言支持
Python: R、 Julia、 Scala 等 40+ 语言、
- 交互式编程
- 主要优势
- 易于使用
基于浏览器的界面: 无需复杂配置, - 可复现性
代码: 数据和结果保存在同一文档中、 - 协作友好
支持分享和版本控制: - 生态丰富
与数据科学库无缝集成:
- 易于使用
核心组件
- Jupyter Notebook
- 经典的笔记本界面
- 以
.ipynb格式保存文档 - 适合教学和快速原型开发
- JupyterLab
- 下一代 IDE 界面
- 模块化设计
支持扩展, - 适合作为日常开发环境
- JupyterHub
- 多用户服务器
- 支持团队协作和教育场景
- 集中管理多个 Notebook 实例
- nbconvert
- 格式转换工具
- 支持转换为 HTML
、 Markdown 等格式、
文件格式
- .ipynb (IPython Notebook)
- JSON 格式的笔记本文件
- 包含代码单元格
输出、 元数据、 - 可用文本编辑器查看和编辑
- .py (Python 脚本)
- 可从 Notebook 导出
- 适合部署和生产环境
工作原理
架构设计
1 | Jupyter 架构 |
执行流程
1 | 用户操作 → 前端发送请求 → 服务器转发 → Kernel 执行 → 返回结果 → 前端显示 |
安装配置
使用 Conda 安装
1 | # 安装 Jupyter Notebook |
使用 pip 安装
1 | # 安装 Jupyter Notebook |
验证安装
1 | # 查看 Jupyter 版本 |
基本启动
1 | # 启动 Jupyter Notebook |
配置文件
1 | # 生成 Notebook 配置 |
💗💗 常用配置项
1 | # jupyter_notebook_config.py |
密码保护
1 | # 生成密码哈希 |
Kernels 管理
基本操作
1 | # 查看已安装的 kernels |
多语言支持
1 | # 安装 R kernel |
快捷键
命令模式
按 Esc 进入命令模式
| 快捷键 | 功能 |
|---|---|
| A | 在上方插入单元格 |
| B | 在下方插入单元格 |
| D, D | 删除单元格 |
| M | 转换为 Markdown 单元格 |
| Y | 转换为代码单元格 |
| R | 转换为 Raw 单元格 |
| Shift + ↑/↓ | 选择多个单元格 |
| Ctrl + Shift + - | 分割单元格 |
| Z | 撤销删除 |
编辑模式
按 Enter 进入编辑模式
| 快捷键 | 功能 |
|---|---|
| Shift + Enter | 运行单元格并选中下一个 |
| Ctrl + Enter | 运行单元格 |
| Alt + Enter | 运行单元格并在下方插入新单元格 |
| Tab | 代码补全或缩进 |
| Shift + Tab | 显示函数文档 |
| Ctrl + ] / [ | 增加/减少缩进 |
| Ctrl + / | 注释/取消注释 |
基本操作
创建和保存
1 | # 新建 Notebook |
运行代码
1 | # 单个单元格 |
扩展管理
安装扩展
1 | # 查看已安装的扩展 |
常用扩展
| 扩展名称 | 功能 |
|---|---|
| @jupyterlab/git | Git 版本控制集成 |
| @jupyterlab/toc | 自动生成目录 |
| @jupyter-widgets/jupyterlab-manager | 交互式 widgets 支持 |
| @ryantam626/jupyterlab_code_formatter | 代码格式化 |
| @krassowski/jupyterlab-lsp | 语言服务器协议支持 |
高级功能
魔术命令
1 | # 查看可用魔术命令 |
系统命令
1 | # 在单元格中执行系统命令 |
Widgets 交互
1 | import ipywidgets as widgets |
NumPy
NumPy(Numerical Python)是 Python 科学计算的基础库,提供了高性能的多维数组对象和丰富的数学函数
- 核心功能
- 多维数组对象:ndarray,支持高效的数值计算
- 广播机制:自动处理不同形状数组的运算
- 数学函数:线性代数
傅里叶变换、 随机数生成等、 - 集成能力:与 C/C++/Fortran 代码无缝集成
- 主要优势
- 性能卓越:底层使用 C 语言实现,比原生 Python 快数十倍
- 内存高效:连续存储数据,减少内存开销
- 功能丰富:提供全面的数学运算和统计函数
- 生态完善:是 Pandas
SciPy、 Scikit-learn 等库的基础、
核心组件
- ndarray
- N 维数组对象,NumPy 的核心数据结构
- 所有元素类型相同,存储在连续的内存块中
- ufunc(通用函数)
- 对数组进行逐元素操作的函数
- 支持广播机制,自动处理不同形状的数组
- 索引和切片
- 支持整数索引
布尔索引、 花式索引、 - 提供强大的数据选择和过滤能力
- 支持整数索引
- 广播机制
- 自动扩展不同形状的数组以进行运算
- 避免显式循环,提高代码效率
数据类型
- 基本类型
- int8, int16, int32, int64:整数类型
- float16, float32, float64:浮点数类型
- bool:布尔类型
- complex64, complex128:复数类型
- 特殊类型
- datetime64:日期时间类型
- timedelta64:时间差类型
- object:Python 对象类型
工作原理
内存布局
1 | ndarray 内部结构: |
运算流程
1 | 创建数组 → 执行运算 → 结果存储 |
环境搭建
pip 安装
1 | # 基础安装 |
conda 安装
1 | # 使用 conda 安装 |
验证安装
1 | import numpy as np |
创建数组
从列表创建
1 | import numpy as np |
常用创建函数
1 | # 创建全零数组 |
特殊数组
1 | # 对角矩阵 |
数组属性
基本属性
1 | arr = np.array([[1, 2, 3], [4, 5, 6]]) |
重塑数组
1 | arr = np.arange(12) |
数组索引
基本索引
1 | arr = np.array([10, 20, 30, 40, 50]) |
布尔索引
1 | arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) |
花式索引
1 | arr = np.array([10, 20, 30, 40, 50]) |
数组运算
拼接数组
1 | a = np.array([1, 2, 3]) |
分割数组
1 | arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) |
算术运算
1 | a = np.array([1, 2, 3, 4]) |
比较运算
1 | a = np.array([1, 2, 3, 4, 5]) |
集合运算
1 | a = np.array([1, 2, 3, 4, 5]) |
矩阵运算
1 | A = np.array([[1, 2], [3, 4]]) |
数学函数
三角函数
1 | angles = np.array([0, np.pi/2, np.pi, 3*np.pi/2]) |
指数对数
1 | arr = np.array([1, 2, 3, 4]) |
舍入函数
1 | arr = np.array([1.234, 2.567, 3.999, -1.5]) |
统计函数
基本统计
1 | arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) |
轴向上的统计
1 | arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) |
唯一值和计数
1 | arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4]) |
排序
1 | arr = np.array([3, 1, 4, 1, 5, 9, 2, 6]) |
高级操作
广播机制
1 | # 标量与数组运算 |
特征向量
1 | A = np.array([[4, 2], [1, 3]]) |
线性方程组
1 | # Ax = b |
SVD 分解
1 | A = np.array([[1, 2], [3, 4], [5, 6]]) |
基本随机数
1 | # 设置随机种子(保证可重复性) |
概率分布
1 | # 二项分布 |
随机选择
1 | arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) |
性能优化
命名规范
1 | # 导入约定 |
避免循环
1 | import time |
广播优化
1 | # 低效:使用循环 |
数据类型选择
1 | # 根据数据范围选择合适的类型 |
原地操作
1 | arr = np.array([1, 2, 3, 4, 5]) |
视图而非副本
1 | arr = np.array([1, 2, 3, 4, 5]) |
使用多线程
1 | # NumPy 内部已经使用多线程优化 |
使用 Numba 加速
1 | from numba import jit |
其他优化
1 | # 1. 优先使用向量化运算 |
使用示例
图像表示
1 | # 灰度图像:二维数组 |
图像操作
1 | # 图像翻转 |
数据清洗
1 | # 创建包含缺失值的数据 |
数据统计分析
1 | # 创建示例数据 |
特征标准化
1 | # Min-Max 标准化 |
数据增强
1 | # 图像数据增强示例 |
常见问题
可变默认参数
1 | # 错误示例 |
浮点数精度
1 | # 不要直接比较浮点数 |
视图和副本
1 | arr = np.array([1, 2, 3, 4, 5]) |
形状不匹配错误
1 | # 错误:形状不匹配 |
数据类型转换
1 | # 隐式类型转换 |
内存不足问题
1 | # 问题:处理大型数组时内存不足 |
Pandas
Pandas 是一个强大的 Python 数据分析库
- 核心功能
- 数据结构
Series 和 DataFrame 两种核心数据结构: - 数据读写
支持 CSV: Excel、 SQL、 JSON 等多种格式、 - 数据清洗
处理缺失值: 重复值、 异常值、 - 数据转换
重塑: 透视、 合并、 分组聚合、 - 时间序列
强大的日期和时间处理功能:
- 数据结构
- 主要优势
- 高效灵活
基于 NumPy: 性能优异, - 功能丰富
提供全面的数据操作 API: - 易于学习
API 设计直观: 文档完善, - 生态完善
与 NumPy: Matplotlib、 Scikit-learn 等无缝集成、
- 高效灵活
数据结构
- Series
- 一维标签数组
类似带索引的列表, - 可以存储任何数据类型
- 一维标签数组
- DataFrame
- 二维表格型数据结构
类似 Excel 表格或 SQL 表, - 由多个 Series 组成
每列可以是不同类型,
- 二维表格型数据结构
- Index
- 行和列的标签
支持多种类型, - 提供快速查找和对齐功能
- 行和列的标签
核心组件
- 数据读取器
- read_csv
read_excel、 read_sql 等、 - 支持多种数据源和格式
- read_csv
- 数据处理器
- 清洗
转换、 聚合等操作、 - 支持向量化运算
性能优异,
- 清洗
- 分组引擎
- groupby 操作
类似 SQL 的 GROUP BY, - 支持复杂的分组聚合计算
- groupby 操作
工作原理
数据处理流程
1 | 1. 数据加载 → 从文件/数据库/API 读取数据 |
内存管理机制
1 | 数据加载 → 创建 DataFrame → 内存中操作 → 垃圾回收 |
环境搭建
pip 安装
1 | # 基础安装 |
conda 安装
1 | # 使用 conda 安装 |
验证安装
1 | import pandas as pd |
依赖环境
1 | pandas 主要依赖 |
💗💗 requirements.txt
1 | pandas==2.1.4 |
基本配置
💗💗 显示选项配置
1 | import pandas as pd |
💗💗 常用导入约定
1 | # 标准导入方式 |
创建测试数据
1 | import pandas as pd |
基础使用
创建 Series
1 | import pandas as pd |
操作 Series
1 | s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e']) |
创建 DataFrame
1 | import pandas as pd |
操作 DataFrame
1 | # 查看数据 |
读取数据
1 | # 读取 CSV |
写入数据
1 | # 写入 CSV |
数据清洗
查看数据质量
1 | # 查看缺失值 |
检测缺失值
1 | import numpy as np |
删除缺失值
1 | # 删除含缺失值的行 |
填充缺失值
1 | # 用固定值填充 |
处理重复值
1 | # 检测重复值 |
识别异常值
1 | # 使用标准差识别 |
处理异常值
1 | # 删除异常值 |
数据类型转换
1 | # 查看数据类型 |
数据过滤
列选择
1 | # 选择单列 |
行选择
💗💗 loc 标签索引
1 | # 选择单行 |
💗💗 iloc 位置索引
1 | # 选择单行 |
基本条件过滤
1 | # 单条件 |
字符串条件过滤
1 | # 包含 |
高级过滤过滤
1 | # isin 过滤 |
数据排序
基本排序
1 | # 单列排序 |
排名
1 | # 基本排名 |
数据转换
添加列
1 | # 直接赋值 |
删除列
1 | # 删除单列 |
重命名
1 | # 重命名列 |
apply 方法
1 | # 对列应用函数 |
map 方法
1 | # Series 映射 |
transform 方法
1 | # 分组后变换 |
数据聚合
基本统计
1 | # 描述性统计 |
基本分组
1 | # 单列分组 |
聚合函数
1 | # 单个聚合 |
分组变换
1 | # 组内标准化 |
透视表
1 | # 基本透视表 |
交叉表
1 | # 基本交叉表 |
数据合并
join 连接
1 | # 基于索引连接 |
concat 连接
1 | # 垂直连接 |
append 追加
1 | # 旧方法 |
merge 合并
1 | # 创建示例数据 |
时间序列
创建时间序列
1 | # 创建日期范围 |
时间转换
1 | # 字符串转时间 |
时间索引操作
1 | # 设置时间索引 |
时区处理
1 | # 本地化时区 |
进阶功能
多级索引
💗💗 创建多级索引
1 | # 从现有 DataFrame 创建 |
💗💗 多级索引操作
1 | # 选择数据 |
窗口函数
1 | # 滚动窗口 |
分类数据
1 | # 创建分类数据 |
稀疏数据
1 | # 创建稀疏 Series |
性能优化
代码规范
1 | # 1. 使用有意义的变量名 |
性能建议
1 | # 1. 读取时指定数据类型 |
常见陷阱
1 | # 1. 链式索引问题 |
数据质量
1 | # 问题 |
内存优化
1 | # 查看内存使用 |
向量化操作
1 | # 避免使用循环 |
分块处理大数据
1 | # 分块读取 |
SQLAlchemy
SQLAlchemy 是 Python 中最流行的 ORM
- 核心功能
- ORM 映射
将 Python 类与数据库表进行映射: - SQL 表达式语言
提供 Pythonic 的 SQL 构建方式: - 会话管理
事务管理和连接池: - 迁移支持
配合 Alembic 实现数据库版本控制:
- ORM 映射
- 主要优势
- 灵活性高
支持 ORM 和 Core 两种使用方式: - 性能优秀
接近原生 SQL 的性能: - 数据库无关
支持多种数据库后端: - 社区活跃
丰富的插件和扩展生态:
- 灵活性高
核心组件
- Engine
- 数据库连接的核心接口
- 管理连接池和方言
- Session
- 工作单元模式
跟踪所有对象变化, - 提供事务管理
- 工作单元模式
- Model/Declarative Base
- 定义数据库表的 Python 类
- SQLAlchemy 自动生成 SQL
- Query
- 构建和执行查询的对象
- 支持链式调用
工作原理
执行流程
1 | 1. 创建 Engine → 配置数据库连接 |
SQL 生成过程
1 | Python 对象操作 → ORM 转换 → SQL 表达式 → 编译为 SQL → 执行 |
环境搭建
1 | # 基础安装 |
💗💗 requirements.txt
1 | sqlalchemy==2.0.23 |
基本使用
创建数据库表
1 | -- 创建用户表 |
创建模型类
1 | from sqlalchemy import create_engine, Column, Integer, String, DateTime |
数据库连接
💗💗 第一种连接方式
1 | from sqlalchemy import create_engine, text |
💗💗 第二种配置文件方式
1 | # config.py |
创建数据库表
1 | from sqlalchemy import create_engine |
CRUD 操作
1 | from sqlalchemy.orm import Session |
基本查询
1 | from sqlalchemy import and_, or_ |
模糊查询
1 | # LIKE 查询 |
排序分页
1 | # 排序 |
聚合查询
1 | from sqlalchemy import func |
单条插入
1 | # 方式一 |
批量插入
1 | # 方式一 |
单条更新
1 | # 查询后更新 |
批量更新
1 | # 批量更新所有符合条件的记录 |
单条删除
1 | # 查询后删除 |
批量删除
1 | # 删除所有符合条件的记录 |
高级查询
一对一关系
1 | from sqlalchemy import ForeignKey |
一对多关系
1 | class User(Base): |
多对多关系
1 | # 关联表 |
子查询
1 | from sqlalchemy import func |
原生 SQL
1 | from sqlalchemy import text |
会话管理
生命周期
1 | from contextlib import contextmanager |
事务管理
1 | # 自动提交 |
连接池配置
1 | from sqlalchemy import create_engine |
Flask 整合
安装
1 | pip install flask-sqlalchemy |
配置
1 | from flask import Flask |
路由
1 | from flask import jsonify, request |
整合
1 | from fastapi import FastAPI, Depends, HTTPException |
性能优化
命名规范
1 | 模型类命名 |
代码规范
1 | # 1. 使用上下文管理器 |
性能优化
1 | # 1. 避免 N+1 查询问题 |
安全建议
1 | # 1. 防止 SQL 注入 |
常见问题
中文乱码问题
1 | # 确保数据库 URL 包含编码参数 |
日期时间处理
1 | from datetime import datetime |
循环导入问题
1 | # 问题 |
报错处理
💗💗 SQLAlchemy 报错: InvalidRequestError
1 | 错误信息 |
💗💗 SQLAlchemy 报错: DetachedInstanceError
1 | 错误信息 |
💗💗 SQLAlchemy 报错: IntegrityError
1 | 错误信息 |
💗💗 SQLAlchemy 报错: OperationalError
1 | 错误信息 |
Matplotlib
Matplotlib 是 Python 中最流行的数据可视化库
- 核心功能
- 多种图表
线图: 柱状图、 散点图、 饼图、 直方图等、 - 高度定制
颜色: 样式、 标签、 图例等全面控制、 - 多格式输出
PNG: 、 SVG、 EPS 等多种格式、 - 子图布局
支持复杂的图表布局和组合: - 3D 绘图
通过 mplot3d 工具包支持三维可视化:
- 多种图表
- 主要优势
- 成熟稳定
历史悠久: 社区活跃, 文档完善, - 灵活强大
几乎可以绘制任何类型的图表: - 生态集成
与 NumPy: Pandas、 SciPy 无缝配合、 - 跨平台
支持 Windows: Linux、 macOS、
- 成熟稳定
核心组件
- Figure
画布( ) - 整个图表的容器
- 可以包含多个 Axes
子图( )
- Axes
坐标系/子图( ) - 实际的绘图区域
- 包含坐标轴
标题、 图例等元素、
- Axis
坐标轴( ) - X 轴和 Y 轴
- 控制刻度
标签、 范围等、
- Artist
艺术家对象( ) - 所有可见元素的基类
- 包括线条
文本、 图例等、
工作原理
绘图流程
1 | 1. 创建 Figure 对象 → 设置画布大小和分辨率 |
渲染机制
1 | 数据准备 → Artist 对象创建 → 渲染引擎处理 → 输出图像 |
环境搭建
pip 安装
1 | # 基础安装 |
conda 安装
1 | # 使用 conda 安装 |
验证安装
1 | import matplotlib |
依赖环境
1 | matplotlib 主要依赖 |
💗💗 requirements.txt
1 | matplotlib==3.8.2 |
后端选择
1 | import matplotlib |
样式配置
1 | # 查看所有可用样式 |
中文显示配置
1 | import matplotlib.pyplot as plt |
基础绘图
基本线图
1 | import matplotlib.pyplot as plt |
样式定制
1 | # 线条样式 |
基本散点图
1 | # 简单散点图 |
高级散点图
1 | # 分组散点图 |
垂直柱状图
1 | # 简单柱状图 |
分组和堆叠柱状图
1 | # 分组柱状图 |
基本饼图
1 | # 简单饼图 |
环形图
1 | # 环形图 |
基本直方图
1 | # 简单直方图 |
累积直方图和密度图
1 | # 累积直方图 |
高级图表
箱线图
1 | # 基本箱线图 |
热力图
1 | # 基本热力图 |
面积图
1 | # 堆叠面积图 |
雷达图
1 | # 雷达图 |
3D 绘图
1 | from mpl_toolkits.mplot3d import Axes3D |
子图与布局
subplot 方法
1 | # 2x2 子图 |
add_subplot 方法
1 | # 不规则子图 |
GridSpec 布局
1 | import matplotlib.gridspec as gridspec |
inset_axes 插图
1 | # 添加插图 |
样式定制
颜色设置
1 | # 命名颜色 |
Colormap 使用
1 | # 使用 colormap |
字体设置
1 | # 全局字体设置 |
文本标注
1 | # 箭头标注 |
图例定制
1 | # 图例位置 |
保存图表
基本保存
1 | # 保存为 PNG |
批量保存
1 | # 批量生成并保存图表 |
格式对比
| 格式 | 类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| PNG | 位图 | 兼容性好 |
放大失真 | 网页展示 |
| JPG | 位图 | 压缩率高 | 有损压缩 |
照片 |
| 矢量图 | 无损缩放 |
文件较大 | 学术论文 |
|
| SVG | 矢量图 | 可编辑 |
复杂图表文件大 | 网页嵌入 |
| EPS | 矢量图 | LaTeX 兼容 | 老旧格式 | LaTeX 文档 |
与 Pandas 集成
DataFrame 直接绘图
1 | import pandas as pd |
时间序列可视化
1 | # 时间序列特殊处理 |
动画与交互
基本动画
1 | from matplotlib.animation import FuncAnimation |
交互式图表
1 | # 使用 widgets |
性能优化
代码规范
1 | # 1. 使用面向对象接口 |
性能优化
1 | # 1. 减少点数 |
性能问题
1 | # 问题 |
显示问题
1 | # 问题 |
常见陷阱
1 | # 1. 忘记调用 tight_layout |
Seaborn
Seaborn 是基于 Matplotlib 的高级 Python 数据可视化库
- 核心功能
- 统计图表
分布图: 回归图、 分类图等、 - 关系可视化
散点图: 线图、 热力图、 - 分类数据
箱线图: 小提琴图、 条形图、 - 矩阵可视化
热力图: 聚类图、 - 多变量分析
成对关系图: 联合分布图、
- 统计图表
- 主要优势
- 简洁易用
API 设计直观: 代码量少, - 美观默认
内置多种主题和配色方案: - Pandas 集成
直接支持 DataFrame: - 统计友好
自动计算统计量并可视化:
- 简洁易用
核心组件
- 图形级别函数
- relplot
关系图: - catplot
分类图: - displot
分布图: - jointplot
联合分布图: - pairplot
成对关系图:
- relplot
- 坐标轴级别函数
- scatterplot
lineplot、 散点图: 线图、 - barplot
boxplot、 条形图: 箱线图、 - histplot
kdeplot、 直方图: 密度图、 - heatmap
clustermap、 热力图: 聚类图、
- scatterplot
工作原理
绘图流程
1 | 1. 准备数据 → DataFrame 格式 |
与 Matplotlib 的关系
1 | Seaborn 构建在 Matplotlib 之上 |
环境搭建
pip 安装
1 | # 基础安装 |
conda 安装
1 | # 使用 conda 安装 |
验证安装
1 | import seaborn as sns |
依赖环境
1 | seaborn 主要依赖 |
💗💗 requirements.txt
1 | seaborn==0.13.0 |
主题设置
1 | import seaborn as sns |
配色方案
1 | # 查看可用配色 |
上下文设置
1 | # 设置绘图上下文 |
中文支持
1 | # 设置中文字体 |
关系图表
基本散点图
1 | import seaborn as sns |
高级散点图
1 | # 透明度控制 |
基本线图
1 | # 加载时间序列数据 |
带置信区间的线图
1 | # 加载实验数据 |
样式定制
1 | # 不同线条样式 |
分面关系图
1 | # 创建分面网格 |
分布图表
基本直方图
1 | # 加载数据 |
分组直方图
1 | # 按类别分组 |
二维直方图
1 | # 二维直方图 |
基本密度图
1 | # 单变量密度图 |
二维密度图
1 | # 等高线图 |
灵活分布图
1 | # 自动选择最佳展示方式 |
分组分布
1 | # 按类别分面 |
分类图表
基本条形图
1 | # 聚合数据 |
分组条形图
1 | # 按性别分组 |
基本箱线图
1 | # 简单箱线图 |
样式定制
1 | # 自定义颜色 |
基本小提琴图
1 | # 简单小提琴图 |
分割小提琴图
1 | # 按性别分割 |
分面分类图
1 | # 创建分面网格 |
矩阵图表
基本热力图
1 | # 创建相关矩阵 |
高级热力图
1 | # 相关系数热力图 |
层次聚类热力图
1 | # 加载基因表达数据 |
多变量图表
基本成对图
1 | # 简单成对图 |
高级成对图
1 | # 选择特定变量 |
基本联合图
1 | # 散点 + 边际分布 |
回归联合图
1 | # 散点 + 回归线 |
回归图表
基本回归图
1 | # 简单回归 |
分面回归图
1 | # lmplot 创建分面网格 |
主题和样式
内置主题
1 | # 查看所有主题 |
自定义样式
1 | # 完全自定义 |
调色板类型
1 | # 定性调色板 |
自定义调色板
1 | # 从颜色列表创建 |
上下文和字体
1 | # 不同上下文对比 |
与 Pandas 集成
DataFrame 直接绘图
1 | # 创建示例数据 |
统计摘要可视化
1 | # 描述性统计 |
性能优化
代码规范
1 | # 1. 使用数据驱动的方式 |
性能优化
1 | # 1. 大数据集降采样 |
常见陷阱
1 | # 1. 忘记处理缺失值 |
性能问题
1 | # 问题 |
美观性问题
1 | # 问题 |
学习资源
- 视频
- 数据分析全套视频教程
: https://www.bilibili.com/video/BV1ReshzoEgG
- 数据分析全套视频教程
- 书籍
利用 Jupyter 进行数据科学《 》 社区编写: Python 数据科学手册《 》 Jake VanderPlas 著: 包含 Jupyter 章节( ) Jupyter 交互式数据分析《 》 社区编写:
- 工具
- Google Colab
云端 Jupyter 环境: - Kaggle Notebooks
数据科学竞赛平台: - Binder
可分享的在线 Notebook: - NBViewer
在线查看 Notebook:
- Google Colab
- Anaconda
- 官方文档
: https://docs.anaconda.com/
- 官方文档
- Jupyter
- Jupyter 官方文档
: https://jupyter.org/documentation - Jupyter Notebook 文档
: https://jupyter-notebook.readthedocs.io/ - JupyterLab 文档
: https://jupyterlab.readthedocs.io/ - Jupyter GitHub
: https://github.com/jupyter
- Jupyter 官方文档
- NumPy
- NumPy 官方文档:
https://numpy.org/doc/stable/ - NumPy 中文文档:
https://www.numpy.org.cn/ - NumPy GitHub:
https://github.com/numpy/numpy
- NumPy 官方文档:
- SQLAlchemy
: https://docs.sqlalchemy.org/- SQLAlchemy 官方文档
: https://docs.sqlalchemy.org/ - SQLAlchemy GitHub
: https://github.com/sqlalchemy/sqlalchemy
- SQLAlchemy 官方文档
- Matplotlib
- Matplotlib 图表模版
: https://matplotlib.org/stable/gallery/index.html
- Matplotlib 图表模版