跳转至

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竞赛

记住: 实践是学习数据分析的最好方式!