1.3.3 Jupyter Notebook

这一节介绍数据分析和 AI 实验最常用的交互式环境。你会理解 Notebook 适合探索、实验和展示,.py 文件更适合正式项目代码,并学会创建 Cell、运行代码、写 Markdown 和画图。
- 理解 Jupyter Notebook 是什么、适合做什么
- 安装和启动 Jupyter Notebook
- 掌握 Cell 类型和基本操作
- 熟悉最常用的快捷键
- 学会使用魔法命令
- 理解 Notebook 和
.py文件的区别
Jupyter Notebook 是什么?
Section titled “Jupyter Notebook 是什么?”Jupyter Notebook 是一种交互式编程环境——你可以写一段代码、立刻运行、看到结果,然后再写下一段。代码、输出、图表、文字说明全部混在一个文件里。
它长什么样?
Section titled “它长什么样?”想象一个笔记本,每一页(叫做 Cell)可以是:
- 一段可以运行的代码
- 一段 Markdown 文字(标题、说明、公式)
- 代码运行后的输出(数字、表格、图表)
它们按顺序排列在一起,形成一个”可运行的文档”。
什么场景最适合用 Jupyter?
Section titled “什么场景最适合用 Jupyter?”| 场景 | 用 Jupyter | 用 .py 文件 |
|---|---|---|
| 探索性数据分析(EDA) | ✅ 最佳 | ❌ |
| 画图和可视化 | ✅ 图直接显示在下方 | ❌ 需要弹窗 |
| 学习和实验 | ✅ 逐步运行,边学边试 | ❌ |
| 展示成果(给老板看) | ✅ 代码+图+文字一体 | ❌ |
| 正式项目代码 | ❌ | ✅ 更好维护 |
| 调试复杂程序 | ❌ | ✅ |
| 团队协作 | ❌ 合并冲突多 | ✅ |
一句话:学习和实验用 Jupyter,写正式代码用 .py 文件。 本课程的前几个阶段会大量使用 Jupyter。
确保你在正确的 conda 环境里:
conda activate ai-course
# 安装 Jupyter Notebookpip install jupyter
# (可选)安装 JupyterLab——Jupyter 的增强版,界面更现代pip install jupyterlab# 启动 Jupyter Notebook(经典版)jupyter notebook
# 或启动 JupyterLab(推荐)jupyter lab运行后,终端会输出类似这样的信息:
[I 10:00:00 NotebookApp] Serving notebooks from local directory: /Users/zhangsan[I 10:00:00 NotebookApp] http://localhost:8888/?token=abc123...浏览器会自动打开,你就能看到 Jupyter 的界面了。
创建新 Notebook
Section titled “创建新 Notebook”在 Jupyter 界面里:
- 点击右上角的 New → Python 3(经典版)
- 或点击左侧的 + 号,选择 Python 3 Notebook(JupyterLab)
一个新的空白 Notebook 就创建好了。
Cell(单元格)基础
Section titled “Cell(单元格)基础”Notebook 由一个一个的 Cell 组成。每个 Cell 有两种类型:
Code Cell(代码单元格)
Section titled “Code Cell(代码单元格)”用来写和运行 Python 代码:
# Cell 1:定义变量name = "AI 全栈学习"year = 2026按 Shift + Enter 运行。
# Cell 2:使用上面定义的变量print(f"欢迎来到 {name} 课程!现在是 {year} 年。")输出:
欢迎来到 AI 全栈学习教程!现在是 2026 年。重要特性: Cell 之间共享变量。你在 Cell 1 里定义的 name,在 Cell 2 里可以直接用。
Markdown Cell(文字单元格)
Section titled “Markdown Cell(文字单元格)”用来写文字说明、标题、列表、公式等。切换方法:
- 选中 Cell,按
M键切换为 Markdown - 按
Y键切换回 Code
Markdown Cell 里可以写:
## 第一步:加载数据
我们使用 **Iris 数据集**进行探索性分析。
- 150 个样本- 4 个特征- 3 个类别
数学公式:$y = wx + b$运行后会渲染成漂亮的格式化文字。
案例:一个典型的数据分析 Notebook 结构
Section titled “案例:一个典型的数据分析 Notebook 结构”| 部分 | Cell 类型 | 内容 |
|---|---|---|
| 标题和目标 | Markdown | Iris 数据集探索性分析 |
| 导入库 | Code | numpy、pandas、matplotlib |
| 加载数据 | Code | load_iris()、构造 df、用 df.head() 预览 |
| 数据概览 | Code + 输出 | df.describe() 和统计摘要表 |
| 可视化 | Code + 输出 | 带标签和标题的散点图 |
| 结论 | Markdown | 哪些特征最能区分品种 |
代码、图表、文字解释,全在一个文件里。这就是 Jupyter 的魅力。
Kernel 状态:Notebook Bug 的隐藏来源
Section titled “Kernel 状态:Notebook Bug 的隐藏来源”Notebook 看起来像文档,但运行起来更像一个小程序。Kernel 是 Notebook 背后的 Python 进程,它会记住你前面创建过的变量,即使创建变量的 Cell 已经被移动、删除,或者不在当前视线里。
flowchart LR A["Cell 1:导入库"] --> B["Cell 2:加载数据"] B --> C["Cell 3:创建变量"] C --> D["Cell 4:画图或训练"] K["Kernel 记忆"] -. "保存变量" .- C K -. "后续 Cell 可以继续使用" .- D这很强大,但也容易坑新手:Notebook 能跑通,可能只是因为你刚才按了某个特殊顺序运行 Cell,并不代表这个文件从上到下是完整可复现的。
可靠 Notebook 规则
Section titled “可靠 Notebook 规则”在你相信一个 Notebook、分享给别人、或者把它整理成教程前,请做一次检查:
- 保存文件。
- 选择 Restart Kernel and Run All Cells。
- 如果中途报错,就继续修,直到它能从第一个 Cell 到最后一个 Cell 自动跑完。
把 import、配置、数据加载放在前面;把实验和图表放在后面。你可以把它理解成 Notebook 版的“项目还能不能完整构建”。
Jupyter 有两种模式:
- 命令模式(Cell 外框是蓝色):按
Esc进入,用于管理 Cell - 编辑模式(Cell 外框是绿色):按
Enter进入,用于编辑内容
命令模式快捷键(按 Esc 后使用)
Section titled “命令模式快捷键(按 Esc 后使用)”| 快捷键 | 操作 |
|---|---|
Shift + Enter | 运行当前 Cell 并跳到下一个(最最最常用) |
Ctrl + Enter | 运行当前 Cell 但不跳转 |
A | 在上方插入新 Cell |
B | 在下方插入新 Cell |
DD(连按两次 D) | 删除当前 Cell |
M | 把当前 Cell 改为 Markdown |
Y | 把当前 Cell 改为 Code |
Z | 撤销删除 Cell |
↑ / ↓ | 上下移动选中不同的 Cell |
编辑模式快捷键(按 Enter 后使用)
Section titled “编辑模式快捷键(按 Enter 后使用)”| 快捷键 | 操作 |
|---|---|
Shift + Enter | 运行并跳到下一个 |
Tab | 代码补全 |
Shift + Tab | 显示函数文档 |
Ctrl + / | 注释/取消注释 |
Ctrl + Z | 撤销 |
实操:练习快捷键
Section titled “实操:练习快捷键”创建一个新 Notebook,然后:
- 在第一个 Cell 里输入
print("Cell 1"),按Shift + Enter运行 - 按
B在下方新建一个 Cell - 输入
print("Cell 2"),按Ctrl + Enter运行(注意光标不跳转) - 按
Esc回到命令模式 - 按
A在上方插入 Cell - 按
M切换为 Markdown,输入# 我的标题,按Shift + Enter渲染 - 选中一个不需要的 Cell,按
DD删除
反复练习几次,很快就能形成肌肉记忆。
Jupyter 提供了一些以 % 或 ! 开头的特殊命令,叫做”魔法命令”。它们可以做到普通 Python 代码做不到的事。
! 命令:在 Cell 里执行终端命令
Section titled “! 命令:在 Cell 里执行终端命令”# 安装包(不需要切到终端)!pip install seaborn
# 查看当前目录!ls
# 查看 Python 版本!python --version
# 下载文件!wget https://example.com/data.csv%timeit:测量代码运行时间
Section titled “%timeit:测量代码运行时间”import numpy as np
# 测量一行代码的运行时间%timeit np.random.rand(1000, 1000)# 输出: 5.23 ms ± 128 µs per loop%%timeit# 测量整个 Cell 的运行时间(注意是两个 %)data = np.random.rand(1000, 1000)result = np.dot(data, data.T)# 输出: 15.6 ms ± 1.2 ms per loop%matplotlib inline:让图表显示在 Notebook 里
Section titled “%matplotlib inline:让图表显示在 Notebook 里”%matplotlib inlineimport matplotlib.pyplot as pltimport numpy as np
x = np.linspace(0, 10, 100)plt.plot(x, np.sin(x))plt.title("正弦函数")plt.show()# 图表直接显示在 Cell 下方%who:查看当前定义的变量
Section titled “%who:查看当前定义的变量”name = "张三"age = 25scores = [90, 85, 92]
%who# 输出: age name scores
%whos# 输出变量的详细信息(类型、值)常用魔法命令速查
Section titled “常用魔法命令速查”| 命令 | 用途 |
|---|---|
!命令 | 执行终端命令 |
%timeit | 测量一行代码运行时间 |
%%timeit | 测量整个 Cell 运行时间 |
%matplotlib inline | 图表内联显示 |
%who / %whos | 查看当前变量 |
%reset | 清除所有变量(重新开始) |
%pwd | 显示当前目录 |
%history | 显示输入历史 |
Notebook vs .py 文件
Section titled “Notebook vs .py 文件”什么时候用 Notebook?
Section titled “什么时候用 Notebook?”- 数据分析、EDA
- 学习新库、做实验
- 画图和可视化
- 给别人展示(如 Kaggle Notebook)
- 写教程
什么时候用 .py 文件?
Section titled “什么时候用 .py 文件?”- 正式项目代码(模型定义、训练脚本、API 服务)
- 需要被其他文件 import 的模块
- 需要在命令行用参数运行的脚本
- 团队协作的代码
一个典型的 AI 项目,两者配合使用
Section titled “一个典型的 AI 项目,两者配合使用”| 区域 | 典型文件 | 用途 |
|---|---|---|
| 探索 | notebooks/01_eda.ipynb、02_experiment.ipynb | 尝试想法、查看数据 |
| 源代码 | src/model.py、train.py、evaluate.py、utils.py | 保存可复用项目代码 |
| 数据和模型 | data/、models/ | 存放输入和生成产物 |
| 复现说明 | requirements.txt、README.md | 说明怎样安装和重跑 |
先在 Notebook 里做实验,确定方案后把代码整理到 .py 文件中——这是 AI 工程师的标准工作流。
在 Notebook 里调用 .py 文件的代码
Section titled “在 Notebook 里调用 .py 文件的代码”# 在 Notebook 中 import 自己写的模块import syssys.path.append('../src') # 把 src 目录加入路径
from model import SimpleCNNfrom utils import accuracy
model = SimpleCNN()print(f"模型参数量: {sum(p.numel() for p in model.parameters())}")创建一个 Notebook,完成以下练习:
Cell 1(Markdown):
# 我的第一个 Jupyter Notebook今天的日期:2026 年 X 月 X 日Cell 2(Code):
# 基本运算import mathprint(f"圆周率: {math.pi:.10f}")print(f"自然对数底: {math.e:.10f}")print(f"10! = {math.factorial(10)}")Cell 3(Code):
# 列表操作fruits = ["苹果", "香蕉", "橙子", "葡萄", "西瓜"]for i, fruit in enumerate(fruits, 1): print(f"第{i}种水果: {fruit}")Cell 4(Code):
# 简单可视化%matplotlib inlineimport matplotlib.pyplot as pltimport numpy as np
x = np.linspace(0, 2 * np.pi, 100)fig, axes = plt.subplots(1, 2, figsize=(12, 4))
axes[0].plot(x, np.sin(x), color='blue')axes[0].set_title('sin(x)')
axes[1].plot(x, np.cos(x), color='red')axes[1].set_title('cos(x)')
plt.tight_layout()plt.show()Cell 5(Code):
# 测量性能%timeit sum(range(100000))%timeit np.sum(np.arange(100000))# 对比 Python 原生 sum 和 NumPy sum 的速度差异Cell 6(Markdown):
## 留下的证据
学完这一页,至少保留这张证据卡:
```text环境:Python/Node/编辑器/Notebook 版本以及选定的解释器/内核验证记录:证明设置可用的一条命令或一个 Notebook 单元项目文件夹:依赖、脚本和 notebooks 所在位置失败检查:错误的解释器、缺少包、过时的 kernel,或编辑器路径不匹配期望产出:设置截图或终端输出加一条回退说明```
## 小结- 学会了创建和运行 Cell- 学会了在 Notebook 里画图- 发现 NumPy 比原生 Python 快很多(这就是 3 数据分析与可视化会学 NumPy 的原因!)1 开发者工具基础自检
Section titled “1 开发者工具基础自检”恭喜你完成了整个 1 开发者工具基础!回顾一下你学会了什么:
- 终端: 能用命令行导航、操作文件、使用管道和重定向
- Git: 能创建仓库、提交代码、推送到 GitHub、使用分支
- Python 环境: 能用 Miniconda 创建和管理虚拟环境
- VS Code: 能用 VS Code 写代码、调试、使用快捷键
- Jupyter: 能创建 Notebook、运行代码、画图、写文档
检查思路与讲解
- Notebook 的 kernel 应该选择本课程环境,否则 import 结果可能和终端不一致。
- 运行所有 Cell 后,应该能看到数值输出、DataFrame 预览、折线图和
%timeit对比。 - 图像不必完全一样,但标题、坐标趋势和代码逻辑要对应。
%timeit的具体时间会因电脑不同而变化,重点是观察 NumPy 向量化通常更快。- 修改环境或安装新包后,如果 Notebook 没反应,先 Restart Kernel,再 Run All。
- 最终自检的合格证据是一份能从头运行的 notebook,而不是只截一张成功截图。