04 - 实战项目¶
学习时间: 4-6小时 重要性: ⭐⭐⭐⭐⭐ 综合应用所学知识
🎯 项目目标¶
完成一个完整的数据分析流程: 1. 数据加载 2. 数据清洗 3. 数据分析 4. 结果可视化
📊 项目1: 销售数据分析¶
Python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 1. 创建示例数据
np.random.seed(42)
dates = pd.date_range('2026-01-01', periods=100)
data = pd.DataFrame({
'date': dates,
'product': np.random.choice(['A', 'B', 'C'], 100),
'sales': np.random.randint(10, 100, 100),
'price': np.random.uniform(10, 50, 100).round(2)
})
# 2. 数据清洗
data['total'] = data['sales'] * data['price']
data['month'] = data['date'].dt.month
# 3. 数据分析
# 按产品分组
product_stats = data.groupby('product').agg({
'sales': 'sum',
'total': 'sum'
})
# 按月统计
monthly_sales = data.groupby('month')['total'].sum()
# 4. 可视化
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# 产品销量
product_stats['sales'].plot(kind='bar', ax=axes[0, 0])
axes[0, 0].set_title('各产品销量')
axes[0, 0].set_xlabel('产品')
axes[0, 0].set_ylabel('销量')
# 产品销售额
product_stats['total'].plot(kind='bar', ax=axes[0, 1])
axes[0, 1].set_title('各产品销售额')
axes[0, 1].set_xlabel('产品')
axes[0, 1].set_ylabel('销售额')
# 月度趋势
monthly_sales.plot(kind='line', ax=axes[1, 0])
axes[1, 0].set_title('月度销售趋势')
axes[1, 0].set_xlabel('月份')
axes[1, 0].set_ylabel('销售额')
# 价格分布
data['price'].hist(bins=20, ax=axes[1, 1])
axes[1, 1].set_title('价格分布')
axes[1, 1].set_xlabel('价格')
axes[1, 1].set_ylabel('频数')
plt.tight_layout()
plt.show()
# 5. 结论
print("分析结论:")
print(f"最畅销产品: {product_stats['sales'].idxmax()}")
print(f"最高销售额产品: {product_stats['total'].idxmax()}")
print(f"总销售额: {data['total'].sum():.2f}")
📝 项目2: 数据清洗挑战¶
Python
import pandas as pd
import numpy as np
# 创建有问题的数据
data = pd.DataFrame({
'name': ['张三', '李四', None, '王五', '张三', '赵六'],
'age': [25, 30, None, 35, 25, None],
'salary': [5000, None, 7000, 8000, 5000, 6000],
'city': ['北京', '上海', '北京', None, '北京', '深圳']
})
# 清洗步骤
print("原始数据:")
print(data)
print(f"\n缺失值统计:\n{data.isnull().sum()}")
# 1. 处理重复值
data = data.drop_duplicates()
print("\n删除重复值后:")
print(data)
# 2. 填充缺失值
data['age'] = data['age'].fillna(data['age'].median())
data['salary'] = data['salary'].fillna(data['salary'].mean())
data['city'] = data['city'].fillna('未知')
print("\n填充缺失值后:")
print(data)
# 3. 转换类型
data['age'] = data['age'].astype(int)
# 4. 添加分类
data['age_category'] = pd.cut(data['age'], bins=[0, 30, 40, 100],
labels=['青年', '中年', '老年'])
print("\n最终数据:")
print(data)
🎯 项目任务¶
任务1: 分析你自己的数据¶
选择一个你感兴趣的数据集: 1. 从Kaggle下载 2. 使用公开API 3. 自己收集数据
完成以下分析: - [ ] 数据加载和基本信息查看 - [ ] 数据清洗(处理缺失值、重复值等) - [ ] 探索性数据分析(统计、可视化) - [ ] 得出结论并报告
任务2: 自动化报告¶
创建一个脚本,自动生成数据分析报告:
Python
def generate_report(data_path):
"""生成数据分析报告"""
# 1. 加载数据
df = pd.read_csv(data_path)
# 2. 基本信息
print("=== 数据基本信息 ===")
print(f"形状: {df.shape}")
print(f"列名: {df.columns.tolist()}")
# 3. 统计摘要
print("\n=== 统计摘要 ===")
print(df.describe())
# 4. 缺失值分析
print("\n=== 缺失值 ===")
print(df.isnull().sum())
# 5. 可视化
df.hist(figsize=(12, 8))
plt.tight_layout()
plt.savefig('report.png')
return df
🎯 自我检查¶
完成项目后,你应该:
- 能独立完成数据分析
- 能处理真实数据
- 能生成可视化报告
- 能从数据中得出结论
📚 推荐数据集¶
🎉 恭喜完成阶段3!¶
你已经完成了数据科学核心库的学习!
下一步建议: 1. 多做项目,积累经验 2. 进入阶段4: AI/ML常用库 3. 尝试Kaggle竞赛
记住: 实践是学习数据分析的最好方式!