从零开始的数据分析之旅
Jupyter Notebook是数据科学家的瑞士军刀——一个交互式的计算环境,可以将代码、文本、公式、可视化整合在一个文档中。它的名字来源于三种核心语言:Julia、Python、R。
每个.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 | 查看函数文档 | 编辑 |
Jupyter的Markdown单元格支持丰富的格式,让你的笔记本既是代码又是文档:
# 一级标题
## 二级标题
### 三级标题
**粗体** *斜体* ~~删除线~~ `代码`
- 无序列表项1
- 无序列表项2
1. 有序列表项1
2. 有序列表项2
[链接](https://example.com)

> 引用文本
| 列1 | 列2 |
|-----|-----|
| 值1 | 值2 |
数学公式(LaTeX):
行内: $E = mc^2$
独立: $$\sum_{i=1}^{n} x_i = x_1 + x_2 + \cdots + x_n$$
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
# 内核信息
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
#!/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+代码运行")
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 数据探索 | Jupyter Notebook | 交互式、可视化内联 |
| 数据分析 | JupyterLab | 分栏布局、文件管理 |
| 机器学习 | VS Code + Jupyter | 调试、Git、远程开发 |
| 生产代码 | VS Code / PyCharm | 重构、测试、CI/CD |
| 协作演示 | Google Colab | 实时协作、免费GPU |
| 报告发布 | Quarto | 美观输出、多格式 |