哈喽各位数据爱好者、Python 学习者!今天分享一套完整的电商订单数据分析综合实战项目,基于 10 万 + 真实订单数据,从数据加载、清洗、多维度营收可视化、退款分析,到经典LRFM 用户模型搭配K-Means 聚类完成用户分层,一站式走完商业数据分析全流程。新手可跟着代码复现,职场人也能借鉴思路落地业务分析,干货满满👇

一、项目背景与所用工具

本次分析依托电商订单数据集order2021kmeans.xlsx,数据集包含订单信息、用户、渠道、平台、时间、付款金额、是否退款等 11 个字段,总计 104557 条原始订单记录,覆盖全时段用户消费行为。

核心工具库

  • 数据处理:pandasnumpy
  • 可视化绘图:matplotlibpyecharts(交互式图表)
  • 机器学习聚类:sklearn(K-Means、数据标准化)
  • 环境适配:统一中文显示、屏蔽运行警告

环境初始化代码

python

运行

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from pyecharts.charts import *
from pyecharts import options as opts

import warnings
warnings.filterwarnings('ignore')  # 忽略警告信息
mpl.rcParams['font.sans-serif']=['SimHei']  # 解决matplotlib中文乱码
mpl.rcParams['axes.unicode_minus']=False    # 解决负号显示异常

二、数据加载与预处理(数据分析基石)

原始数据存在空值、负金额异常值等问题,先完成数据探查与清洗,保障后续分析结果准确。

1. 加载数据并初步探查

python

运行

# 读取Excel订单数据
df=pd.read_excel('order2021kmeans.xlsx')
df.head()

# 查看数据基本信息:字段、数据类型、缺失值
df.info()

# 查看数值型字段统计描述(均值、极值、分位数)
df.describe()

数据概况:数据集共 104557 条记录,包含订单号、用户名、渠道编号、付款时间、付款金额、是否退款等字段;渠道编号存在少量缺失值,付款金额存在负数异常数据。

2. 数据清洗(去重、异常值、缺失值)

python

运行

# 1. 检查并去除重复值
df.duplicated().sum()
# df.drop_duplicates(inplace=True)  # 本数据集无重复,无需执行

# 2. 处理付款金额负数异常值(取绝对值)
df['付款金额']=df['付款金额'].abs()

# 3. 删除缺失值
df.isnull().sum()
df.dropna(inplace=True)

清洗后数据规整,消除脏数据对分析结果的干扰。

三、多维度营收可视化分析

围绕渠道、月份、每日时段三大核心维度拆解营收分布,直观定位营收主力、消费高峰,为运营策略提供数据支撑。

1. 按渠道分析整体收益

渠道是电商流量与营收的核心入口,先统计各渠道总收益,分别用柱状图、饼图展示。

python

运行

# 按渠道分组汇总付款金额,并降序排序
channel_revenue=df.groupby('渠道编号')['付款金额'].sum().sort_values(ascending=False).reset_index()

# Matplotlib柱状图
plt.figure(figsize=(10,8))
plt.bar(channel_revenue['渠道编号'],channel_revenue['付款金额'])
plt.xticks(rotation=45)
plt.title('按渠道划分的收益')
plt.xlabel('渠道编号')
plt.ylabel('收益')
plt.show()

# Pyecharts玫瑰饼图(交互式)
data=[list(z) for z in zip(channel_revenue['渠道编号'],channel_revenue['付款金额'])]
pie=(
    Pie()
    .add('渠道收益',data,rosetype='radius',radius=["20%","60%"])
    .set_global_opts(title_opts=opts.TitleOpts(title='按渠道划分的收益'))
)
pie.render_notebook()

分析结论:从图表可清晰看出各渠道营收差距,部分头部渠道贡献了主要营收,可针对性加大优质渠道投放,缩减低效渠道成本。

2. 按月份分析整体营收

挖掘全年营收淡旺季,辅助备货、营销活动排期。

python

运行

# 提取付款时间中的月份
df['月份']=df['付款时间'].dt.month
# 按月汇总收益
month_revenue=df.groupby('月份')['付款金额'].sum().reset_index()

# 绘制月度收益柱状图
plt.figure(figsize=(10,8))
plt.bar(month_revenue['月份'],month_revenue['付款金额'])
plt.xticks(range(1,13))
plt.title('按月份划分的收益')
plt.xlabel('月份')
plt.ylabel('收益')
plt.show()

3. 按每日时段分析营收(小时 + 星期)

细化到星期 + 小时维度,定位用户下单高峰时段,指导客服排班、限时活动设置。

python

运行

# 筛选正常订单(排除退款订单)
data=df.loc[df['是否退款']=='否']

# 提取小时、日期、星期名称
data['付款小时'] =data['付款时间'].dt.hour
data['付款天数'] = data['付款时间'].dt.day
data['付款天数名称'] = data['付款时间'].dt.day_name()

# 按星期+小时汇总营收
hourly_sales =data.groupby(['付款天数名称','付款小时'])['付款金额'].sum().reset_index()
hourly_sales = hourly_sales.rename(columns={'付款金额': 'TotalValue'})

# 按24小时为一组切分数据
split_dfs = []
num_groups = len(hourly_sales) // 24
for i in range(num_groups):
    start_index = i * 24
    end_index = start_index + 24
    split_df = hourly_sales.iloc[start_index:end_index]
    split_dfs.append(split_df)

# 绘制多折线图,展示每周各时段营收
name=hourly_sales['付款天数名称'].unique()
line=(
    Line()
    .add_xaxis(split_dfs[0]['付款小时'].astype(str).tolist())
    .set_global_opts(
        title_opts={"text":"每日每小时收益总额"},
        legend_opts=opts.LegendOpts(
            is_show=True,
            orient='vertical',
            pos_top='5%',
            pos_right='5%'
        )
    )
)
for i in range(num_groups):
    line.add_yaxis(name[i],split_dfs[i]['TotalValue'].tolist(),label_opts=opts.LabelOpts(is_show=False))
line.render_notebook()

四、月度退款数据分析

退款率是电商风控、商品品控的核心指标,单独提取退款订单,分析全年月度退款金额走势。

python

运行

# 提取月份
df['月份']=df['付款时间'].dt.month
# 筛选退款订单
data=df.loc[df['是否退款']=='是']
# 按月汇总退款金额
refund=data.groupby('月份')['付款金额'].sum()
# 绘制退款金额折线图
refund.plot(kind='line',title='每个月份退款金额')
plt.show()

业务参考:结合月度营收与月度退款数据,可对比 “高营收月份是否伴随高退款”,排查是否为活动促销引发售后问题,针对性优化商品与服务。

五、LRFM 模型 + K-Means 聚类:用户分层实战

营收分析完成后,进阶做用户画像与分群。本次采用LRFM 模型(延伸经典 RFM 模型)结合 K-Means 聚类算法,将用户划分为不同群体,实现精细化运营。

1. 概念科普

  • L (最近消费间隔):用户两次消费的时间间隔;
  • R (最近消费距今天数):用户最后一次消费距离数据截止日的天数;
  • F (消费频率):用户总下单次数;
  • M (消费总额):用户累计付款金额;
  • K-Means 聚类:无监督机器学习算法,根据用户四维度特征自动分群,摆脱人工划分的主观性。

2. 构建 LRFM 指标表

python

运行

# 统一时间格式
data['付款时间']=pd.to_datetime(data['付款时间'])
max_date = max(data['付款时间'])

# 计算R指标:最近消费距今天数
data['diff']= max_date - data['付款时间']
data['diff']=data['diff'].dt.days
R = data.groupby('用户名')['diff'].min().reset_index()

# 计算F指标:消费频率(订单数)
F = data.groupby('用户名')['订单号'].count().reset_index()

# 计算M指标:累计消费金额
M = data.groupby('用户名')['付款金额'].sum().reset_index()

# 合并LRFM四大指标
LRFMdata = L.merge(R).merge(F).merge(M)
# 重命名列名
LRFMdata.columns=['用户名','L','R','F','M']
LRFMdata.head()

3. 数据标准化

LRFM 各指标数值量级差异大,需标准化处理,避免影响聚类效果:

python

运行

# 备份数据
model_data = LRFMdata.copy()
# 提取特征字段
sacle_matrix = model_data.iloc[:, 1:5]

# 最大最小值标准化
from sklearn.preprocessing import MinMaxScaler
model_scaler = MinMaxScaler()
data_scaled = model_scaler.fit_transform(sacle_matrix)
print(data_scaled.round(3))

4. 手肘法确定最佳聚类数

通过SSE 误差平方和(手肘法)判断最优 K 值:

python

运行

from sklearn.cluster import KMeans
SSE = []
# 遍历1-9个聚类,计算SSE
for i in range(1,10):
    kmeans = KMeans(n_clusters = i,random_state = 10)
    kmeans.fit(data_scaled)
    SSE.append(kmeans.inertia_)

# 绘制手肘图
plt.plot(range(1,10),SSE,marker = 'o')
plt.show()

根据手肘图拐点,本次确定聚类数 K=3

5. 训练 K-Means 模型并完成用户分群

python

运行

# 训练聚类模型
n_clusters=3
model_kmeans = KMeans(n_clusters=n_clusters)
cluster_labels_k = model_kmeans.fit_predict(data_scaled)

# 聚类标签与原数据合并
cluster_labels = pd.DataFrame(cluster_labels_k, columns=['Cluster_Id'])
merge_data = pd.concat((model_data, cluster_labels), axis=1)
merge_data.head()

6. 聚类结果可视化与解读

(1)各群体人数占比饼图

python

运行

merged_lrfm = merge_data[['M','F','R','L','Cluster_Id']]
mean_lrfm = merged_lrfm.groupby('Cluster_Id').mean().reset_index()
mean_lrfm['count'] = merged_lrfm['Cluster_Id'].value_counts().values

# 绘制人数占比饼图
data_lrfm=[list(z) for z in zip(mean_lrfm['Cluster_Id'],mean_lrfm['count'])]
pie_lrfm = (
    Pie()
    .add('每种分类人数占比',data_lrfm,radius=["35%","50%"])
    .set_global_opts(title_opts=opts.TitleOpts(title="每种分类人数占比"))
)
pie_lrfm.render_notebook()
(2)用户特征雷达图(多维度对比群体差异)

python

运行

from pyecharts.charts import Radar

# 定义指标维度
dims = ['M', 'F', 'R', 'L']
indicators = []
for dim in dims:
    max_val = mean_lrfm[dim].max() * 1.1
    indicators.append(opts.RadarIndicatorItem(name=dim, max_=max_val))

# 提取三类用户特征数据
cluster_0_data = mean_lrfm[mean_lrfm['Cluster_Id'] == 0][dims].values[0].tolist()
cluster_1_data = mean_lrfm[mean_lrfm['Cluster_Id'] == 1][dims].values[0].tolist()
cluster_2_data = mean_lrfm[mean_lrfm['Cluster_Id'] == 2][dims].values[0].tolist()

# 绘制雷达图
c = (
    Radar(init_opts=opts.InitOpts(width="800px", height="600px"))
    .add_schema(schema=indicators)
    .add("Cluster 0",[cluster_0_data],color="#FF0000",linestyle_opts=opts.LineStyleOpts(color="#FF0000"))
    .add("Cluster 1",[cluster_1_data],color="#0000FF",linestyle_opts=opts.LineStyleOpts(color="#0000FF"))
    .add("Cluster 2",[cluster_2_data],color="#008000",linestyle_opts=opts.LineStyleOpts(color="#008000"))
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(title_opts=opts.TitleOpts(title="用户分群特征雷达图"),legend_opts=opts.LegendOpts(pos_top="10%"))
)
c.render("radar_chart_raw.html")
群体业务解读

结合 LRFM 均值与雷达图特征,可将三类用户定义为:

  1. 0 类群体:近期活跃、消费金额中等,平台核心普通用户,重点做留存运营;
  2. 1 类群体:消费距今时间久、活跃度低,属于沉睡用户,需策划召回活动;
  3. 2 类群体:消费频次高、客单价高,是平台高价值核心用户,可推出专属权益、会员体系深度维护。

六、项目总结与拓展方向

1. 项目整体复盘

本项目完整实现电商订单数据分析闭环

  1. 数据层:完成 10 万 + 级订单数据清洗,处理空值、异常值,保证数据质量;
  2. 运营层:从渠道、月份、时段、退款四大维度拆解营收与售后问题,输出可落地的运营建议;
  3. 用户层:结合 LRFM 模型与 K-Means 机器学习算法完成用户分层,实现从 “整体营收” 到 “单个用户” 的精细化分析。

整套代码适配 Jupyter Notebook,交互式图表(pyecharts)支持鼠标悬浮查看详情,适合课程作业、企业数据分析复盘。

2. 进阶拓展方向

  1. 结合渠道 + 月份交叉分析,查看不同渠道在淡旺季的表现;
  2. 计算各渠道、各月份退款率(退款金额 / 总营收),定位高售后风险场景;
  3. 对分群用户做精准营销模拟,比如为高价值用户推送专属活动,为沉睡用户发放优惠券;
  4. 引入决策树、逻辑回归等算法,预测用户流失概率。

以上就是本次电商订单综合数据分析全流程啦!代码可直接复刻运行,无论是学习 Python 数据分析、可视化,还是入门用户分群、机器学习聚类,都是非常优质的实战案例。如果在复现过程中有代码报错、逻辑疑问,欢迎留言交流~

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐