前置知识: Python

Python与Jupyter

00:00
7 min Beginner 2026/6/14

Jupyter Notebook与数据分析

什么是 Jupyter

Jupyter Notebook 是一个交互式的编程环境,你可以在网页中编写和运行代码,还能在代码之间插入文字说明、公式和图表。它的名字来源于三种编程语言:Julia、Python 和 R。

Jupyter 是数据科学和机器学习领域最常用的工具。数据分析师用它来探索数据、可视化结果,研究人员用它来记录实验过程,教师用它来制作交互式教学材料。它的核心优势是”所见即所得”——代码的运行结果直接显示在代码下方,包括表格、图表等。

基础概念

Notebook

Notebook 是 Jupyter 中的文档文件,扩展名为 .ipynb。一个 Notebook 由多个单元格(Cell)组成,每个单元格可以包含代码或文字。

单元格(Cell)

Notebook 中的每个单元格有两种类型:

  • 代码单元格(Code Cell):包含可执行的 Python 代码,运行后结果显示在单元格下方
  • Markdown 单元格(Markdown Cell):包含文字说明,支持 Markdown 语法,可以写标题、列表、公式等

内核(Kernel)

内核是实际执行代码的后台进程。每个 Notebook 都关联一个内核。当你在代码单元格中运行代码时,实际上是内核在执行。内核的状态(变量的值、导入的模块等)在所有单元格之间共享。

JupyterLab

JupyterLab 是 Jupyter Notebook 的升级版,提供了更现代化的界面,支持同时打开多个 Notebook、文件浏览器、终端等功能。建议新项目直接使用 JupyterLab。

快速上手

安装 Jupyter

# 安装 JupyterLab(推荐)
pip install jupyterlab

# 或者安装经典版 Jupyter Notebook
pip install notebook

# 安装常用的数据科学库
pip install numpy pandas matplotlib

启动 Jupyter

# 启动 JupyterLab
jupyter lab

# 启动经典版 Notebook
jupyter notebook

启动后浏览器会自动打开 Jupyter 的界面。如果没有自动打开,终端会显示一个 URL,手动在浏览器中打开即可。

创建第一个 Notebook

在 JupyterLab 界面中,点击”Python 3”创建一个新的 Notebook。在第一个单元格中输入代码,按 Shift+Enter 运行:

# 第一个 Jupyter 代码单元格
print("Hello, Jupyter!")

运行后,输出会显示在单元格下方,同时自动创建一个新的空单元格。

详细用法

常用快捷键

在命令模式(按 Esc 进入)下:

  • Enter:进入编辑模式
  • A:在当前单元格上方插入新单元格
  • B:在当前单元格下方插入新单元格
  • DD:删除当前单元格(快速按两次 D)
  • M:将单元格切换为 Markdown 类型
  • Y:将单元格切换为代码类型
  • Shift+Enter:运行当前单元格并跳到下一个

在编辑模式(按 Enter 进入)下:

  • Esc:回到命令模式
  • Ctrl+Enter:运行当前单元格但不跳转
  • Shift+Enter:运行当前单元格并跳到下一个
  • Tab:代码补全
  • Shift+Tab:查看函数文档

魔术命令

Jupyter 提供了特殊的”魔术命令”,以 % 或 %% 开头,用于执行特殊操作:

# 行魔术命令(以 % 开头,只作用于一行)
%timeit sum(range(1000))        # 测量代码执行时间
%pwd                             # 显示当前工作目录
%ls                              # 列出当前目录的文件
%who                             # 列出当前定义的变量
%reset                           # 清除所有变量
%env                             # 查看环境变量
# 单元格魔术命令(以 %% 开头,作用于整个单元格)
%%timeit
# 测量整个单元格的执行时间
total = 0
for i in range(10000):
    total += i
# 将单元格内容写入文件
%%writefile script.py
def greet(name):
    return f"Hello, {name}!"

if __name__ == "__main__":
    print(greet("World"))
# 在 Notebook 中加载外部 Python 文件
# %load script.py
# 运行外部 Python 脚本
# %run script.py

数据可视化

Jupyter 最强大的功能之一是内联显示图表:

# 在 Notebook 中显示 matplotlib 图表
%matplotlib inline

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

# 绘制图表
plt.figure(figsize=(8, 4))
plt.plot(x, y, label='sin(x)')
plt.title('正弦函数')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True)
plt.show()
# 使用 pandas 展示数据表格
import pandas as pd

# 创建示例数据
df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [25, 30, 28, 35],
    '城市': ['北京', '上海', '广州', '深圳'],
    '薪资': [15000, 20000, 18000, 25000],
})

# 直接显示 DataFrame(Jupyter 会渲染成美观的表格)
df
# 查看数据统计信息
df.describe()

使用 Markdown 编写说明

将单元格切换为 Markdown 类型(按 M 键),可以编写格式化的文字说明:

# 数据分析报告

## 1. 数据概览

本数据集包含 **4 条**记录,字段说明如下:

- 姓名:员工姓名
- 年龄:员工年龄
- 城市:所在城市
- 薪资:月薪(元)

## 2. 分析结论

平均薪资为 **19,500 元**,最高薪资为 25,000 元。

安装和使用扩展

# 安装 ipywidgets(交互式控件)
pip install ipywidgets

# 安装 nbconvert(导出 Notebook 为其他格式)
pip install nbconvert

# 安装 nbdev(用 Notebook 开发 Python 库)
pip install nbdev

使用交互式控件:

import ipywidgets as widgets
from IPython.display import display

# 创建滑块控件
slider = widgets.IntSlider(
    value=50,
    min=0,
    max=100,
    step=1,
    description='数值:'
)
display(slider)

# 创建下拉选择框
dropdown = widgets.Dropdown(
    options=['北京', '上海', '广州', '深圳'],
    value='北京',
    description='城市:'
)
display(dropdown)

导出 Notebook

# 导出为 HTML
jupyter nbconvert notebook.ipynb --to html

# 导出为 PDF(需要安装 LaTeX)
jupyter nbconvert notebook.ipynb --to pdf

# 导出为 Python 脚本
jupyter nbconvert notebook.ipynb --to script

# 导出为 Markdown
jupyter nbconvert notebook.ipynb --to markdown

常见场景

探索性数据分析

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv('sales.csv')

# 查看前几行
df.head()

# 查看数据信息
df.info()

# 查看缺失值
df.isnull().sum()

# 按月份统计销售额
monthly = df.groupby('month')['sales'].sum()
monthly.plot(kind='bar', title='月度销售额')
plt.ylabel('销售额')
plt.show()

交互式数据分析

from ipywidgets import interact
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('sales.csv')

@interact(column=df.select_dtypes(include='number').columns.tolist())
def plot_histogram(column):
    """交互式绘制直方图"""
    plt.figure(figsize=(8, 4))
    df[column].hist(bins=30)
    plt.title(f'{column} 分布')
    plt.xlabel(column)
    plt.ylabel('频次')
    plt.show()

机器学习实验记录

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 加载数据
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.2, random_state=42
)

# 实验 1:n_estimators=50
clf1 = RandomForestClassifier(n_estimators=50, random_state=42)
clf1.fit(X_train, y_train)
acc1 = accuracy_score(y_test, clf1.predict(X_test))
print(f"n_estimators=50, 准确率: {acc1:.4f}")

# 实验 2:n_estimators=100
clf2 = RandomForestClassifier(n_estimators=100, random_state=42)
clf2.fit(X_train, y_train)
acc2 = accuracy_score(y_test, clf2.predict(X_test))
print(f"n_estimators=100, 准确率: {acc2:.4f}")

# 实验 3:n_estimators=200
clf3 = RandomForestClassifier(n_estimators=200, random_state=42)
clf3.fit(X_train, y_train)
acc3 = accuracy_score(y_test, clf3.predict(X_test))
print(f"n_estimators=200, 准确率: {acc3:.4f}")

注意事项与常见错误

变量状态容易混乱

Notebook 中的变量在所有单元格之间共享,而且单元格可以按任意顺序执行。这容易导致变量状态混乱。建议:

  • 定期重启内核(Kernel -> Restart)清除所有状态
  • 按从上到下的顺序执行
  • 在 Notebook 开集中导入所有定义所有函数

大文件不要提交到 Git

.ipynb 文件包含输出结果和元数据,体积大且 diff 不友好。建议

  • 使用 .gitignore 忽略 .ipynb 文件中的输出
  • 使用 nbstripout 工具提交前清除输出
  • 或者将分析结果导出为 .py 文件提交

长时间运行的任务

如果某个单元格时间很长,你无法中断它。可以使用 Kernel -> Interrupt 来强制停止当前执行。更安全的做法是在代码中加入超时机制。

内存泄漏

时间的 Notebook 可能会占用大量内存。定期检查变量占用:

# 查看占用内存最大的变量
import sys
sorted([(name, sys.getsizeof(value)) for name, value in globals().items()],
       key=lambda x: x[1], reverse=True)[:10]

进阶用法

使用 JupyterLab

JupyterLab 提供了更强大的功能:

  • 左侧文件浏览器可以方便地管理文件
  • 支持拖拽排列个 Notebook 和终端
  • 内置终端和文本编辑器
  • 支持实时协作

使用 nbconvert 自动生成报告

分析结果自动导出为 HTML 报告

# 执行 Notebook 并导出为 HTML
jupyter nbconvert --execute analysis.ipynb --to html

远程访问 Jupyter

服务器上运 Jupyter,本地浏览器访问:

# 在远程服务器上启动
jupyter lab --no-browser --port=8888 --ip=0.0.0.0

# 或使用 SSH 隧道(更安全)
ssh -N -f -L localhost:8888:localhost:8888 user@remote-server

使用 VS Code 中的 Jupyter

VS Code 内置了 Jupyter 支持,可以直接在 VS Code 中打开编辑 .ipynb 文件,无需启动浏览器。安装 Python 扩展后,创建 .ipynb 文件即可使用。

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式