销售数据分析

复制代码
复制代码
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 的库存和人员安排
• 加强客户关系管理,提高复购率
相关推荐
爱睡懒觉的焦糖玛奇朵6 小时前
【从视频到数据集:焦糖玛奇朵的魔法工具使用说明】
人工智能·python·深度学习·学习·算法·yolo·音视频
潜创微科技7 小时前
IT6520:USB‑C 转 MIPI 芯片方案 4K@120Hz 高清显示
c语言·开发语言
yangshicong7 小时前
第11章:结构化输出与数据提取 —— 让 AI 直接返回你想要的数据格式
数据库·人工智能·redis·python·langchain·ai编程
言之。8 小时前
【Python】免费的中文 AI 配音方案
开发语言·人工智能·python
Warson_L8 小时前
python dict key详解
python
天天进步20158 小时前
Python全栈项目:从零手操一个高性能 API 网关
开发语言·python
Java面试题总结8 小时前
java高频面试题(2026最新)
java·开发语言·jvm·数据库·spring·缓存
安生生申9 小时前
使用pygame实现2048
开发语言·python·pygame
hh.h.10 小时前
CANN算子开发入门:从零开始写第一个Ascend C算子
c语言·开发语言·cann·c算子
AI科技星10 小时前
全域数学·第三部·数术几何部·平行网格卷 完整专著目录(含拓扑发展史+学科定位·终稿)
c语言·开发语言·网络·量子计算·agi