Python数据汇总案例实操?

wen python案例 3

本文目录导读:

  1. 案例场景:电商销售数据汇总
  2. 实用小技巧

我来给你一个完整的Python数据汇总案例实操,包含多种常见场景。

案例场景:电商销售数据汇总

假设我们是一家电商公司,需要对销售数据进行多维度汇总分析。

1️⃣ 准备环境

import pandas as pd
import numpy as np
from datetime import datetime, timedelta
import random
# 生成示例数据
np.random.seed(42)
# 创建日期范围
dates = [datetime(2024, 1, 1) + timedelta(days=x) for x in range(90)]
# 生成模拟销售数据
data = {
    '订单日期': np.random.choice(dates, 1000),
    '商品类别': np.random.choice(['电子产品', '服装', '食品', '家居', '图书'], 1000),
    '商品名称': np.random.choice(['手机', '笔记本', 'T恤', '零食', '台灯', '小说'], 1000),
    '销售数量': np.random.randint(1, 10, 1000),
    '单价': np.random.choice([1999, 4999, 129, 29.9, 199, 39.9], 1000),
    '城市': np.random.choice(['北京', '上海', '广州', '深圳', '杭州'], 1000),
    '客户等级': np.random.choice(['VIP', '普通', '新客户'], 1000)
}
# 创建DataFrame
df = pd.DataFrame(data)
# 计算销售额
df['销售额'] = df['销售数量'] * df['单价']
print("原始数据前5行:")
print(df.head())
print(f"\n数据形状:{df.shape}")

2️⃣ 基础数据汇总

# 1. 整体数据概览
print("=== 整体数据概况 ===")
print(f"总订单数:{len(df)}")
print(f"总销售额:{df['销售额'].sum():,.2f}元")
print(f"总销量:{df['销售数量'].sum():,}件")
print(f"平均订单金额:{df['销售额'].mean():,.2f}元")
print(f"最高订单金额:{df['销售额'].max():,.2f}元")
# 2. 按类别汇总
print("\n=== 按商品类别汇总 ===")
category_summary = df.groupby('商品类别').agg({
    '销售数量': 'sum',
    '销售额': ['sum', 'mean', 'count'],
    '单价': 'mean'
}).round(2)
print(category_summary)
# 3. 更清晰的汇总方式
print("\n=== 各品类销售报表 ===")
category_report = df.groupby('商品类别').agg(
    订单数=('订单日期', 'count'),
    总销量=('销售数量', 'sum'),
    总销售额=('销售额', 'sum'),
    平均单价=('单价', 'mean'),
    平均每单金额=('销售额', 'mean')
).round(2).sort_values('总销售额', ascending=False)
print(category_report)

3️⃣ 多维度交叉汇总

# 1. 城市 × 类别的交叉汇总
print("=== 城市 × 商品类别 销售矩阵 ===")
cross_sales = pd.pivot_table(
    df,
    values='销售额',
    index='城市',
    columns='商品类别',
    aggfunc='sum',
    fill_value=0,
    margins=True,
    margins_name='合计'
).round(2)
print(cross_sales)
# 2. 客户等级 × 时间维度
print("\n=== 各客户等级月度销售额 ===")
df['月份'] = df['订单日期'].dt.month
customer_monthly = df.groupby(['客户等级', '月份'])['销售额'].sum().unstack()
print(customer_monthly.round(2))
# 3. 三维度交叉汇总
print("\n=== 城市 × 类别 × 客户等级 ===")
three_dim = pd.crosstab(
    index=[df['城市'], df['商品类别']],
    columns=df['客户等级'],
    values=df['销售额'],
    aggfunc='sum'
).round(2)
print(three_dim)

4️⃣ 时间序列汇总

# 1. 每日销售额趋势
print("=== 每日销售额趋势 ===")
daily_sales = df.groupby('订单日期')['销售额'].sum()
print(f"日销售额统计:")
print(f"最高日销售额:{daily_sales.max():,.2f}元")
print(f"最低日销售额:{daily_sales.min():,.2f}元")  
print(f"日均销售额:{daily_sales.mean():,.2f}元")
# 2. 周度汇总
print("\n=== 周度销售汇总 ===")
df['周'] = df['订单日期'].dt.isocalendar().week
weekly_sales = df.groupby('周').agg(
    订单数=('订单日期', 'count'),
    总销售额=('销售额', 'sum'),
    平均销售额=('销售额', 'mean')
).round(2)
print(weekly_sales)
# 3. 移动平均计算
print("\n=== 7天移动平均销售额 ===")
daily_sales_ma = daily_sales.rolling(window=7).mean()
print("前7天移动平均(最后几天):")
print(daily_sales_ma.tail())

5️⃣ 高级汇总分析

# 1. Top N 分析
print("=== TOP 5 畅销商品 ===")
top_products = df.groupby('商品名称').agg(
    总销量=('销售数量', 'sum'),
    总销售额=('销售额', 'sum'),
    订单数=('订单日期', 'count')
).sort_values('总销售额', ascending=False).head(5)
print(top_products)
# 2. 客户价值分群
print("\n=== 客户消费等级分布 ===")
def customer_level(amount):
    if amount > 5000:
        return '高价值'
    elif amount > 1000:
        return '中价值'
    else:
        return '低价值'
df['消费等级'] = df['销售额'].apply(customer_level)
level_distribution = df.groupby('消费等级').agg(
    人数=('客户等级', 'count'),
    总销售额=('销售额', 'sum'),
    平均销售额=('销售额', 'mean')
).round(2)
print(level_distribution)
# 3. 销售效率分析
print("\n=== 各品类销售效率 ===")
efficiency = df.groupby('商品类别').agg(
    销售额占比=('销售额', lambda x: f"{x.sum()/df['销售额'].sum()*100:.1f}%"),
    销量占比=('销售数量', lambda x: f"{x.sum()/df['销售数量'].sum()*100:.1f}%"),
    平均每单件数=('销售数量', 'mean')
).round(2)
print(efficiency)

6️⃣ 输出报告

# 生成完整汇总报告
def generate_summary_report(df):
    """生成完整的销售汇总报告"""
    report = []
    report.append("=" * 50)
    report.append("电商销售数据汇总报告")
    report.append(f"报告生成时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    report.append("=" * 50)
    # 1. 总体概况
    total_sales = df['销售额'].sum()
    total_orders = len(df)
    avg_order = df['销售额'].mean()
    report.append(f"\n📊 总体概况")
    report.append(f"总订单数:{total_orders:,}")
    report.append(f"总销售额:{total_sales:,.2f}元")
    report.append(f"平均订单金额:{avg_order:,.2f}元")
    # 2. 分类汇总
    report.append(f"\n📦 各类别销售情况")
    category_stats = df.groupby('商品类别')['销售额'].agg(['sum', 'mean', 'count'])
    for cat, stats in category_stats.iterrows():
        report.append(f"{cat}: 销售额{stats['sum']:,.0f}元, 平均{stats['mean']:,.0f}元/单")
    # 3. Top城市
    report.append(f"\n🏙️ 城市排名")
    city_sales = df.groupby('城市')['销售额'].sum().sort_values(ascending=False)
    for rank, (city, sales) in enumerate(city_sales.items(), 1):
        report.append(f"第{rank}名 {city}: {sales:,.0f}元")
    report.append("\n" + "=" * 50)
    report.append("报告结束")
    report.append("=" * 50)
    return "\n".join(report)
# 生成并打印报告
report = generate_summary_report(df)
print(report)

7️⃣ 数据导出

# 保存汇总结果
summary_data = {
    '类别汇总': category_report,
    '销售矩阵': cross_sales,
    '月度趋势': customer_monthly,
    'Top商品': top_products
}
# 可以将这些DataFrame保存到Excel
with pd.ExcelWriter('销售汇总报告.xlsx') as writer:
    for sheet_name, data in summary_data.items():
        data.to_excel(writer, sheet_name=sheet_name)
print("报告已保存到 '销售汇总报告.xlsx'")

实用小技巧

# 1. 快速统计各列的非空值、类型等
print(df.describe(include='all'))
# 2. 异常值检测
q1 = df['销售额'].quantile(0.25)
q3 = df['销售额'].quantile(0.75)
iqr = q3 - q1
outliers = df[(df['销售额'] < q1 - 1.5*iqr) | (df['销售额'] > q3 + 1.5*iqr)]
print(f"异常订单数:{len(outliers)}")
# 3. 分组后保留前N条
top_orders_per_city = df.groupby('城市').apply(
    lambda x: x.nlargest(3, '销售额')
).reset_index(drop=True)

这个案例覆盖了:

  • ✅ 基础数据汇总
  • ✅ 多维度交叉分析
  • ✅ 时间序列处理
  • ✅ 客户价值分析
  • ✅ 自动生成报告
  • ✅ 数据导出

你可以根据自己的实际数据调整这些代码!

标签: 案例实操

抱歉,评论功能暂时关闭!