本节课你将学到
- 理解什么是Jupyter Notebook及其优势
- 掌握Jupyter Notebook的启动和基本操作
- 学会使用Cell的不同类型和快捷键
- 掌握Markdown语法编写文档
- 完成一个完整的数据分析报告
开始之前
什么是Jupyter Notebook?
如果把传统的Python编程比作写信:
- 传统Python文件:写完整封信,一次性发送,看不到中间过程
- Jupyter Notebook:像聊天记录,可以一句一句发送,随时查看每句话的效果
Jupyter Notebook是一个交互式的编程环境,特别适合:
- 数据分析:可以边写代码边看结果
- 机器学习实验:方便调试和可视化
- 教学演示:代码和说明文档结合
- 研究报告:代码、图表、文字融为一体
环境要求
- 已完成第1讲的环境配置
- 已安装Anaconda并创建ai-learning环境
- 确保jupyter已安装(第1讲中已安装)
Jupyter Notebook的核心概念
Cell(单元格):Notebook的基本单位,就像聊天记录中的一条消息
- Code Cell:写Python代码的地方
- Markdown Cell:写文档说明的地方
- Raw Cell:原始文本(很少用)
Kernel(内核):负责执行代码的后台程序,就像手机上运行APP的系统
启动Jupyter Notebook
方法一:命令行启动
# 激活AI学习环境
conda activate ai-learning
# 启动Jupyter Notebook
jupyter notebook
# 如果上面命令不行,试试这个
jupyter-notebook
启动后会发生什么:
- 命令行显示服务器信息
- 自动打开浏览器
- 显示文件管理界面
方法二:指定目录启动
# 先进入工作目录
cd D:\AI_Projects # Windows示例
# 或
cd ~/AI_Projects # macOS/Linux示例
# 再启动Jupyter
conda activate ai-learning
jupyter notebook
方法三:Anaconda Navigator启动
- 打开Anaconda Navigator
- 确保环境选择为"ai-learning"
- 点击Jupyter Notebook下的"Launch"
⚠️ 启动成功的标志:
- 浏览器自动打开并显示文件列表
- 地址栏显示:http://localhost:8888
- 命令行显示服务器运行信息
Jupyter Notebook界面介绍
主界面(Dashboard)
启动后看到的文件管理界面包含:
- 文件列表:显示当前目录的所有文件和文件夹
- 新建按钮:右上角"New",可以创建新的Notebook
- 上传按钮:上传本地文件到当前目录
- 工具栏:刷新、删除、重命名等操作
创建新的Notebook
- 点击右上角"New"按钮
- 选择"Python 3 (ipykernel)"
- 自动打开新的Notebook页面
Notebook编辑界面
顶部工具栏:
- 文件操作:保存、下载、重命名
- 编辑功能:剪切、复制、粘贴
- Cell操作:运行、停止、重启
- Cell类型:切换Code/Markdown/Raw
Cell的使用详解
Code Cell基础操作
创建你的第一个Code Cell:
# 这是一个Code Cell
# 在这里写Python代码,按Shift+Enter运行
print("Hello, Jupyter!")
print("这是我的第一个Jupyter代码")
# 定义一个简单的变量
name = "AI学习者"
age = 25
print(f"我是{name},今年{age}岁")
运行方式:
- Shift + Enter:运行当前Cell并移动到下一个
- Ctrl + Enter:运行当前Cell但停留在当前Cell
- Alt + Enter:运行当前Cell并在下方插入新Cell
变量在Cell之间的共享
# Cell 1: 定义变量
x = 10
y = 20
result = x + y
print(f"x = {x}, y = {y}")
# Cell 2: 使用上面定义的变量
print(f"之前计算的结果:{result}")
print(f"现在计算 x * y = {x * y}")
# 修改变量
x = 100
print(f"修改后 x = {x}")
# Cell 3: 变量修改在所有Cell中生效
print(f"在Cell 3中,x = {x}") # 显示100,不是10
显示图表和图片
# 数据可视化示例
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.linspace(0, 10, 100) # 0到10之间100个点
y1 = np.sin(x) # 正弦函数
y2 = np.cos(x) # 余弦函数
# 创建图表
plt.figure(figsize=(10, 6)) # 设置图表大小
plt.plot(x, y1, label='sin(x)', color='blue', linewidth=2)
plt.plot(x, y2, label='cos(x)', color='red', linewidth=2)
# 添加标题和标签
plt.title('正弦和余弦函数', fontsize=16)
plt.xlabel('x值', fontsize=12)
plt.ylabel('y值', fontsize=12)
plt.legend() # 显示图例
plt.grid(True) # 显示网格
plt.show() # 显示图表
Markdown Cell详解
Markdown是一种轻量级的标记语言,用于编写格式化的文档。
创建Markdown Cell
- 选择一个Cell
- 点击工具栏的下拉菜单,选择"Markdown"
- 或者按快捷键"M"(在命令模式下)
Markdown基础语法
# 一级标题
## 二级标题
### 三级标题
**粗体文字**
*斜体文字*
***粗斜体文字***
无序列表:
- 项目1
- 项目2
- 子项目2.1
- 子项目2.2
有序列表:
1. 第一步
2. 第二步
3. 第三步
代码块:
```python
print("这是Python代码")
行内代码:print("hello")
链接:百度
图片:
表格:
列1 | 列2 | 列3 |
---|---|---|
数据1 | 数据2 | 数据3 |
数据4 | 数据5 | 数据6 |
这是引用文字
这是分割线
#### 数学公式(LaTeX)
```markdown
行内公式:$E = mc^2$
块级公式:
$$
\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
$$
常用数学符号:
- 求和:$\sum_{i=1}^{n} x_i$
- 积分:$\int_{0}^{1} x dx$
- 矩阵:$\begin{pmatrix} a & b \\ c & d \end{pmatrix}$
Jupyter快捷键大全
命令模式快捷键(按Esc进入)
基本操作:
- Enter:进入编辑模式
- Shift + Enter:运行Cell并选择下一个
- Ctrl + Enter:运行Cell
- Alt + Enter:运行Cell并在下方插入新Cell
Cell操作:
- A:在上方插入Cell
- B:在下方插入Cell
- X:剪切Cell
- C:复制Cell
- V:粘贴Cell
- DD:删除Cell(按两次D)
- Z:撤销删除
Cell类型切换:
- Y:切换到Code Cell
- M:切换到Markdown Cell
- R:切换到Raw Cell
导航:
- ↑/↓:选择上/下一个Cell
- Shift + ↑/↓:扩展选择多个Cell
- Shift + M:合并选中的Cell
编辑模式快捷键(在Cell内编辑时)
基本编辑:
- Ctrl + A:全选
- Ctrl + Z:撤销
- Ctrl + Y:重做
- Ctrl + /:注释/取消注释
代码补全:
- Tab:代码补全/缩进
- Shift + Tab:查看函数文档
运行:
- Shift + Enter:运行并移到下一Cell
- Ctrl + Enter:运行当前Cell
完整项目:数据分析报告
让我们创建一个完整的数据分析报告,展示Jupyter Notebook的强大功能:
创建新的Notebook
- 在Jupyter主界面点击"New" → “Python 3”
- 将Notebook重命名为"销售数据分析报告"
Cell 1: 标题和说明(Markdown)
# 销售数据分析报告
## 项目概述
本报告分析了某公司2023年的销售数据,主要包括:
- 月度销售趋势分析
- 产品类别销售对比
- 销售预测模型构建
**分析师:** AI学习者
**日期:** 2024年1月
**工具:** Python + Jupyter Notebook
---
Cell 2: 导入必要的库(Code)
# 数据分析必备库
import pandas as pd # 数据处理
import numpy as np # 数值计算
import matplotlib.pyplot as plt # 数据可视化
import seaborn as sns # 高级可视化
from datetime import datetime # 日期处理
# 设置中文字体(解决中文显示问题)
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
# 设置图表样式
plt.style.use('default')
sns.set_palette("husl")
print("📚 所有库导入成功!")
print(f"📊 Pandas版本: {pd.__version__}")
print(f"📈 Matplotlib版本: {plt.matplotlib.__version__}")
Cell 3: 数据准备说明(Markdown)
## 1. 数据准备
我们将创建一个模拟的销售数据集,包含以下字段:
- **日期**:销售日期
- **产品类别**:电子产品、服装、食品、图书
- **销售额**:每日销售金额
- **销售量**:销售数量
- **地区**:北京、上海、广州、深圳
Cell 4: 创建模拟数据(Code)
# 创建模拟销售数据
np.random.seed(42) # 设置随机种子,确保结果可重现
# 日期范围:2023年全年
date_range = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
# 产品类别和地区
categories = ['电子产品', '服装', '食品', '图书']
regions = ['北京', '上海', '广州', '深圳']
# 创建数据列表
data = []
for date in date_range:
for category in categories:
for region in regions:
# 生成销售数据,加入季节性和随机性
month = date.month
# 基础销售额(不同类别有不同基准)
base_sales = {
'电子产品': 15000,
'服装': 8000,
'食品': 5000,
'图书': 3000
}
# 季节性因子(模拟不同月份的销售差异)
seasonal_factor = 1 + 0.3 * np.sin(2 * np.pi * month / 12)
# 地区因子(不同地区销售能力不同)
region_factor = {
'北京': 1.2,
'上海': 1.1,
'广州': 0.9,
'深圳': 1.0
}
# 计算最终销售额
sales_amount = (base_sales[category] *
seasonal_factor *
region_factor[region] *
np.random.normal(1, 0.2)) # 加入随机波动
# 确保销售额为正数
sales_amount = max(sales_amount, 1000)
# 根据销售额计算销售量
unit_price = np.random.uniform(50, 500) # 随机单价
sales_quantity = int(sales_amount / unit_price)
data.append({
'日期': date,
'产品类别': category,
'地区': region,
'销售额': round(sales_amount, 2),
'销售量': sales_quantity,
'单价': round(unit_price, 2)
})
# 创建DataFrame
df = pd.DataFrame(data)
# 显示数据基本信息
print("📊 数据创建完成!")
print(f"📏 数据集大小:{df.shape[0]}行 × {df.shape[1]}列")
print(f"📅 日期范围:{df['日期'].min()} 到 {df['日期'].max()}")
print(f"🏷️ 产品类别:{df['产品类别'].unique()}")
print(f"🌍 地区:{df['地区'].unique()}")
Cell 5: 数据预览(Code)
# 查看数据前几行
print("📋 数据前5行:")
print(df.head())
print("\n📊 数据基本统计:")
print(df.describe())
print("\n🔍 数据类型:")
print(df.dtypes)
print("\n❓ 缺失值检查:")
print(df.isnull().sum())
Cell 6: 数据分析说明(Markdown)
## 2. 数据探索与分析
接下来我们将从多个角度分析销售数据:
### 2.1 时间趋势分析
- 月度销售趋势
- 季度对比
- 工作日vs周末销售差异
### 2.2 产品类别分析
- 各类别销售额占比
- 各类别销售量对比
- 价格分析
### 2.3 地区分析
- 各地区销售表现
- 地区间差异分析
Cell 7: 月度销售趋势分析(Code)
# 月度销售趋势分析
df['年月'] = df['日期'].dt.to_period('M') # 提取年月
monthly_sales = df.groupby('年月')['销售额'].sum().reset_index()
monthly_sales['年月_str'] = monthly_sales['年月'].astype(str)
# 创建月度趋势图
plt.figure(figsize=(15, 8))
# 子图1:月度销售额趋势
plt.subplot(2, 2, 1)
plt.plot(monthly_sales['年月_str'], monthly_sales['销售额'],
marker='o', linewidth=2, markersize=6, color='#2E86AB')
plt.title('月度销售额趋势', fontsize=14, fontweight='bold')
plt.xlabel('月份', fontsize=12)
plt.ylabel('销售额(元)', fontsize=12)
plt.xticks(rotation=45)
plt.grid(True, alpha=0.3)
# 格式化y轴显示
ax = plt.gca()
ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, p: f'{x/10000:.0f}万'))
# 子图2:各月销售额柱状图
plt.subplot(2, 2, 2)
bars = plt.bar(monthly_sales['年月_str'], monthly_sales['销售额'],
color='#A23B72', alpha=0.7)
plt.title('各月销售额对比', fontsize=14, fontweight='bold')
plt.xlabel('月份', fontsize=12)
plt.ylabel('销售额(元)', fontsize=12)
plt.xticks(rotation=45)
# 在柱状图上添加数值标签
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2., height,
f'{height/10000:.0f}万',
ha='center', va='bottom', fontsize=8)
# 子图3:产品类别月度趋势
plt.subplot(2, 1, 2)
category_monthly = df.groupby(['年月', '产品类别'])['销售额'].sum().unstack()
for category in categories:
plt.plot(category_monthly.index.astype(str), category_monthly[category],
marker='o', linewidth=2, label=category)
plt.title('各产品类别月度销售趋势', fontsize=14, fontweight='bold')
plt.xlabel('月份', fontsize=12)
plt.ylabel('销售额(元)', fontsize=12)
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.xticks(rotation=45)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# 显示月度销售数据
print("📈 月度销售数据:")
print(monthly_sales.sort_values('销售额', ascending=False))
Cell 8: 产品类别分析(Code)
# 产品类别销售分析
category_stats = df.groupby('产品类别').agg({
'销售额': ['sum', 'mean', 'count'],
'销售量': ['sum', 'mean'],
'单价': 'mean'
}).round(2)
# 扁平化列名
category_stats.columns = ['总销售额', '平均销售额', '交易次数', '总销售量', '平均销售量', '平均单价']
category_stats = category_stats.sort_values('总销售额', ascending=False)
print("📊 各产品类别销售统计:")
print(category_stats)
# 可视化产品类别分析
fig, axes = plt.subplots(2, 2, figsize=(16, 12))
# 1. 销售额饼图
sales_by_category = df.groupby('产品类别')['销售额'].sum()
colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4']
axes[0, 0].pie(sales_by_category.values, labels=sales_by_category.index,
autopct='%1.1f%%', colors=colors, startangle=90)
axes[0, 0].set_title('各类别销售额占比', fontsize=14, fontweight='bold')
# 2. 销售量对比柱状图
quantity_by_category = df.groupby('产品类别')['销售量'].sum()
bars = axes[0, 1].bar(quantity_by_category.index, quantity_by_category.values, color=colors)
axes[0, 1].set_title('各类别销售量对比', fontsize=14, fontweight='bold')
axes[0, 1].set_ylabel('销售量')
axes[0, 1].tick_params(axis='x', rotation=45)
# 在柱状图上添加数值
for bar in bars:
height = bar.get_height()
axes[0, 1].text(bar.get_x() + bar.get_width()/2., height,
f'{height:,.0f}',
ha='center', va='bottom')
# 3. 平均单价对比
avg_price = df.groupby('产品类别')['单价'].mean()
bars = axes[1, 0].bar(avg_price.index, avg_price.values, color=colors)
axes[1, 0].set_title('各类别平均单价', fontsize=14, fontweight='bold')
axes[1, 0].set_ylabel('平均单价(元)')
axes[1, 0].tick_params(axis='x', rotation=45)
# 添加数值标签
for bar in bars:
height = bar.get_height()
axes[1, 0].text(bar.get_x() + bar.get_width()/2., height,
f'{height:.0f}元',
ha='center', va='bottom')
# 4. 各类别月度销售额热力图
monthly_category = df.groupby([df['日期'].dt.month, '产品类别'])['销售额'].sum().unstack()
monthly_category.index = [f'{i}月' for i in monthly_category.index]
im = axes[1, 1].imshow(monthly_category.T.values, cmap='YlOrRd', aspect='auto')
axes[1, 1].set_xticks(range(len(monthly_category.index)))
axes[1, 1].set_xticklabels(monthly_category.index)
axes[1, 1].set_yticks(range(len(monthly_category.columns)))
axes[1, 1].set_yticklabels(monthly_category.columns)
axes[1, 1].set_title('各类别月度销售热力图', fontsize=14, fontweight='bold')
# 添加颜色条
cbar = plt.colorbar(im, ax=axes[1, 1])
cbar.set_label('销售额', rotation=270, labelpad=15)
plt.tight_layout()
plt.show()
Cell 9: 地区分析(Code)
# 地区销售分析
region_stats = df.groupby('地区').agg({
'销售额': ['sum', 'mean'],
'销售量': 'sum',
'产品类别': 'count' # 交易次数
}).round(2)
region_stats.columns = ['总销售额', '平均销售额', '总销售量', '交易次数']
region_stats = region_stats.sort_values('总销售额', ascending=False)
print("🌍 各地区销售统计:")
print(region_stats)
# 地区销售可视化
plt.figure(figsize=(15, 10))
# 1. 地区销售额对比
plt.subplot(2, 3, 1)
region_sales = df.groupby('地区')['销售额'].sum().sort_values(ascending=False)
colors = ['#FF9999', '#66B2FF', '#99FF99', '#FFCC99']
bars = plt.bar(region_sales.index, region_sales.values, color=colors)
plt.title('各地区总销售额', fontsize=14, fontweight='bold')
plt.ylabel('销售额(元)')
plt.xticks(rotation=45)
# 添加数值标签
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2., height,
f'{height/10000:.0f}万',
ha='center', va='bottom')
# 2. 地区销售量对比
plt.subplot(2, 3, 2)
region_quantity = df.groupby('地区')['销售量'].sum().sort_values(ascending=False)
plt.bar(region_quantity.index, region_quantity.values, color=colors)
plt.title('各地区总销售量', fontsize=14, fontweight='bold')
plt.ylabel('销售量')
plt.xticks(rotation=45)
# 3. 地区平均单价
plt.subplot(2, 3, 3)
region_price = df.groupby('地区')['单价'].mean().sort_values(ascending=False)
plt.bar(region_price.index, region_price.values, color=colors)
plt.title('各地区平均单价', fontsize=14, fontweight='bold')
plt.ylabel('平均单价(元)')
plt.xticks(rotation=45)
# 4. 各地区产品类别销售分布
plt.subplot(2, 3, (4, 6))
region_category = df.groupby(['地区', '产品类别'])['销售额'].sum().unstack()
# 创建堆叠柱状图
bottom = np.zeros(len(region_category.index))
category_colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4']
for i, category in enumerate(categories):
plt.bar(region_category.index, region_category[category],
bottom=bottom, label=category, color=category_colors[i])
bottom += region_category[category]
plt.title('各地区产品类别销售分布', fontsize=14, fontweight='bold')
plt.ylabel('销售额(元)')
plt.xlabel('地区')
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# 计算地区销售占比
total_sales = df['销售额'].sum()
region_percentage = (region_sales / total_sales * 100).round(2)
print(f"\n📍 各地区销售额占比:")
for region, percentage in region_percentage.items():
print(f" {region}: {percentage}%")
Cell 10: 总结报告(Markdown)
## 3. 分析总结
### 📈 主要发现
1. **销售趋势**
- 全年销售呈现明显的季节性特征
- 年中(6-8月)和年末(11-12月)是销售高峰期
- 年初和春季销售相对较低
2. **产品类别表现**
- 电子产品是最大的收入来源,占总销售额的40%以上
- 服装类产品销量最高,但单价相对较低
- 图书类产品销售额最小,但利润率可能较高
3. **地区差异**
- 北京和上海是主要的销售市场
- 各地区在产品偏好上存在差异
- 一线城市的平均单价普遍较高
### 💡 商业建议
1. **库存管理**:根据季节性特征调整库存策略
2. **营销策略**:在销售淡季加强促销活动
3. **产品策略**:加强电子产品的供应链管理
4. **地区策略**:针对不同地区制定差异化营销方案
### 🔮 下一步分析方向
- 客户细分分析
- 价格敏感性分析
- 销售预测模型
- 竞争对手分析
---
**报告完成时间:** 2024年1月
**数据来源:** 公司销售系统
**分析工具:** Python + Jupyter Notebook
保存和分享Notebook
保存Notebook
# 在代码Cell中保存当前状态
import datetime
save_info = {
'保存时间': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'分析师': 'AI学习者',
'数据量': len(df),
'分析完成': True
}
print("💾 报告保存信息:")
for key, value in save_info.items():
print(f" {key}: {value}")
手动保存方式:
- Ctrl + S:快速保存
- File → Save and Checkpoint:保存并创建检查点
- File → Download as:导出为不同格式
导出格式选项
1. HTML格式(推荐)
- 包含所有代码、输出和图表
- 可以在任何浏览器中查看
- 适合分享给没有Python环境的同事
2. PDF格式
- 适合打印和正式报告
- 需要安装额外的LaTeX工具
3. Python脚本(.py)
- 只保留代码,去除输出和Markdown
- 适合代码复用
分享Notebook的最佳实践
# 分享前的检查清单
checklist = [
"✅ 所有Cell都能正常运行",
"✅ 清除了敏感数据",
"✅ 添加了充分的说明文档",
"✅ 代码注释完整",
"✅ 图表清晰可读",
"✅ 结论明确"
]
print("📋 分享前检查清单:")
for item in checklist:
print(f" {item}")
高级技巧和最佳实践
Magic Commands(魔法命令)
Jupyter提供了许多以%
开头的特殊命令:
# 查看所有可用的magic命令
%lsmagic
# 常用magic命令演示
# 1. 测量代码执行时间
%time result = sum(range(100000))
print(f"计算结果:{result}")
# 2. 多次测量取平均值
%timeit sum(range(100000))
# 3. 查看变量信息
x = [1, 2, 3, 4, 5]
%whos # 显示所有变量的详细信息
# 4. 运行外部Python文件
# %run my_script.py
# 5. 查看当前目录文件
%ls
# 6. 执行系统命令
%pwd # 显示当前路径
# 7. 安装包(直接在Notebook中)
# %pip install package_name
# 8. 加载外部代码
# %load example.py # 加载文件内容到当前Cell
Cell内存管理
# 查看内存使用情况
import psutil
import os
def get_memory_usage():
"""获取当前内存使用情况"""
process = psutil.Process(os.getpid())
memory_info = process.memory_info()
print(f"🧠 内存使用情况:")
print(f" 物理内存:{memory_info.rss / 1024 / 1024:.2f} MB")
print(f" 虚拟内存:{memory_info.vms / 1024 / 1024:.2f} MB")
# 系统总内存
total_memory = psutil.virtual_memory().total / 1024 / 1024 / 1024
available_memory = psutil.virtual_memory().available / 1024 / 1024 / 1024
print(f" 系统总内存:{total_memory:.2f} GB")
print(f" 可用内存:{available_memory:.2f} GB")
get_memory_usage()
# 清理变量释放内存
# 删除大型变量
# del df # 删除DataFrame
# del large_array # 删除大型数组
# 强制垃圾回收
import gc
gc.collect()
print("🗑️ 内存清理完成")
调试技巧
# 1. 使用断点调试
# %pdb on # 开启调试模式
# 2. 查看函数源代码
import numpy as np
# %pinfo np.mean # 查看函数信息
# %pinfo2 np.mean # 查看函数源代码
# 3. 错误后自动进入调试
# %pdb # 遇到错误时自动进入调试器
自定义样式和配置
# 自定义图表样式
import matplotlib.pyplot as plt
import seaborn as sns
# 设置全局图表参数
plt.rcParams.update({
'figure.figsize': (12, 8), # 默认图表大小
'font.size': 12, # 字体大小
'axes.titlesize': 14, # 标题字体大小
'axes.labelsize': 12, # 轴标签字体大小
'xtick.labelsize': 10, # x轴刻度字体大小
'ytick.labelsize': 10, # y轴刻度字体大小
'legend.fontsize': 11, # 图例字体大小
'figure.titlesize': 16 # 图表总标题字体大小
})
# 设置seaborn样式
sns.set_style("whitegrid")
sns.set_palette("husl")
print("🎨 样式配置完成!")
常见问题解决
问题1:Kernel死机或无响应
# 解决方法:
# 1. 在Jupyter界面:Kernel → Restart
# 2. 如果无法操作,在命令行按 Ctrl+C 两次
# 3. 重新启动:jupyter notebook
问题2:图表无法显示
# 解决方案:设置matplotlib后端
%matplotlib inline
# 或者使用交互式后端
# %matplotlib widget
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 9])
plt.title("测试图表")
plt.show()
问题3:中文字体显示问题
# 解决中文显示问题
import matplotlib.pyplot as plt
# Windows系统
plt.rcParams['font.sans-serif'] = ['SimHei'] # 黑体
plt.rcParams['axes.unicode_minus'] = False
# macOS系统
# plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
# Linux系统
# plt.rcParams['font.sans-serif'] = ['DejaVu Sans']
# 测试中文显示
plt.figure(figsize=(8, 6))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.title("中文标题测试")
plt.xlabel("横轴标签")
plt.ylabel("纵轴标签")
plt.show()
print("✅ 中文字体配置完成")
问题4:包导入错误
# 检查包是否安装
import sys
def check_package(package_name):
"""检查包是否已安装"""
try:
__import__(package_name)
print(f"✅ {package_name} 已安装")
return True
except ImportError:
print(f"❌ {package_name} 未安装")
print(f" 安装命令: conda install {package_name}")
return False
# 检查常用包
packages = ['numpy', 'pandas', 'matplotlib', 'seaborn', 'sklearn']
for package in packages:
check_package(package)
问题5:文件路径问题
# 查看和设置工作目录
import os
print(f"📁 当前工作目录: {os.getcwd()}")
# 列出当前目录文件
print(f"📄 当前目录文件:")
for file in os.listdir('.'):
print(f" {file}")
# 改变工作目录(如果需要)
# os.chdir('/path/to/your/project')
Jupyter Notebook最佳实践总结
1. 项目组织
project_name/
├── notebooks/ # 存放.ipynb文件
│ ├── 01_data_exploration.ipynb
│ ├── 02_data_cleaning.ipynb
│ └── 03_modeling.ipynb
├── data/ # 数据文件
│ ├── raw/ # 原始数据
│ └── processed/ # 处理后的数据
├── src/ # 可复用的Python模块
├── output/ # 输出文件(图表、报告等)
└── requirements.txt # 依赖包列表
2. 代码规范
# 好的实践
def analyze_sales_data(df, category=None):
"""
分析销售数据
参数:
df: 销售数据DataFrame
category: 产品类别,默认分析所有类别
返回:
分析结果字典
"""
if category:
df_filtered = df[df['产品类别'] == category]
else:
df_filtered = df.copy()
results = {
'总销售额': df_filtered['销售额'].sum(),
'平均销售额': df_filtered['销售额'].mean(),
'销售次数': len(df_filtered)
}
return results
# 使用函数
results = analyze_sales_data(df, '电子产品')
print("📊 电子产品分析结果:")
for key, value in results.items():
print(f" {key}: {value:,.2f}")
3. 文档编写
## 分析目标
明确说明本次分析要解决什么问题
## 数据说明
- 数据来源
- 数据时间范围
- 字段含义
- 数据质量说明
## 分析方法
说明使用的分析方法和工具
## 主要发现
列出关键发现和洞察
## 结论和建议
给出可操作的建议
4. 版本控制
# 使用git管理Notebook
# 1. 添加.gitignore文件
echo "*.ipynb_checkpoints" >> .gitignore
echo "__pycache__/" >> .gitignore
# 2. 清除输出后提交(避免文件过大)
# 可以使用nbstripout工具自动清除输出
下节课预告
第3讲我们将学习Git版本控制基础,这是程序员必备的技能:
- 什么是版本控制,为什么需要它
- Git的基本概念和工作原理
- 常用Git命令和工作流程
- 如何管理AI项目的代码版本
- GitHub使用入门
掌握了Git,你就可以:
- 追踪代码的每一次修改
- 与团队协作开发
- 回退到历史版本
- 管理不同的功能分支
⭐恭喜完成第2讲!
你已经掌握了Jupyter Notebook的使用方法,这是AI开发中最重要的工具之一。现在你可以优雅地进行数据分析,创建漂亮的可视化图表,编写专业的分析报告。继续加油!