Jupyter Notebook 入门教程
目录
什么是 Jupyter
Jupyter Notebook 是一个开源的 Web 应用程序,允许您创建和共享包含实时代码、方程式、可视化和叙述文本的文档。
核心特点
- 交互式编程:可以逐段执行代码并立即查看结果
- 富文本支持:支持 Markdown、LaTeX 公式、图片、视频等
- 多语言支持:支持 Python、R、Julia 等 40+ 种编程语言
- 数据可视化:直接在内联显示图表和可视化结果
- 易于分享:可以导出为 HTML、PDF、Markdown 等格式
- 广泛应用:数据清洗、统计分析、机器学习、教学演示等
Jupyter 生态系统
- Jupyter Notebook:经典的网页版笔记本
- JupyterLab:下一代用户界面,更强大的 IDE 体验
- JupyterHub:多用户服务器版本
- nbconvert:笔记本转换工具
- Voilà:将笔记本转换为交互式 Web 应用
安装 Jupyter
方法一:通过 Anaconda 安装(推荐)
如果您已经安装了 Anaconda,Jupyter 已经预装好了!
# 验证安装
jupyter --version
# 如果没有安装,使用 conda 安装
conda install jupyter
方法二:通过 pip 安装
# 安装 Jupyter Notebook
pip install jupyter
# 或者安装 JupyterLab(推荐)
pip install jupyterlab
验证安装
# 查看版本
jupyter --version
# 查看已安装的内核
jupyter kernelspec list
启动和界面介绍
启动 Jupyter
# 启动 Jupyter Notebook
jupyter notebook
# 启动 JupyterLab(推荐)
jupyter lab
# 指定端口启动
jupyter notebook --port 8888
# 启动时不自动打开浏览器
jupyter notebook --no-browser
# 指定根目录
jupyter notebook --notebook-dir=/path/to/directory
启动后,浏览器会自动打开 Jupyter 界面,通常地址是 http://localhost:8888
界面介绍
Jupyter Notebook 界面
┌─────────────────────────────────────┐
│ Jupyter Logo | File | Edit | ... │ ← 菜单栏
├─────────────────────────────────────┤
│ Save | + Code | + Markdown | Run │ ← 工具栏
├─────────────────────────────────────┤
│ In [1]: print("Hello") │ ← 代码单元格
│ Hello │ (可执行代码)
├─────────────────────────────────────┤
│ # This is a title │ ← Markdown 单元格
│ Some text here... │ (富文本)
└─────────────────────────────────────┘
JupyterLab 界面
JupyterLab 提供更现代化的 IDE 体验:
- 左侧文件浏览器
- 中间主工作区(支持多标签页)
- 右侧检查器面板
- 底部终端和输出面板
创建新笔记本
- 在 Jupyter 主页点击右上角 "New" 按钮
- 选择 Python 3(或其他内核)
- 开始编写代码!
基本操作
单元格操作
两种模式
Jupyter 有两种操作模式:
-
命令模式(按
Esc进入)- 单元格边框为蓝色
- 可以使用键盘快捷键操作单元格
-
编辑模式(按
Enter进入)- 单元格边框为绿色
- 可以编辑单元格内容
基本操作流程
# 1. 在单元格中输入代码
print("Hello, Jupyter!")
# 2. 按 Shift + Enter 运行单元格
# 3. 查看输出结果
运行单元格
- Shift + Enter:运行当前单元格,选中下一个单元格
- Ctrl + Enter:运行当前单元格,保持选中当前单元格
- Alt + Enter:运行当前单元格,在下方插入新单元格
保存和重命名
- Ctrl + S:保存笔记本
- 点击文件名可以重命名
- 文件扩展名为
.ipynb(IPython Notebook)
单元格类型
1. Code 单元格(代码单元格)
用于编写和执行代码:
# 导入库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 基本计算
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 显示结果
print(f"x 的形状: {x.shape}")
print(f"y 的前5个值: {y[:5]}")
2. Markdown 单元格
用于编写文档说明,支持 Markdown 语法:
# 一级标题
## 二级标题
### 三级标题
**粗体文本**
_斜体文本_
- 无序列表项 1
- 无序列表项 2
1. 有序列表项 1
2. 有序列表项 2
[链接文本](https://jupyter.org)

> 引用文本
`行内代码`
```python
# 代码块
def hello():
print("Hello!")
```
### 3. Raw NBConvert 单元格
用于需要原样输出的文本,不会被执行或渲染。
### 切换单元格类型
- 命令模式下按:
- `Y`:切换到 Code 单元格
- `M`:切换到 Markdown 单元格
- `R`:切换到 Raw 单元格
---
## 魔法命令
Jupyter 提供了特殊的"魔法命令",以 `%` 或 `%%` 开头。
### 行魔法命令(%)
作用于单行:
```python
# 查看当前工作目录
%pwd
# 列出目录内容
%ls
# 查看变量
%who
%whos
# 计时代码执行时间
%time sum(range(1000))
# 精确计时(多次运行取平均)
%timeit sum(range(1000))
# 查看历史命令
%history
# 加载外部文件
%load script.py
# 运行外部脚本
%run script.py
# 设置 matplotlib 图形内联显示
%matplotlib inline
# 查看魔法命令列表
%lsmagic
单元格魔法命令(%%)
作用于整个单元格:
# 计时整个单元格
%%time
import time
time.sleep(1)
print("Done")
# 精确计时整个单元格
%%timeit
sum(range(10000))
# 写入文件
%%writefile test.py
print("Hello from file!")
# HTML 渲染
%%html
<b>Bold text</b>
# JavaScript 执行
%%javascript
console.log("Hello from JavaScript!")
# Bash 命令
%%bash
echo "Hello from Bash"
ls -la
# Python 2 代码(如果安装了 Python 2 内核)
%%python2
print "Python 2 syntax"
常用魔法命令速查
| 命令 | 说明 |
|---|---|
%pwd | 显示当前工作目录 |
%ls | 列出目录内容 |
%cd | 切换目录 |
%who / %whos | 显示变量信息 |
%time | 测量代码执行时间 |
%timeit | 多次运行测量平均时间 |
%matplotlib inline | 内联显示图表 |
%load | 加载外部文件到单元格 |
%run | 运行外部 Python 脚本 |
%history | 查看命令历史 |
%%writefile | 将单元格内容写入文件 |
%%capture | 捕获输出 |
快捷键大全
掌握快捷键可以大幅提升效率!
命令模式快捷键(按 Esc 进入)
单元格操作
| 快捷键 | 功能 |
|---|---|
Enter | 进入编辑模式 |
Shift + Enter | 运行单元格,选中下一个 |
Ctrl + Enter | 运行单元格,保持选中 |
Alt + Enter | 运行单元格,下方插入新单元格 |
Y | 切换到代码单元格 |
M | 切换到 Markdown 单元格 |
R | 切换到 Raw 单元格 |
1-6 | 设置为对应级别的标题(Markdown 模式) |
单元格管理
| 快捷键 | 功能 |
|---|---|
A | 在上方插入单元格 |
B | 在下方插入单元格 |
D, D(按两次 D) | 删除单元格 |
Z | 撤销删除 |
C | 复制单元格 |
X | 剪切单元格 |
V | 粘贴单元格 |
Shift + V | 粘贴到上方 |
其他操作
| 快捷键 | 功能 |
|---|---|
S | 保存 |
L | 切换行号显示 |
O | 切换输出显示/隐藏 |
Shift + L | 切换所有单元格行号 |
H | 显示快捷键帮助 |
I, I(按两次 I) | 中断内核 |
0, 0(按两次 0) | 重启内核 |
编辑模式快捷键(按 Enter 进入)
| 快捷键 | 功能 |
|---|---|
Tab | 代码补全或缩进 |
Shift + Tab | 显示函数文档 |
Ctrl + ] | 缩进 |
Ctrl + [ | 取消缩进 |
Ctrl + A | 全选 |
Ctrl + Z | 撤销 |
Ctrl + Shift + Z | 重做 |
Ctrl + / | 注释/取消注释 |
Ctrl + D | 删除整行 |
Ctrl + Shift + - | 分割单元格 |
高级功能
1. 数据可视化
Matplotlib 集成
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘制图形
plt.figure(figsize=(10, 6))
plt.plot(x, y, 'b-', linewidth=2, label='sin(x)')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.title('Sine Wave')
plt.legend()
plt.grid(True)
plt.show()
交互式图表
# 使用交互式后端
%matplotlib notebook
# 或使用 ipympl
%matplotlib widget
2. 小部件(Widgets)
创建交互式控件:
from ipywidgets import interact, interactive, fixed
import ipywidgets as widgets
# 简单交互
@interact(x=(0, 10))
def square(x):
return x ** 2
# 滑块控件
slider = widgets.IntSlider(value=5, min=0, max=10, step=1, description='Value:')
display(slider)
# 文本输入
text = widgets.Text(value='Hello', description='Input:')
display(text)
# 按钮
button = widgets.Button(description='Click me!')
display(button)
def on_button_clicked(b):
print("Button clicked!")
button.on_click(on_button_clicked)
3. 表格显示
import pandas as pd
# 创建 DataFrame
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['Beijing', 'Shanghai', 'Guangzhou']
})
# 美观显示表格
df
# 或使用 display
from IPython.display import display
display(df)
4. 图片和多媒体
from IPython.display import Image, HTML, Video, YouTubeVideo
# 显示图片
Image(filename='image.png', width=300)
# 显示 HTML
HTML('<h1 style="color:blue;">Hello!</h1>')
# 嵌入 YouTube 视频
YouTubeVideo('dQw4w9WgXcQ', width=600, height=400)
5. 进度条
from tqdm.notebook import tqdm
import time
# 使用 tqdm 进度条
for i in tqdm(range(100)):
time.sleep(0.01)
6. 并行计算
from ipyparallel import Client
# 创建客户端
rc = Client()
view = rc[:]
# 并行执行
result = view.map_sync(lambda x: x**2, range(10))
print(result)
7. 调试
# 启用自动调试
%pdb on
# 手动设置断点
import pdb; pdb.set_trace()
# 或使用 IPython 的 set_trace
from IPython.core.debugger import set_trace
set_trace()
8. 扩展插件
安装 nbextensions:
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
常用扩展:
- Table of Contents:自动生成目录
- Variable Inspector:变量检查器
- ExecuteTime:显示执行时间
- Collapsible Headings:可折叠标题
- Codefolding:代码折叠
最佳实践
1. 组织笔记本结构
# 项目标题
## 1. 导入库和数据加载
[代码单元格]
## 2. 数据探索
[代码单元格]
[Markdown 说明]
## 3. 数据预处理
[代码单元格]
## 4. 模型训练
[代码单元格]
## 5. 结果分析
[代码单元格]
[可视化]
## 6. 结论
[Markdown 总结]
2. 代码规范
# ✅ 好的做法
# 每个单元格完成一个逻辑任务
# 添加必要的注释
import pandas as pd
# 加载数据
df = pd.read_csv('data.csv')
# 查看基本信息
df.head()
df.info()
# ❌ 避免的做法
# 不要在单个单元格中放置过多代码
# 不要依赖单元格的执行顺序
3. 重启并运行所有单元格
定期测试笔记本的可重现性:
- 菜单:Kernel → Restart & Run All
- 确保所有单元格按顺序执行无误
- 这是分享前的必要步骤
4. 清除输出后再提交
# 使用 nbconvert 清除输出
jupyter nbconvert --clear-output --inplace notebook.ipynb
# 或在 Jupyter 中
# Edit → Clear All Output
5. 版本控制
# 使用 nbdime 进行 git 差异比较
pip install nbdime
nbdime config-git --enable --global
# 正常 git 操作
git add notebook.ipynb
git commit -m "Update analysis"
6. 导出和分享
# 导出为 HTML
jupyter nbconvert --to html notebook.ipynb
# 导出为 PDF(需要安装 LaTeX)
jupyter nbconvert --to pdf notebook.ipynb
# 导出为 Markdown
jupyter nbconvert --to markdown notebook.ipynb
# 导出为 Python 脚本
jupyter nbconvert --to python notebook.ipynb
# 导出为幻灯片
jupyter nbconvert --to slides notebook.ipynb --post serve
7. 性能优化
# 使用 %timeit 优化代码
%timeit [x**2 for x in range(1000)]
%timeit [x*x for x in range(1000)]
# 清理不需要的变量
del large_variable
# 垃圾回收
import gc
gc.collect()
# 监控内存
%memit some_function()
8. 使用虚拟环境
# 在 conda 环境中安装 Jupyter
conda activate myenv
conda install jupyter
# 注册环境为 Jupyter 内核
python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"
# 在 Jupyter 中切换内核
# Kernel → Change kernel → Python (myenv)
常见问题
问题 1:内核无法启动
解决方案:
# 重新安装 ipykernel
pip install --upgrade ipykernel
# 重新注册内核
python -m ipykernel install --user
# 检查内核列表
jupyter kernelspec list
问题 2:端口被占用
解决方案:
# 指定其他端口
jupyter notebook --port 8889
# 或查找并关闭占用端口的进程
lsof -i :8888 # macOS/Linux
netstat -ano | findstr :8888 # Windows
问题 3:Matplotlib 图形不显示
解决方案:
# 确保使用了正确的魔法命令
%matplotlib inline
# 或者在每个绘图后调用
plt.show()
问题 4:内存不足
解决方案:
# 清理变量
del variable_name
# 垃圾回收
import gc
gc.collect()
# 重启内核
# Kernel → Restart
# 使用生成器而非列表
# 差:large_list = [x for x in range(10000000)]
# 好:large_gen = (x for x in range(10000000))
问题 5:自动补全不工作
解决方案:
# 安装 jedi
pip install jedi
# 或在 Jupyter 配置中禁用 jedi
# 创建 ~/.jupyter/jupyter_notebook_config.py
c.Completer.use_jedi = False
问题 6:中文显示问题
解决方案:
# Matplotlib 中文显示
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # macOS
plt.rcParams['axes.unicode_minus'] = False
# Pandas 中文显示
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
问题 7:JupyterLab 扩展安装失败
解决方案:
# 确保 nodejs 已安装
conda install nodejs
# 安装扩展
jupyter labextension install @jupyter-widgets/jupyterlab-manager
# 重建 JupyterLab
jupyter lab build
JupyterLab vs Jupyter Notebook
| 特性 | Jupyter Notebook | JupyterLab |
|---|---|---|
| 界面 | 简洁,单一笔记本 | 现代化,IDE 风格 |
| 多文件 | 不支持 | 支持多标签页 |
| 文件浏览器 | 基础 | 增强版 |
| 终端 | 需要单独打开 | 内置 |
| 扩展性 | 有限 | 强大 |
| 学习曲线 | 低 | 中等 |
| 推荐场景 | 简单分析 | 复杂项目 |
建议:新项目优先使用 JupyterLab,它提供了更好的开发体验。
总结
Jupyter 是数据科学和机器学习的利器,掌握以下要点:
核心技能
- ✅ 基本操作:单元格的创建、编辑、运行
- ✅ 快捷键:熟练使用命令模式和编辑模式快捷键
- ✅ 魔法命令:利用魔法命令提高效率
- ✅ Markdown:编写清晰的文档说明
- ✅ 可视化:集成 Matplotlib 等可视化库
进阶技巧
- 使用 Widgets 创建交互式应用
- 利用扩展插件增强功能
- 遵循最佳实践组织代码
- 定期重启并运行所有单元格测试
- 使用版本控制管理笔记本
学习资源
- 官方文档:jupyter.org/documentati…
- JupyterLab 文档:jupyterlab.readthedocs.io/
- Awesome Jupyter:github.com/markusschan…
下一步:结合 NumPy 和 Pandas 进行实际数据分析练习!🚀