📓 Jupyter环境

从零开始的数据分析之旅

📖 Jupyter Notebook 是什么?

Jupyter Notebook是数据科学家的瑞士军刀——一个交互式的计算环境,可以将代码、文本、公式、可视化整合在一个文档中。它的名字来源于三种核心语言:Julia、Python、R

Jupyter生态系统: Jupyter Notebook JupyterLab VS Code ├ 经典界面 ├ 下一代界面 ├ IDE集成 ├ .ipynb格式 ├ 分栏布局 ├ Jupyter扩展 ├ 浏览器运行 ├ 文件浏览器 ├ 智能补全 └ 适合演示 └ 适合开发 └ 适合工程 底层: IPython内核 → 执行Python代码 → 返回结果 格式: .ipynb = JSON (包含代码+输出+元数据)

1. Notebook文件结构

每个.ipynb文件本质上是一个JSON文件,包含一系列单元格(Cell)

单元格类型用途快捷键
代码单元格执行Python代码Shift+Enter
Markdown单元格写文档、标题、公式M(命令模式下)
Raw单元格原始文本,不执行R(命令模式下)
# Notebook本质是JSON
import json

notebook = {
    "nbformat": 4,
    "nbformat_minor": 5,
    "metadata": {
        "kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"},
        "language_info": {"name": "python", "version": "3.10.0"}
    },
    "cells": [
        {"cell_type": "markdown", "source": ["# 数据分析项目\n", "这是**第一个**笔记本"]},
        {"cell_type": "code", "source": ["import numpy as np\n", "print('Hello Jupyter!')"], "execution_count": 1}
    ]
}
print(f"单元格数量: {len(notebook['cells'])}")  # 2

⌨️ 必会快捷键

快捷键功能模式
Shift+Enter运行并跳到下一个单元格编辑
Ctrl+Enter运行当前单元格编辑
Alt+Enter运行并在下方插入新单元格编辑
A在上方插入单元格命令
B在下方插入单元格命令
DD删除单元格命令
M切换为Markdown命令
Y切换为代码命令
Tab自动补全编辑
Shift+Tab查看函数文档编辑
命令模式下单元格边框为蓝色,编辑模式下为绿色。按Esc从编辑模式进入命令模式。

🎨 Markdown魔法

Jupyter的Markdown单元格支持丰富的格式,让你的笔记本既是代码又是文档:

# 一级标题
## 二级标题
### 三级标题

**粗体** *斜体* ~~删除线~~ `代码`

- 无序列表项1
- 无序列表项2

1. 有序列表项1
2. 有序列表项2

[链接](https://example.com)
![图片](path/to/image.png)

> 引用文本

| 列1 | 列2 |
|-----|-----|
| 值1 | 值2 |

数学公式(LaTeX):
行内: $E = mc^2$
独立: $$\sum_{i=1}^{n} x_i = x_1 + x_2 + \cdots + x_n$$

🔧 魔法命令(Magic Commands)

IPython提供的特殊命令,以%%%开头,是Jupyter的超级能力:

命令功能示例
%timeit计时%timeit sum(range(1000000))
%%time单元格计时%%time 整个单元格
%history查看历史%history -n 1-10
%who查看变量%who 或 %whos
%reset重置命名空间%reset -f
%load加载脚本%load myscript.py
%%writefile写文件%%writefile output.py
%matplotlib内联绘图%matplotlib inline
# 性能测试
%timeit sum(range(1000000))
# 输出: ~30ms per loop

# 变量检查
x = 42
name = "数据分析"
%whos
# Variable   Type    Data/Info
# name       str     数据分析
# x          int     42

📐 2024-2025 Jupyter生态前沿

🔧 Jupyter高级技巧

# 内核信息
import sys
print(f"Python: {sys.version}")
print(f"路径: {sys.executable}")

# 显示增强
from IPython.display import display, HTML
display(HTML("<h3 style='color:#3b82f6'>自定义输出</h3>"))

# 进度条
from tqdm.notebook import tqdm
import time
for i in tqdm(range(100)):
    time.sleep(0.01)

调试技巧

# %debug — 事后调试
# %pdb on — 异常时自动调试
# %%prun — 性能分析
# %memit — 内存测量

🤝 协作与版本控制

# Git与Notebook
# pip install nbstripout
# nbstripout --install  # 提交前自动清除输出

# 导出格式
# jupyter nbconvert --to html notebook.ipynb
# jupyter nbconvert --to pdf notebook.ipynb
# jupyter nbconvert --to slides notebook.ipynb
使用nbstripout在Git提交前自动清除Notebook输出,避免输出差异污染版本历史。

💻 完整实战代码

#!/usr/bin/env python3
# Jupyter环境 — 完整实战

import json, os, sys, time

# ============ Notebook结构 ============
notebook = {
    "nbformat": 4, "nbformat_minor": 5,
    "metadata": {
        "kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"},
        "language_info": {"name": "python", "version": "3.10.0"}
    },
    "cells": [
        {"cell_type": "markdown", "source": ["# 数据分析项目\n", "这是**第一个**笔记本"]},
        {"cell_type": "code", "source": ["import numpy as np\n", "print('Hello Jupyter!')"], "execution_count": 1},
        {"cell_type": "markdown", "source": ["## 数据加载\n", "使用pd.read_csv()加载数据"]},
        {"cell_type": "code", "source": ["data = [1,2,3]\n", "print(data)"], "execution_count": 2}
    ]
}
nb_json = json.dumps(notebook, ensure_ascii=False, indent=2)
print(f"Notebook JSON长度: {len(nb_json)} 字符")
print(f"单元格数量: {len(notebook['cells'])}")
print(f"代码单元格: {sum(1 for c in notebook['cells'] if c['cell_type']=='code')}")
print(f"Markdown单元格: {sum(1 for c in notebook['cells'] if c['cell_type']=='markdown')}")

# ============ 魔法命令模拟 ============
start = time.time()
total = sum(range(1000000))
elapsed = time.time() - start
print(f"sum(range(1000000)) = {total}, 耗时: {elapsed:.6f}s")

# ============ 变量检查 ============
x = 42
name = "数据分析"
values = [1, 2, 3, 4, 5]
print(f"变量: x={x}, name={name}, values={values}")
print(f"类型: {type(x).__name__}, {type(name).__name__}, {type(values).__name__}")

print("\n✅ Python验证通过 — Notebook创建+Markdown+代码运行")
🏆 成就解锁:Notebook创建+Markdown+代码运行
Python验证通过 — JSON结构创建Notebook成功,4个单元格(2代码+2Markdown),魔法命令计时,变量检查均正常运行。
思考题:
① 命令模式和编辑模式的区别是什么?如何切换?
② %%time和%timeit的区别是什么?
③ 如何将.ipynb文件转换为.py脚本?
④ Markdown单元格中如何插入LaTeX数学公式?

📝 课后练习

  1. 创建一个完整的分析Notebook,包含Markdown标题和代码单元格
  2. 使用%%timeit比较列表推导式和for循环的速度差异
  3. 用Markdown写一篇包含公式、表格、代码的技术笔记
  4. 探索5个魔法命令并记录使用场景
  5. 将一个.py脚本转换为.ipynb格式
📚 参考资料:
• Jupyter官方文档: jupyter.org/documentation
• IPython魔法命令: ipython.readthedocs.io/en/stable/interactive/magics
• JupyterLab文档: jupyterlab.readthedocs.io
• The Jupyter Notebook Cookbook (Dan Toomey, 2024)

🗺️ Jupyter工作流全览

数据分析Jupyter工作流: 1.环境搭建 2.数据探索 3.分析建模 ──────── ──────── ──────── conda create df.head() 统计分析 pip install df.describe() ├ 描述统计 jupyter lab df.info() ├ 假设检验 可视化探索 ├ 相关分析 3.数据清洗 ──────── └ 回归/分类 ──────── sns.histplot() 缺失值处理 sns.scatterplot() 4.报告输出 类型转换 sns.heatmap() ──────── 异常值处理 nbconvert → HTML 特征工程 nbconvert → PDF Quarto → 网站 Slides → 演示

Jupyter vs IDE选择指南

场景推荐工具原因
数据探索Jupyter Notebook交互式、可视化内联
数据分析JupyterLab分栏布局、文件管理
机器学习VS Code + Jupyter调试、Git、远程开发
生产代码VS Code / PyCharm重构、测试、CI/CD
协作演示Google Colab实时协作、免费GPU
报告发布Quarto美观输出、多格式