销售数据分析

复制代码
复制代码
import pandas as pd
复制代码
import numpy as np
复制代码
import matplotlib.pyplot as plt
复制代码
import seaborn as sns
复制代码
from datetime import datetime
复制代码
import warnings
复制代码
warnings.filterwarnings('ignore')
复制代码
​
复制代码
# 设置中文字体
复制代码
plt.rcParams['font.sans-serif'] = ['SimHei']
复制代码
plt.rcParams['axes.unicode_minus'] = False
复制代码
​
复制代码
print("✅ 环境设置完成")
复制代码
✅ 环境设置完成
复制代码
# 生成模拟销售数据
复制代码
np.random.seed(42)
复制代码
​
复制代码
# 创建日期范围
复制代码
dates = pd.date_range('2023-01-01', '2024-01-31', freq='D')
复制代码
​
复制代码
# 生成销售数据
复制代码
data = {
复制代码
    '订单ID': range(1, len(dates) + 1),
复制代码
    '日期': dates,
复制代码
    '产品类别': np.random.choice(['电子产品', '服装', '家居', '食品', '图书'], len(dates), p=[0.3, 0.25, 0.2, 0.15, 0.1]),
复制代码
    '销售额': np.random.normal(500, 200, len(dates)).clip(50, 2000),
复制代码
    '数量': np.random.randint(1, 20, len(dates)),
复制代码
    '客户类型': np.random.choice(['新客户', '老客户', 'VIP客户'], len(dates), p=[0.4, 0.5, 0.1]),
复制代码
    '地区': np.random.choice(['北京', '上海', '广州', '深圳', '杭州', '成都'], len(dates))
复制代码
}
复制代码
​
复制代码
df = pd.DataFrame(data)
复制代码
df['月份'] = df['日期'].dt.to_period('M')
复制代码
df['季度'] = df['日期'].dt.quarter
复制代码
df['星期'] = df['日期'].dt.day_name()
复制代码
​
复制代码
print("📊 数据概览:")
复制代码
print(f"数据形状: {df.shape}")
复制代码
print("\n前5行数据:")
复制代码
display(df.head())
复制代码
​
复制代码
print("\n数据基本信息:")
复制代码
df.info()
复制代码
📊 数据概览:
数据形状: (396, 10)

前5行数据:

| | 订单ID | 日期 | 产品类别 | 销售额 | 数量 | 客户类型 | 地区 | 月份 | 季度 | 星期 |
| 0 | 1 | 2023-01-01 | 服装 | 456.463759 | 5 | 老客户 | 深圳 | 2023-01 | 1 | Sunday |
| 1 | 2 | 2023-01-02 | 图书 | 719.755370 | 5 | 新客户 | 北京 | 2023-01 | 1 | Monday |
| 2 | 3 | 2023-01-03 | 家居 | 665.083270 | 6 | 老客户 | 北京 | 2023-01 | 1 | Tuesday |
| 3 | 4 | 2023-01-04 | 家居 | 662.701927 | 9 | 新客户 | 成都 | 2023-01 | 1 | Wednesday |

4 5 2023-01-05 电子产品 761.095761 2 VIP客户 杭州 2023-01 1 Thursday
复制代码
数据基本信息:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 396 entries, 0 to 395
Data columns (total 10 columns):
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   订单ID    396 non-null    int64         
 1   日期      396 non-null    datetime64[ns]
 2   产品类别    396 non-null    object        
 3   销售额     396 non-null    float64       
 4   数量      396 non-null    int32         
 5   客户类型    396 non-null    object        
 6   地区      396 non-null    object        
 7   月份      396 non-null    period[M]     
 8   季度      396 non-null    int64         
 9   星期      396 non-null    object        
dtypes: datetime64[ns](1), float64(1), int32(1), int64(2), object(4), period[M](1)
memory usage: 29.5+ KB
复制代码
# 生成模拟销售数据
复制代码
np.random.seed(42)
复制代码
​
复制代码
# 创建日期范围
复制代码
dates = pd.date_range('2023-01-01', '2024-01-31', freq='D')
复制代码
​
复制代码
# 生成销售数据
复制代码
data = {
复制代码
    '订单ID': range(1, len(dates) + 1),
复制代码
    '日期': dates,
复制代码
    '产品类别': np.random.choice(['电子产品', '服装', '家居', '食品', '图书'], len(dates), p=[0.3, 0.25, 0.2, 0.15, 0.1]),
复制代码
    '销售额': np.random.normal(500, 200, len(dates)).clip(50, 2000),
复制代码
    '数量': np.random.randint(1, 20, len(dates)),
复制代码
    '客户类型': np.random.choice(['新客户', '老客户', 'VIP客户'], len(dates), p=[0.4, 0.5, 0.1]),
复制代码
    '地区': np.random.choice(['北京', '上海', '广州', '深圳', '杭州', '成都'], len(dates))
复制代码
}
复制代码
​
复制代码
df = pd.DataFrame(data)
复制代码
df['月份'] = df['日期'].dt.to_period('M')
复制代码
df['季度'] = df['日期'].dt.quarter
复制代码
df['星期'] = df['日期'].dt.day_name()
复制代码
​
复制代码
print("📊 数据概览:")
复制代码
print(f"数据形状: {df.shape}")
复制代码
print("\n前5行数据:")
复制代码
display(df.head())
复制代码
​
复制代码
print("\n数据基本信息:")
复制代码
df.info()
复制代码
📊 数据概览:
数据形状: (396, 10)

前5行数据:

| | 订单ID | 日期 | 产品类别 | 销售额 | 数量 | 客户类型 | 地区 | 月份 | 季度 | 星期 |
| 0 | 1 | 2023-01-01 | 服装 | 456.463759 | 5 | 老客户 | 深圳 | 2023-01 | 1 | Sunday |
| 1 | 2 | 2023-01-02 | 图书 | 719.755370 | 5 | 新客户 | 北京 | 2023-01 | 1 | Monday |
| 2 | 3 | 2023-01-03 | 家居 | 665.083270 | 6 | 老客户 | 北京 | 2023-01 | 1 | Tuesday |
| 3 | 4 | 2023-01-04 | 家居 | 662.701927 | 9 | 新客户 | 成都 | 2023-01 | 1 | Wednesday |

4 5 2023-01-05 电子产品 761.095761 2 VIP客户 杭州 2023-01 1 Thursday
复制代码
数据基本信息:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 396 entries, 0 to 395
Data columns (total 10 columns):
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   订单ID    396 non-null    int64         
 1   日期      396 non-null    datetime64[ns]
 2   产品类别    396 non-null    object        
 3   销售额     396 non-null    float64       
 4   数量      396 non-null    int32         
 5   客户类型    396 non-null    object        
 6   地区      396 non-null    object        
 7   月份      396 non-null    period[M]     
 8   季度      396 non-null    int64         
 9   星期      396 non-null    object        
dtypes: datetime64[ns](1), float64(1), int32(1), int64(2), object(4), period[M](1)
memory usage: 29.5+ KB
复制代码
print("📈 基础统计分析")
复制代码
print("=" * 50)
复制代码
​
复制代码
# 总体统计
复制代码
print("总体销售统计:")
复制代码
print(f"总销售额: {df['销售额'].sum():,.2f}元")
复制代码
print(f"平均订单额: {df['销售额'].mean():.2f}元")
复制代码
print(f"总订单数: {df.shape[0]:,}笔")
复制代码
print(f"平均每单数量: {df['数量'].mean():.1f}件")
复制代码
​
复制代码
print("\n月度销售趋势:")
复制代码
monthly_sales = df.groupby('月份')['销售额'].agg(['sum', 'count', 'mean']).round(2)
复制代码
display(monthly_sales)
复制代码
📈 基础统计分析
==================================================
总体销售统计:
总销售额: 196,690.15元
平均订单额: 496.69元
总订单数: 396笔
平均每单数量: 10.1件

月度销售趋势:

| | sum | count | mean |
| 月份 | | | |
| 2023-01 | 16411.57 | 31 | 529.41 |
| 2023-02 | 13914.87 | 28 | 496.96 |
| 2023-03 | 16591.17 | 31 | 535.20 |
| 2023-04 | 15971.49 | 30 | 532.38 |
| 2023-05 | 13672.78 | 31 | 441.06 |
| 2023-06 | 14891.61 | 30 | 496.39 |
| 2023-07 | 14779.17 | 31 | 476.75 |
| 2023-08 | 13753.22 | 31 | 443.65 |
| 2023-09 | 14863.39 | 30 | 495.45 |
| 2023-10 | 16057.34 | 31 | 517.98 |
| 2023-11 | 15521.43 | 30 | 517.38 |
| 2023-12 | 14851.44 | 31 | 479.08 |

2024-01 15410.67 31 497.12
复制代码
# 创建可视化图表
复制代码
fig, axes = plt.subplots(2, 3, figsize=(18, 12))
复制代码
fig.suptitle('销售数据多维度分析', fontsize=16, fontweight='bold')
复制代码
​
复制代码
# 1. 月度销售趋势
复制代码
monthly_trend = df.groupby(df['日期'].dt.to_period('M'))['销售额'].sum()
复制代码
monthly_trend.plot(kind='line', ax=axes[0,0], marker='o', color='#2E86AB')
复制代码
axes[0,0].set_title('月度销售趋势')
复制代码
axes[0,0].set_ylabel('销售额(元)')
复制代码
axes[0,0].tick_params(axis='x', rotation=45)
复制代码
​
复制代码
# 2. 产品类别销售分布
复制代码
category_sales = df.groupby('产品类别')['销售额'].sum().sort_values(ascending=True)
复制代码
category_sales.plot(kind='barh', ax=axes[0,1], color='#A23B72')
复制代码
axes[0,1].set_title('各产品类别销售额')
复制代码
axes[0,1].set_xlabel('销售额(元)')
复制代码
​
复制代码
# 3. 地区销售分布
复制代码
region_sales = df.groupby('地区')['销售额'].sum().sort_values(ascending=True)
复制代码
region_sales.plot(kind='barh', ax=axes[0,2], color='#F18F01')
复制代码
axes[0,2].set_title('各地区销售额')
复制代码
axes[0,2].set_xlabel('销售额(元)')
复制代码
​
复制代码
# 4. 客户类型分析
复制代码
customer_sales = df.groupby('客户类型').agg({
复制代码
    '销售额': ['sum', 'mean', 'count']
复制代码
}).round(2)
复制代码
customer_sales.columns = ['总销售额', '平均订单额', '订单数量']
复制代码
customer_sales['总销售额'].plot(kind='pie', ax=axes[1,0], autopct='%1.1f%%')
复制代码
axes[1,0].set_title('客户类型销售额分布')
复制代码
​
复制代码
# 5. 星期销售分析
复制代码
weekday_sales = df.groupby('星期')['销售额'].mean()
复制代码
weekday_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
复制代码
weekday_sales = weekday_sales.reindex(weekday_order)
复制代码
weekday_sales.plot(kind='bar', ax=axes[1,1], color='#C73E1D')
复制代码
axes[1,1].set_title('各星期平均销售额')
复制代码
axes[1,1].set_ylabel('平均销售额(元)')
复制代码
axes[1,1].tick_params(axis='x', rotation=45)
复制代码
​
复制代码
# 6. 销售额分布直方图
复制代码
axes[1,2].hist(df['销售额'], bins=30, alpha=0.7, color='#3F7CAC', edgecolor='black')
复制代码
axes[1,2].set_title('销售额分布')
复制代码
axes[1,2].set_xlabel('销售额(元)')
复制代码
axes[1,2].set_ylabel('频次')
复制代码
​
复制代码
plt.tight_layout()
复制代码
plt.show()
复制代码
​
复制代码
# 客户价值分析
复制代码
print("👥 客户价值分析")
复制代码
print("=" * 50)
复制代码
​
复制代码
customer_analysis = df.groupby('客户类型').agg({
复制代码
    '销售额': ['sum', 'mean', 'count'],
复制代码
    '数量': 'mean'
复制代码
}).round(2)
复制代码
​
复制代码
customer_analysis.columns = ['总销售额', '平均订单额', '订单数量', '平均数量']
复制代码
display(customer_analysis)
复制代码
​
复制代码
# RFM 分析(简化版)
复制代码
print("\n📊 RFM分析 (Recency, Frequency, Monetary)")
复制代码
print("=" * 50)
复制代码
​
复制代码
# 假设最近日期为分析日期
复制代码
analysis_date = df['日期'].max()
复制代码
​
复制代码
rfm = df.groupby('客户类型').agg({
复制代码
    '日期': lambda x: (analysis_date - x.max()).days,  # 最近购买时间
复制代码
    '订单ID': 'count',  # 购买频次
复制代码
    '销售额': 'sum'     # 购买金额
复制代码
}).round(2)
复制代码
​
复制代码
rfm.columns = ['最近购买天数', '购买频次', '总金额']
复制代码
display(rfm)
复制代码
👥 客户价值分析
==================================================

| | 总销售额 | 平均订单额 | 订单数量 | 平均数量 |
| 客户类型 | | | | |
| VIP客户 | 18691.46 | 519.21 | 36 | 10.78 |
| 新客户 | 73050.71 | 490.27 | 149 | 9.93 |

老客户 104947.98 497.38 211 10.10
复制代码
📊 RFM分析 (Recency, Frequency, Monetary)
==================================================

| | 最近购买天数 | 购买频次 | 总金额 |
| 客户类型 | | | |
| VIP客户 | 2 | 36 | 18691.46 |
| 新客户 | 1 | 149 | 73050.71 |

老客户 0 211 104947.98
复制代码
# 简单的移动平均预测
复制代码
print("🔮 销售预测分析")
复制代码
print("=" * 50)
复制代码
​
复制代码
# 计算月度数据
复制代码
monthly_data = df.groupby(df['日期'].dt.to_period('M'))['销售额'].sum().reset_index()
复制代码
monthly_data['日期'] = monthly_data['日期'].dt.to_timestamp()
复制代码
​
复制代码
# 计算移动平均
复制代码
monthly_data['3月移动平均'] = monthly_data['销售额'].rolling(window=3).mean()
复制代码
monthly_data['预测'] = monthly_data['3月移动平均'].shift(1)
复制代码
​
复制代码
print("月度销售数据与预测:")
复制代码
display(monthly_data.tail(6))
复制代码
​
复制代码
# 绘制预测图
复制代码
plt.figure(figsize=(12, 6))
复制代码
plt.plot(monthly_data['日期'], monthly_data['销售额'], marker='o', label='实际销售额', linewidth=2)
复制代码
plt.plot(monthly_data['日期'], monthly_data['3月移动平均'], marker='s', label='3月移动平均', linestyle='--')
复制代码
plt.plot(monthly_data['日期'], monthly_data['预测'], marker='^', label='预测', linestyle=':')
复制代码
plt.title('销售趋势与预测')
复制代码
plt.ylabel('销售额(元)')
复制代码
plt.xlabel('日期')
复制代码
plt.legend()
复制代码
plt.grid(True, alpha=0.3)
复制代码
plt.xticks(rotation=45)
复制代码
plt.tight_layout()
复制代码
plt.show()
复制代码
🔮 销售预测分析
==================================================
月度销售数据与预测:

| | 日期 | 销售额 | 3月移动平均 | 预测 |
| 7 | 2023-08-01 | 13753.219574 | 14474.665291 | 14447.852675 |
| 8 | 2023-09-01 | 14863.387926 | 14465.258330 | 14474.665291 |
| 9 | 2023-10-01 | 16057.341556 | 14891.316352 | 14465.258330 |
| 10 | 2023-11-01 | 15521.429799 | 15480.719761 | 14891.316352 |
| 11 | 2023-12-01 | 14851.437307 | 15476.736221 | 15480.719761 |

12 2024-01-01 15410.666148 15261.177751 15476.736221
复制代码
复制代码
print("📋 销售分析总结报告")
复制代码
print("=" * 60)
复制代码
​
复制代码
# 计算关键指标
复制代码
total_sales = df['销售额'].sum()
复制代码
avg_order_value = df['销售额'].mean()
复制代码
total_orders = df.shape[0]
复制代码
top_category = df.groupby('产品类别')['销售额'].sum().idxmax()
复制代码
top_region = df.groupby('地区')['销售额'].sum().idxmax()
复制代码
best_weekday = df.groupby('星期')['销售额'].mean().idxmax()
复制代码
​
复制代码
print(f"""
复制代码
📈 销售绩效总结:
复制代码
• 总销售额: {total_sales:,.2f} 元
复制代码
• 总订单数: {total_orders:,} 笔
复制代码
• 平均订单价值: {avg_order_value:.2f} 元
复制代码
• 最畅销品类: {top_category}
复制代码
• 最佳销售地区: {top_region}
复制代码
• 销售最佳星期: {best_weekday}
复制代码
​
复制代码
🎯 业务洞察:
复制代码
1. 销售最高的产品类别是 {top_category},建议加大该品类库存和营销投入
复制代码
2. {top_region} 地区表现最佳,可考虑在该地区开设新店或增加营销预算
复制代码
3. {best_weekday} 的客单价最高,适合在这天推出促销活动
复制代码
​
复制代码
💡 建议行动:
复制代码
• 针对 {top_category} 品类进行深度营销
复制代码
• 在 {top_region} 地区扩大市场份额
复制代码
• 优化 {best_weekday} 的库存和人员安排
复制代码
• 加强客户关系管理,提高复购率
复制代码
""")
复制代码
📋 销售分析总结报告
============================================================

📈 销售绩效总结:
• 总销售额: 196,690.15 元
• 总订单数: 396 笔
• 平均订单价值: 496.69 元
• 最畅销品类: 电子产品
• 最佳销售地区: 杭州
• 销售最佳星期: Wednesday

🎯 业务洞察:
1. 销售最高的产品类别是 电子产品,建议加大该品类库存和营销投入
2. 杭州 地区表现最佳,可考虑在该地区开设新店或增加营销预算
3. Wednesday 的客单价最高,适合在这天推出促销活动

💡 建议行动:
• 针对 电子产品 品类进行深度营销
• 在 杭州 地区扩大市场份额
• 优化 Wednesday 的库存和人员安排
• 加强客户关系管理,提高复购率
相关推荐
用户956256254299 分钟前
15 分钟社媒简报 Agent:我只用了搜索和模型两步
python·api
Dumbness12 分钟前
关键词回复里写了 {订单号},群机器人整条消息都炸了
python·微信
调接口的阿光13 分钟前
调用对话接口时输出被截断怎么办:先看 finish_reason,再决定是续写一次、缩小范围,还是换成更短的格式(Python)
人工智能·python
Cooper2525 分钟前
单文件 Flask 跑通微信服务器校验:先跑通再谈工程化
python·flask
Cooper2526 分钟前
三源热榜去重加 AI 摘要:URL 唯一键踩出的三个坑
前端·python
用户40199255686129 分钟前
多源异构 B2B 公开需求信号去重与企业实体证据链存储设计(64-bit SimHash 分桶 + Jaccard)
python
aifannihao1 小时前
GitHub Actions 锁文件实测:6 个 uses 只锁住 2 个
python·ci/cd·标准库·供应链安全·github actions
2601_967980111 小时前
使用gensim处理文本(1)语料库与词向量空间
python·自然语言处理·gensim·词向量·文本分析
starzy19901 小时前
深入理解Scala隐式值:编译期自动装配
开发语言·后端·scala
布莱克6052 小时前
Swift 条件语句详解:从 if 到 switch 的完整指南
开发语言·ssh·swift·switch·条件语句·guard·if