什么是 Jupyter Notebook
Jupyter Notebook 是一种基于 Web 的交互式计算环境,允许你在同一个文档中混合编写代码、执行代码、查看输出、撰写文本说明和插入图表。
名称 "Jupyter" 来源于三种核心编程语言:Julia、Python、R,但现在已支持 40+ 种语言的 Kernel。
INFO
Jupyter Notebook 由 IPython 项目演化而来。2014 年,Fernando Pérez 等人将 IPython Notebook 独立出来,并重命名为 Jupyter Project。
核心理念:文学化编程
Jupyter 实践了 Donald Knuth 提出的"文学化编程"(Literate Programming)思想——代码应该像文章一样可读,附带完整的说明与推导过程。
传统的 Python 脚本 .py,运行后只能在终端看到输出,代码和结果是分离的。而 Jupyter Notebook 让代码、输出、文字说明、图表全部内联在同一个文档中,形成完整的叙事链条。
传统 Python 脚本 (.py)
- 纯文本代码文件
- 需运行整个脚本
- 输出打印到终端
- 图表弹出窗口
- 难以夹杂文字说明
Jupyter Notebook (.ipynb)
- 代码 + 输出 + 文档一体
- 可逐个单元格执行
- 输出内联显示
- 图表直接嵌入文档
- 支持 Markdown 和 LaTeX
典型使用场景
- 数据探索与分析
- 逐步加载数据、清洗、统计描述、可视化,边做边记录每步的发现。
- 机器学习实验
- 训练模型、调参、对比不同方案,每次实验的结果直接保存在 Notebook 中。
- 学术报告与论文附件
- 将分析过程和代码一同发布,让他人可以复现结果。
- 教学演示
- 老师在课堂上边讲边运行代码,学生直接打开相同的 Notebook 动手操作。
- 数据新闻与可视化报道
- 《纽约时报》、FiveThirtyEight 等媒体发布带完整分析过程的 Notebook。
.ipynb 文件格式
Notebook 文件以 .ipynb(IPython Notebook)为扩展名,本质是一个 JSON 文档:
// demo.ipynb 的简化结构 { "nbformat": 4, "metadata": { "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python", "version": "3.12.0" } }, "cells": [ { "cell_type": "markdown", "source": "# 我的分析报告\n\n这是一个 **Markdown** 单元格。" }, { "cell_type": "code", "execution_count": 1, "source": "print('Hello, Jupyter!')", "outputs": [{ "output_type": "stream", "text": "Hello, Jupyter!\n" }] } ] }
TIP
由于
.ipynb 是纯文本 JSON,可以用 git 进行版本控制。但因为输出内容(尤其是 Base64 图片)会让 diff 很难阅读,建议使用 nbstripout 工具在提交前自动清除输出。
Jupyter 生态系统
Jupyter 不只是一个工具,而是一个完整的生态:
| 组件 | 用途 |
|---|---|
| Jupyter Notebook | 经典界面,适合单文件分析 |
| JupyterLab | 下一代 IDE 界面,多面板、文件管理 |
| JupyterHub | 多用户服务器,适合团队和教学 |
| nbconvert | 将 Notebook 导出为 HTML/PDF/Python |
| ipywidgets | 交互式 UI 控件(滑块、按钮等) |
| nbviewer | 在线渲染 Notebook(无需安装) |
| Google Colab | Google 托管的云端 Jupyter 环境 |
Kernel 是什么
Kernel(内核)是在后台运行的编程语言进程,负责执行单元格中的代码并返回结果。
Notebook 界面(浏览器)通过 WebSocket 与 Kernel 通信。这意味着:
- 你关闭浏览器标签页,Kernel 仍在运行
- 所有单元格共享同一个 Kernel 进程,变量在整个会话中保持
- 可以为不同的 Notebook 使用不同的 Kernel(Python 2/3、R、Julia)
# 在一个单元格中定义变量 x = 42 # 在另一个单元格中可以直接使用 print(x) # 输出: 42
WARNING
变量的值取决于执行顺序,而不是单元格在文档中的顺序。如果你反复修改并重新运行某个单元格,可能会产生意想不到的变量状态。养成定期使用 "Restart & Run All" 的习惯,确保结果可复现。
本章小结
- Jupyter Notebook 是代码 + 输出 + 文档一体的交互式环境
.ipynb文件本质是 JSON,包含 cells 数组- Kernel 是负责执行代码的后台进程
- Jupyter 生态包含 Lab、Hub、nbconvert 等工具