跳转到内容

1.3.3 Jupyter Notebook

Jupyter Cell 与 Kernel 状态图

这一节介绍数据分析和 AI 实验最常用的交互式环境。你会理解 Notebook 适合探索、实验和展示,.py 文件更适合正式项目代码,并学会创建 Cell、运行代码、写 Markdown 和画图。

  • 理解 Jupyter Notebook 是什么、适合做什么
  • 安装和启动 Jupyter Notebook
  • 掌握 Cell 类型和基本操作
  • 熟悉最常用的快捷键
  • 学会使用魔法命令
  • 理解 Notebook 和 .py 文件的区别

Jupyter Notebook 是一种交互式编程环境——你可以写一段代码、立刻运行、看到结果,然后再写下一段。代码、输出、图表、文字说明全部混在一个文件里。

想象一个笔记本,每一页(叫做 Cell)可以是:

  • 一段可以运行的代码
  • 一段 Markdown 文字(标题、说明、公式)
  • 代码运行后的输出(数字、表格、图表)

它们按顺序排列在一起,形成一个”可运行的文档”。

场景用 Jupyter用 .py 文件
探索性数据分析(EDA)✅ 最佳
画图和可视化✅ 图直接显示在下方❌ 需要弹窗
学习和实验✅ 逐步运行,边学边试
展示成果(给老板看)✅ 代码+图+文字一体
正式项目代码✅ 更好维护
调试复杂程序
团队协作❌ 合并冲突多

一句话:学习和实验用 Jupyter,写正式代码用 .py 文件。 本课程的前几个阶段会大量使用 Jupyter。


确保你在正确的 conda 环境里:

Terminal window
conda activate ai-course
# 安装 Jupyter Notebook
pip install jupyter
# (可选)安装 JupyterLab——Jupyter 的增强版,界面更现代
pip install jupyterlab
Terminal window
# 启动 Jupyter Notebook(经典版)
jupyter notebook
# 或启动 JupyterLab(推荐)
jupyter lab

运行后,终端会输出类似这样的信息:

Terminal window
[I 10:00:00 NotebookApp] Serving notebooks from local directory: /Users/zhangsan
[I 10:00:00 NotebookApp] http://localhost:8888/?token=abc123...

浏览器会自动打开,你就能看到 Jupyter 的界面了。

在 Jupyter 界面里:

  1. 点击右上角的 New → Python 3(经典版)
  2. 或点击左侧的 + 号,选择 Python 3 Notebook(JupyterLab)

一个新的空白 Notebook 就创建好了。


Notebook 由一个一个的 Cell 组成。每个 Cell 有两种类型:

用来写和运行 Python 代码:

# Cell 1:定义变量
name = "AI 全栈学习"
year = 2026

Shift + Enter 运行。

# Cell 2:使用上面定义的变量
print(f"欢迎来到 {name} 课程!现在是 {year} 年。")

输出:

欢迎来到 AI 全栈学习教程!现在是 2026 年。

重要特性: Cell 之间共享变量。你在 Cell 1 里定义的 name,在 Cell 2 里可以直接用。

用来写文字说明、标题、列表、公式等。切换方法:

  • 选中 Cell,按 M 键切换为 Markdown
  • Y 键切换回 Code

Markdown Cell 里可以写:

## 第一步:加载数据
我们使用 **Iris 数据集**进行探索性分析。
- 150 个样本
- 4 个特征
- 3 个类别
数学公式:$y = wx + b$

运行后会渲染成漂亮的格式化文字。

案例:一个典型的数据分析 Notebook 结构

Section titled “案例:一个典型的数据分析 Notebook 结构”
部分Cell 类型内容
标题和目标MarkdownIris 数据集探索性分析
导入库Codenumpypandasmatplotlib
加载数据Codeload_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、分享给别人、或者把它整理成教程前,请做一次检查:

  1. 保存文件。
  2. 选择 Restart Kernel and Run All Cells
  3. 如果中途报错,就继续修,直到它能从第一个 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撤销

创建一个新 Notebook,然后:

  1. 在第一个 Cell 里输入 print("Cell 1"),按 Shift + Enter 运行
  2. B 在下方新建一个 Cell
  3. 输入 print("Cell 2"),按 Ctrl + Enter 运行(注意光标不跳转)
  4. Esc 回到命令模式
  5. A 在上方插入 Cell
  6. M 切换为 Markdown,输入 # 我的标题,按 Shift + Enter 渲染
  7. 选中一个不需要的 Cell,按 DD 删除

反复练习几次,很快就能形成肌肉记忆。


Jupyter 提供了一些以 %! 开头的特殊命令,叫做”魔法命令”。它们可以做到普通 Python 代码做不到的事。

# 安装包(不需要切到终端)
!pip install seaborn
# 查看当前目录
!ls
# 查看 Python 版本
!python --version
# 下载文件
!wget https://example.com/data.csv
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 inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))
plt.title("正弦函数")
plt.show()
# 图表直接显示在 Cell 下方
name = "张三"
age = 25
scores = [90, 85, 92]
%who
# 输出: age name scores
%whos
# 输出变量的详细信息(类型、值)
命令用途
!命令执行终端命令
%timeit测量一行代码运行时间
%%timeit测量整个 Cell 运行时间
%matplotlib inline图表内联显示
%who / %whos查看当前变量
%reset清除所有变量(重新开始)
%pwd显示当前目录
%history显示输入历史

  • 数据分析、EDA
  • 学习新库、做实验
  • 画图和可视化
  • 给别人展示(如 Kaggle Notebook)
  • 写教程
  • 正式项目代码(模型定义、训练脚本、API 服务)
  • 需要被其他文件 import 的模块
  • 需要在命令行用参数运行的脚本
  • 团队协作的代码

一个典型的 AI 项目,两者配合使用

Section titled “一个典型的 AI 项目,两者配合使用”
区域典型文件用途
探索notebooks/01_eda.ipynb02_experiment.ipynb尝试想法、查看数据
源代码src/model.pytrain.pyevaluate.pyutils.py保存可复用项目代码
数据和模型data/models/存放输入和生成产物
复现说明requirements.txtREADME.md说明怎样安装和重跑

先在 Notebook 里做实验,确定方案后把代码整理到 .py 文件中——这是 AI 工程师的标准工作流。

在 Notebook 里调用 .py 文件的代码

Section titled “在 Notebook 里调用 .py 文件的代码”
# 在 Notebook 中 import 自己写的模块
import sys
sys.path.append('../src') # 把 src 目录加入路径
from model import SimpleCNN
from 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 math
print(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 inline
import matplotlib.pyplot as plt
import 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 开发者工具基础!回顾一下你学会了什么:

  • 终端: 能用命令行导航、操作文件、使用管道和重定向
  • Git: 能创建仓库、提交代码、推送到 GitHub、使用分支
  • Python 环境: 能用 Miniconda 创建和管理虚拟环境
  • VS Code: 能用 VS Code 写代码、调试、使用快捷键
  • Jupyter: 能创建 Notebook、运行代码、画图、写文档
检查思路与讲解
  1. Notebook 的 kernel 应该选择本课程环境,否则 import 结果可能和终端不一致。
  2. 运行所有 Cell 后,应该能看到数值输出、DataFrame 预览、折线图和 %timeit 对比。
  3. 图像不必完全一样,但标题、坐标趋势和代码逻辑要对应。
  4. %timeit 的具体时间会因电脑不同而变化,重点是观察 NumPy 向量化通常更快。
  5. 修改环境或安装新包后,如果 Notebook 没反应,先 Restart Kernel,再 Run All。
  6. 最终自检的合格证据是一份能从头运行的 notebook,而不是只截一张成功截图。