销售数据分析

复制代码
复制代码
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 的库存和人员安排
• 加强客户关系管理,提高复购率
相关推荐
汤姆小白5 分钟前
01-环境搭建与项目导览
人工智能·python·机器学习·numpy
科技道人4 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
向日的葵0066 小时前
langchain的Tools教程(三)
python·langchain·tools
逝水无殇7 小时前
C# 异常处理详解
开发语言·后端·c#
言乐67 小时前
Python实现可运行解密游戏游戏框架
python·游戏·小程序·游戏程序·关卡设计
YUS云生8 小时前
Python学习笔记·第31天:FastAPI入门——路由、路径参数、查询参数与请求体
笔记·python·学习
玖玥拾8 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
智写-AI8 小时前
真实有效的免费降英文AI工具服务商
人工智能·python
铅笔侠_小龙虾8 小时前
Rust 学习目录
开发语言·学习·rust
yuhuofei20219 小时前
【Python入门】了解掌握Python中函数的基本使用
python