Jupyter Notebook 入门教程

28 阅读11分钟

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 体验:

  • 左侧文件浏览器
  • 中间主工作区(支持多标签页)
  • 右侧检查器面板
  • 底部终端和输出面板

创建新笔记本

  1. 在 Jupyter 主页点击右上角 "New" 按钮
  2. 选择 Python 3(或其他内核)
  3. 开始编写代码!

基本操作

单元格操作

两种模式

Jupyter 有两种操作模式:

  1. 命令模式(按 Esc 进入)

    • 单元格边框为蓝色
    • 可以使用键盘快捷键操作单元格
  2. 编辑模式(按 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)

![图片描述](image.png)

> 引用文本

`行内代码`

```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. 重启并运行所有单元格

定期测试笔记本的可重现性:

  1. 菜单:Kernel → Restart & Run All
  2. 确保所有单元格按顺序执行无误
  3. 这是分享前的必要步骤

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 NotebookJupyterLab
界面简洁,单一笔记本现代化,IDE 风格
多文件不支持支持多标签页
文件浏览器基础增强版
终端需要单独打开内置
扩展性有限强大
学习曲线中等
推荐场景简单分析复杂项目

建议:新项目优先使用 JupyterLab,它提供了更好的开发体验。


总结

Jupyter 是数据科学和机器学习的利器,掌握以下要点:

核心技能

  1. 基本操作:单元格的创建、编辑、运行
  2. 快捷键:熟练使用命令模式和编辑模式快捷键
  3. 魔法命令:利用魔法命令提高效率
  4. Markdown:编写清晰的文档说明
  5. 可视化:集成 Matplotlib 等可视化库

进阶技巧

  • 使用 Widgets 创建交互式应用
  • 利用扩展插件增强功能
  • 遵循最佳实践组织代码
  • 定期重启并运行所有单元格测试
  • 使用版本控制管理笔记本

学习资源


下一步:结合 NumPy 和 Pandas 进行实际数据分析练习!🚀