侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1825 篇文章
  • 累计收到 0 条评论

电商销售数据清洗与分析

2025-12-12 / 0 评论 / 15 阅读

题目

电商销售数据清洗与分析

信息

  • 类型:问答
  • 难度:⭐⭐

考点

缺失值处理,异常值检测,分组聚合,条件筛选,数据可视化

快速回答

解决该问题的核心步骤:

  1. 使用pd.read_csv()加载数据并检查缺失值
  2. category列缺失值用'Unknown'填充
  3. 通过分位数法检测sales_amount异常值:Q1 = df['sales_amount'].quantile(0.25), Q3 = df['sales_amount'].quantile(0.75)
  4. 用中位数替换异常值:df.loc[outliers, 'sales_amount'] = median_val
  5. 分组计算平均销售额:df.groupby('category')['sales_amount'].mean()
  6. 使用matplotlib绘制柱状图展示结果
## 解析

问题场景

给定电商销售数据(sales_data.csv),包含字段:order_id, product_name, category, sales_amount, order_date。数据存在以下问题:
1. category列有缺失值
2. sales_amount存在异常负值和极大值
需要:
• 清洗数据并处理异常
• 计算各产品类别的平均销售额
• 可视化展示结果

解决方案

1. 数据加载与探索

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('sales_data.csv')
print(df.info())  # 检查缺失值和数据类型
print(df.describe())  # 数值分布统计

2. 缺失值处理

原理:分类变量缺失适合用占位符填充
代码

df['category'] = df['category'].fillna('Unknown')  # 保留记录不删除

3. 异常值检测与处理

原理:使用IQR(四分位距)法识别异常值
计算逻辑
• Q1 = 25%分位数, Q3 = 75%分位数
• IQR = Q3 - Q1
• 异常值边界: [Q1 - 1.5*IQR, Q3 + 1.5*IQR]
代码

q1 = df['sales_amount'].quantile(0.25)
q3 = df['sales_amount'].quantile(0.75)
iqr = q3 - q1
lower_bound = q1 - 1.5*iqr
upper_bound = q3 + 1.5*iqr

# 标识异常值
outliers = (df['sales_amount'] < lower_bound) | (df['sales_amount'] > upper_bound)

# 用中位数替换(避免均值受异常值影响)
median_val = df['sales_amount'].median()
df.loc[outliers, 'sales_amount'] = median_val

4. 分组聚合分析

category_sales = df.groupby('category')['sales_amount'].mean().sort_values(ascending=False)
print(category_sales)

5. 数据可视化

plt.figure(figsize=(10,6))
category_sales.plot(kind='bar', color='skyblue')
plt.title('Average Sales by Category')
plt.xlabel('Product Category')
plt.ylabel('Average Sales Amount')
plt.xticks(rotation=45)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

最佳实践

  • 异常值处理:优先业务判断,技术手段需结合领域知识
  • 缺失值填充:分类变量用占位符,连续变量考虑中位数/众数
  • 内存优化:大数据集使用category数据类型:df['category'] = df['category'].astype('category')

常见错误

  • 直接删除缺失值导致样本偏差
  • 用均值替换异常值(易被极端值扭曲)
  • 未排序直接可视化(降低可读性)
  • 忽略负销售额的业务含义(可能是退货)

扩展知识

  • 高级异常检测:Z-score方法、孤立森林算法
  • 缺失值处理:多重插补法(IterativeImputer
  • 分组增强groupby+agg多指标计算:
    df.groupby('category').agg(
        avg_sales=('sales_amount','mean'),
        total_orders=('order_id','count')
    )
  • 可视化优化:使用seaborn库增强图表专业性