销售数据分析

复制代码
复制代码
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 的库存和人员安排
• 加强客户关系管理,提高复购率
相关推荐
兵慌码乱8 小时前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot9 小时前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海14 小时前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱16 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽21 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码21 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱1 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵1 天前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio2 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663672 天前
使用 Python 从零创建 Word 文档
python