【零基础学AI】第2讲:Jupyter Notebook使用

发布于:2025-06-25 ⋅ 阅读:(26) ⋅ 点赞:(0)

在这里插入图片描述

本节课你将学到

  • 理解什么是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

启动后会发生什么:

  1. 命令行显示服务器信息
  2. 自动打开浏览器
  3. 显示文件管理界面

方法二:指定目录启动

# 先进入工作目录
cd D:\AI_Projects  # Windows示例
# 或
cd ~/AI_Projects   # macOS/Linux示例

# 再启动Jupyter
conda activate ai-learning
jupyter notebook

方法三:Anaconda Navigator启动

  1. 打开Anaconda Navigator
  2. 确保环境选择为"ai-learning"
  3. 点击Jupyter Notebook下的"Launch"

⚠️ 启动成功的标志:

  • 浏览器自动打开并显示文件列表
  • 地址栏显示:http://localhost:8888
  • 命令行显示服务器运行信息

Jupyter Notebook界面介绍

主界面(Dashboard)

启动后看到的文件管理界面包含:

  • 文件列表:显示当前目录的所有文件和文件夹
  • 新建按钮:右上角"New",可以创建新的Notebook
  • 上传按钮:上传本地文件到当前目录
  • 工具栏:刷新、删除、重命名等操作

创建新的Notebook

  1. 点击右上角"New"按钮
  2. 选择"Python 3 (ipykernel)"
  3. 自动打开新的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
  1. 选择一个Cell
  2. 点击工具栏的下拉菜单,选择"Markdown"
  3. 或者按快捷键"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

  1. 在Jupyter主界面点击"New" → “Python 3”
  2. 将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开发中最重要的工具之一。现在你可以优雅地进行数据分析,创建漂亮的可视化图表,编写专业的分析报告。继续加油!


网站公告

今日签到

点亮在社区的每一天
去签到