当前位置: 首页 > news >正文

Python天猫订单数据与日化商品销售数据RFM模型应用可视化分析

全文链接:https://tecdat.cn/?p=43860
原文出处:拓端抖音号@拓端tecdat
分析师:Jiaxin Yao

封面

在电商行业快速发展的背景下,订单数据与商品销售数据已成为企业优化运营、提升效益的核心资产。通过对这些数据的深度分析,不仅能挖掘销售趋势、地区消费差异,还能精准识别客户价值,为业务决策提供数据支撑。作为数据科学家,我们在过往的电商客户咨询项目中发现,许多企业虽积累了大量数据,但缺乏系统的分析方法,难以将数据转化为实际运营策略——这正是本次分析报告的核心出发点。
 

一、引言

本报告改编自我们为某电商客户完成的运营优化咨询项目,聚焦两类核心数据:天猫订单数据(Tmall Order Data)与日化商品销售数据(Daily Chemical Products Sales Data)。分析过程中,我们采用Python工具(Pandas用于数据处理、Pyecharts用于可视化),通过数据预处理(去重、补空、格式标准化)、描述性统计分析、时间序列分析、地区分布分析,以及RFM(Recency-Frequency-Monetary)客户价值模型,逐步拆解业务问题:先明确天猫订单的成交规律与时间/地区特征,再挖掘日化商品的销售趋势与品类差异,最终量化客户价值并提出运营建议。
值得注意的是,天猫订单与日化商品分析完整项目代码和数据文件已分享在交流社群,阅读原文进群和600+行业人士共同交流和成长。以下为本次分析的整体脉络流程图:

 

二、天猫订单数据分析

天猫订单数据(tmall_order_report.csv)包含订单编号、总金额、买家实际支付金额、收货地址、订单创建时间、订单付款时间、退款金额等字段,核心目标是分析成交情况、地区分布与时间趋势,为运营策略提供方向。

1. 数据读取与初步探查

首先通过Python的Pandas库读取数据,初步了解数据结构与质量,为后续预处理奠定基础。关键代码如下(已修改变量名并翻译注释):

 
  1.  
    import pandas as pd
  2.  
    # 读取天猫订单数据文件,指定本地文件路径
  3.  
    tmall_order_data = pd.read_csv("D:\\OrderFromTmall\\tmall_order_report.csv")
  4.  
    # 查看数据前5行,初步探查字段结构(注:退款金额字段指客户退货后返还的金额)
  5.  
    tmall_order_data.head()
  6.  
    # 查看数据基本信息(字段类型、非空值数量),判断是否存在数据缺失或类型异常
  7.  
    tmall_order_data.info()
 
 

通过head()可观察到各字段的具体格式,如“订单创建时间”为字符串格式(后续需转为datetime);通过info()可确认是否存在空值(如订单付款时间可能为空,代表未付款订单)。

2. 数据预处理

数据预处理是保证分析准确性的关键,主要包括列名清洗、去重、空值检查与地址标准化,具体操作如下:

 
  1.  
    # 1. 去除列名前后的空格(避免因列名冗余导致的字段调用错误)
  2.  
    tmall_order_data.columns = tmall_order_data.columns.str.strip()
  3.  
    print("清洗后的列名:", tmall_order_data.columns.tolist())
  4.  
    # 2. 统计重复数据数量(重复订单可能由数据录入错误导致,需后续处理)
  5.  
    duplicate_count = tmall_order_data.duplicated().sum()
  6.  
    print(f"重复数据的数量: {duplicate_count}")
  7.  
    # 3. 统计各字段空值数量(空值可能影响指标计算,如未付款订单的付款时间为空)
  8.  
    null_count = tmall_order_data.isnull().sum()
  9.  
    print("各字段空值数量:\n", null_count)
  10.  
    # 4. 地址标准化:去除省份名称中的冗余词汇(如“自治区”“省”),统一地址格式
  11.  
    address_clean_dict = {
  12.  
    '自治区': '',
  13.  
    '维吾尔': '',
  14.  
    '回族': '',
  15.  
    '壮族': '',
  16.  
    '省': ''
  17.  
    }
  18.  
    for key, value in address_clean_dict.items():
  19.  
    tmall_order_data['收货地址'] = tmall_order_data['收货地址'].str.replace(key, value)
  20.  
    # 查看标准化后的唯一收货地址,确认格式统一(如“新疆维吾尔自治区”转为“新疆”)
  21.  
    print("标准化后的收货地址:", tmall_order_data['收货地址'].unique())
 
 

预处理后,数据格式统一、无冗余重复,可进入可视化分析阶段。

3. 数据可视化与业务分析

3.1 整体成交情况统计

通过表格展示核心成交指标,包括总订单数、已完成订单数、退款金额等,并计算成交率(已完成订单数/总订单数)与退货率(退款订单数/已完成订单数),直观反映订单质量:

 
  1.  
    from pyecharts import options as opts
  2.  
    from pyecharts.components import Table
  3.  
    from pyecharts.options import ComponentTitleOpts
  4.  
    # 计算天猫订单核心成交指标
  5.  
    tmall_deal_result = {}
  6.  
    tmall_deal_result['总订单数'] = tmall_order_data['订单编号'].count() # 所有订单总数
  7.  
    tmall_deal_result['已完成订单数'] = tmall_order_data['订单编号'][tmall_order_data['订单付款时间'].notnull()].count() # 付款成功的订单
  8.  
    tmall_deal_result['未付款订单数'] = tmall_order_data['订单编号'][tmall_order_data['订单付款时间'].isnull()].count() # 未付款订单
  9.  
    tmall_deal_result['退款订单数'] = tmall_order_data['订单编号'][tmall_order_data['退款金额'] > 0].count() # 产生退货的订单
  10.  
    tmall_deal_result['总订单金额'] = tmall_order_data['总金额'][tmall_order_data['订单付款时间'].notnull()].sum() # 已完成订单总金额
  11.  
    tmall_deal_result['总退款金额'] = tmall_order_data['退款金额'][tmall_order_data['订单付款时间'].notnull()].sum() # 已完成订单总退款
  12.  
    tmall_deal_result['总实际收入金额'] = tmall_order_data['买家实际支付金额'][tmall_order_data['订单付款时间'].notnull()].sum() # 实际收入(扣除退款前)
  13.  
    # 创建表格展示指标
  14.  
    tmall_deal_table = Table()
  15.  
    headers = ['总订单数', '总订单金额', '已完成订单数', '总实际收入金额', '退款订单数', '总退款金额', '成交率', '退货率']
  16.  
    rows = [
  17.  
    [
  18.  
    tmall_deal_result['总订单数'],
  19.  
    f"{tmall_deal_result['总订单金额']/10000:.2f} 万",
  20.  
    tmall_deal_result['已完成订单数'],
  21.  
    f"{tmall_deal_result['总实际收入金额']/10000:.2f} 万",
  22.  
    tmall_deal_result['退款订单数'],
  23.  
    f"{tmall_deal_result['总退款金额']/10000:.2f} 万",
  24.  
    f"{tmall_deal_result['已完成订单数']/tmall_deal_result['总订单数']:.2%}",
  25.  
    f"{tmall_deal_result['退款订单数']/tmall_deal_result['已完成订单数']:.2%}",
  26.  
    ]
  27.  
    ]
  28.  
    tmall_deal_table.add(headers, rows)
  29.  
    tmall_deal_table.set_global_opts(title_opts=ComponentTitleOpts(title='天猫订单整体成交情况'))
  30.  
    tmall_deal_table.render_notebook()
 
 

该表格可帮助企业快速掌握订单整体质量,如退货率过高时需排查商品质量或物流问题。

3.2 地区成交情况分析

通过地图与柱状图结合,展示各地区订单分布,挖掘地区消费差异:

 
  1.  
    from pyecharts.charts import Map, Bar
  2.  
    # 按收货地址分组,统计已完成订单的数量
  3.  
    tmall_area_order = tmall_order_data[tmall_order_data['订单付款时间'].notnull()].groupby('收货地址').agg({'订单编号':'count'})
  4.  
    # 转换为地图所需格式(地址+订单数)
  5.  
    area_data = [list(i) for i in zip(tmall_area_order.index, tmall_area_order['订单编号'])]
  6.  
    # 1. 绘制全国地区分布地图
  7.  
    area_map = Map()
  8.  
    area_map.add('订单量', area_data, maptype='china', is_map_symbol_show=False) # 不显示地图标记点
  9.  
    area_map.set_series_opts(label_opts=opts.LabelOpts(is_show=True)) # 显示省份名称
  10.  
    area_map.set_global_opts(
  11.  
    visualmap_opts=opts.VisualMapOpts(min_=0, max_=10000), # 颜色深浅对应订单量范围
  12.  
    title_opts=opts.TitleOpts(title='天猫订单地区分布'),
  13.  
    legend_opts=opts.LegendOpts(is_show=False) # 隐藏图例(单系列无需图例)
  14.  
    )
  15.  
    area_map.render('天猫订单地区分布.html')
  16.  
    # 2. 绘制柱状图展示各地区具体订单数
  17.  
    x_data = tmall_area_order.index.tolist() # 收货地址
  18.  
    y_data = tmall_area_order['订单编号'].tolist() # 订单数量
  19.  
    area_bar = Bar()
  20.  
    area_bar.add_xaxis(x_data)
  21.  
    area_bar.add_yaxis("订单数量", y_data)
  22.  
    area_bar.set_global_opts(
  23.  
    title_opts=opts.TitleOpts(title="不同收货地址的订单数量"),
  24.  
    xaxis_opts=opts.AxisOpts(name="收货地址", axislabel_opts=opts.LabelOpts(rotate=45)), # 旋转X轴标签避免重叠
  25.  
    yaxis_opts=opts.AxisOpts(name="订单数量"),
  26.  
    datazoom_opts=opts.DataZoomOpts() # 添加缩放功能,便于查看多地区数据
  27.  
    )
  28.  
    area_bar.render('天猫订单数量柱状图.html')
 
 

对应的可视化结果如下:


从图中可观察到,华东、华南等沿海省份订单量显著高于其他地区——这与这些地区经济水平高、消费能力强的特征相符。企业可针对高订单量地区加大推广,同时关注低订单量地区的市场潜力(如通过优惠活动拓展下沉市场)。


相关文章

相关文章

Python用Transformer、SARIMAX、RNN、LSTM、Prophet时间序列预测对比分析用电量、零售销售、公共安全、交通事故数据


原文链接:https://tecdat.cn/?p=42219


 
3.3 时间趋势分析

从“每日”和“每小时”两个维度分析订单趋势,结合业务场景解读规律:

3.3.1 每日订单量走势
 
  1.  
    from pyecharts.charts import Line
  2.  
    # 将订单创建时间转为datetime格式,按“年-月-日”分组统计每日订单数
  3.  
    tmall_order_data['订单创建时间'] = pd.to_datetime(tmall_order_data['订单创建时间'])
  4.  
    tmall_daily_order = tmall_order_data.groupby(
  5.  
    tmall_order_data['订单创建时间'].apply(lambda x: x.strftime("%Y-%m-%d"))
  6.  
    ).agg({'订单编号':'count'}).to_dict()['订单编号']
  7.  
    # 绘制每日订单量折线图
  8.  
    daily_order_line = Line()
  9.  
    daily_order_line.add_xaxis(list(tmall_daily_order.keys()))
  10.  
    daily_order_line.add_yaxis("订单量", list(tmall_daily_order.values()))
  11.  
    daily_order_line.set_series_opts(
  12.  
    label_opts=opts.LabelOpts(is_show=False), # 隐藏数据标签避免杂乱
  13.  
    markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值")]) # 标记峰值
  14.  
    )
  15.  
    daily_order_line.set_global_opts(title_opts=opts.TitleOpts(title="天猫每日订单量走势"))
  16.  
    daily_order_line.render('天猫每日订单量走势.html')
 
 

可视化结果如下:

从图中可清晰看到,2月份上半月订单量显著偏低——这与当时新冠疫情的影响直接相关:疫情导致物流停运、企业复工延迟,消费者下单意愿下降;随着疫情控制好转、物流与复工逐步恢复,2月下半月订单量快速增长。这一规律提示企业,需关注突发公共事件对订单的影响,提前制定应急预案(如疫情时增加线上客服、优化库存)。

3.3.2 每小时订单量走势
 
  1.  
    # 按“小时”分组统计订单数,分析一天内的下单高峰
  2.  
    tmall_hourly_order = tmall_order_data.groupby(
  3.  
    tmall_order_data['订单创建时间'].apply(lambda x: x.strftime("%H"))
  4.  
    ).agg({'订单编号':'count'}).to_dict()['订单编号']
  5.  
    # 绘制每小时订单量柱状图
  6.  
    hourly_order_bar = Bar()
  7.  
    x_data = list(tmall_hourly_order.keys())
  8.  
    y_data = list(tmall_hourly_order.values())
  9.  
    hourly_order_bar.add_xaxis(x_data)
  10.  
    hourly_order_bar.add_yaxis("订单量", y_data)
  11.  
    hourly_order_bar.set_global_opts(title_opts=opts.TitleOpts(title="天猫每小时订单量走势"))
  12.  
    hourly_order_bar.set_series_opts(
  13.  
    label_opts=opts.LabelOpts(is_show=False),
  14.  
    markpoint_opts=opts.MarkPointOpts(
  15.  
    data=[
  16.  
    opts.MarkPointItem(type_="max", name="峰值"),
  17.  
    opts.MarkPointItem(name="第二峰值", coord=[x_data[15], y_data[15]], value=y_data[15]),
  18.  
    opts.MarkPointItem(name="第三峰值", coord=[x_data[10], y_data[10]], value=y_data[10]),
  19.  
    ]
  20.  
    ),
  21.  
    )
  22.  
    hourly_order_bar.render('天猫每小时订单量走势.html')
  23.  
    # 计算下单到付款的平均时间(单位:分钟)
  24.  
    order_pay_interval = tmall_order_data['订单付款时间'] - tmall_order_data['订单创建时间']
  25.  
    avg_pay_time = order_pay_interval[order_pay_interval.notnull()].apply(lambda x: x.seconds / 60).mean()
  26.  
    print(f"下单到付款的平均时间:{avg_pay_time:.2f} 分钟")
 
 

可视化结果如下:

分析发现,一天内存在三个下单高峰:10点(上午工作间隙)、15点(下午空闲时段)、21点(晚上休息时段),其中21点是全天订单量最高的时段。结合“下单到付款平均时间”,企业可在高峰时段优化客服排班(如安排夜班客服处理21点咨询),同时简化付款流程(如默认地址、快速支付),减少客户因等待或操作复杂放弃付款的情况。

三、日化商品销售数据分析

日化商品销售数据包含“销售订单表”与“商品信息表”,需通过表关联分析商品销售趋势、地区差异与客户价值,为品类运营与客户分层提供依据。

1. 数据读取与预处理

1.1 数据读取
 
  1.  
    import pandas as pd
  2.  
    # 读取日化商品的销售订单表与商品信息表(Excel文件的两个sheet)
  3.  
    daily_chem_order = pd.read_excel("D:\\OrderFromTmall\\日化.xlsx", sheet_name='销售订单表')
  4.  
    daily_chem_product = pd.read_excel("D:\\OrderFromTmall\\日化.xlsx", sheet_name='商品信息表')
  5.  
    # 初步探查销售订单表结构
  6.  
    print("销售订单表前5行:")
  7.  
    print(daily_chem_order.head())
  8.  
    print("\n销售订单表信息:")
  9.  
    print(daily_chem_order.info())
 
 
1.2 数据预处理

针对销售订单表与商品信息表分别进行清洗,确保数据质量:

 
  1.  
    # 1. 销售订单表预处理
  2.  
    # 去重:删除重复订单(避免重复统计)
  3.  
    daily_chem_order.drop_duplicates(inplace=True)
  4.  
    daily_chem_order.reset_index(drop=True, inplace=True) # 重建索引
  5.  
    # 补空:用后向填充(bfill)和前向填充(ffill)处理缺失值
  6.  
    daily_chem_order.fillna(method='bfill', inplace=True)
  7.  
    daily_chem_order.fillna(method='ffill', inplace=True)
  8.  
    # 日期格式标准化:处理“2021-01-01”后的脏数据(数据应在2019.1-2019.9区间)
  9.  
    daily_chem_order['订单日期'] = daily_chem_order['订单日期'].apply(
  10.  
    lambda x: pd.to_datetime(x, format='%Y#%m#%d') if isinstance(x, str) else x
  11.  
    )
  12.  
    daily_chem_order = daily_chem_order[daily_chem_order['订单日期'] < '2021-01-01'] # 过滤脏数据
  13.  
    # 数值格式标准化:去除“个”“元”等单位,转为数值类型
  14.  
    daily_chem_order['订购数量'] = daily_chem_order['订购数量'].apply(
  15.  
    lambda x: x.strip('个') if isinstance(x, str) else x
  16.  
    ).astype('int')
  17.  
    daily_chem_order['订购单价'] = daily_chem_order['订购单价'].apply(
  18.  
    lambda x: x.strip('元') if isinstance(x, str) else x
  19.  
    ).astype('float')
  20.  
    daily_chem_order['金额'] = daily_chem_order['金额'].astype('float')
  21.  
    # 地址标准化:同天猫订单数据处理逻辑
  22.  
    address_clean_dict = {'自治区': '', '维吾尔': '', '回族': '', '壮族': '', '省': ''}
  23.  
    for key, value in address_clean_dict.items():
  24.  
    daily_chem_order['所在省份'] = daily_chem_order['所在省份'].str.replace(key, value)
  25.  
    # 客户编码清洗:去除“编号”冗余词
  26.  
    daily_chem_order['客户编码'] = daily_chem_order['客户编码'].str.replace('编号', '')
  27.  
    # 2. 商品信息表预处理(主要检查重复与空值)
  28.  
    print("商品信息表重复数据数量:", daily_chem_product[daily_chem_product.duplicated()].count()[0])
  29.  
    print("商品信息表空值数量:\n", daily_chem_product.isnull().sum())
  30.  
    # 无重复与空值,无需额外清洗
 
 

2. 数据可视化与业务分析

2.1 每月订购情况分析

通过双轴柱状图展示每月订购数量与金额,分析月度销售趋势:

 
  1.  
    from pyecharts.charts import Bar
  2.  
    # 提取订单月份,按月份分组统计订购数量与金额
  3.  
    daily_chem_order['订单月份'] = daily_chem_order['订单日期'].apply(lambda x: x.month)
  4.  
    monthly_order_stats = daily_chem_order.groupby('订单月份').agg({'订购数量': 'sum', '金额': 'sum'}).to_dict()
  5.  
    # 准备绘图数据(数量单位:万件,金额单位:亿元)
  6.  
    x_data = [f'{key} 月' for key in monthly_order_stats['订购数量'].keys()]
  7.  
    y1 = [round(val/10000, 2) for val in monthly_order_stats['订购数量'].values()] # 订购数量(万件)
  8.  
    y2 = [round(val/10000/10000, 2) for val in monthly_order_stats['金额'].values()] # 金额(亿元)
  9.  
    # 绘制双轴柱状图
  10.  
    monthly_order_bar = Bar()
  11.  
    monthly_order_bar.add_xaxis(x_data)
  12.  
    monthly_order_bar.add_yaxis("订购数量(万件)", y1)
  13.  
    monthly_order_bar.add_yaxis("金额(亿元)", y2)
  14.  
    monthly_order_bar.set_global_opts(title_opts=opts.TitleOpts(title="日化商品每月订购情况"))
  15.  
    monthly_order_bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True)) # 显示数值标签
  16.  
    monthly_order_bar.render('日化商品每月订购情况.html')
 
 

可视化结果如下:

从图中可观察到,日化商品销售存在明显的月度波动(如夏季月份销量可能高于冬季,因夏季洗漱、防晒类日化品需求增加)。企业可根据月度趋势调整库存,避免旺季缺货或淡季积压。

2.2 市区订购数量TOP20分析

通过横向柱状图展示订购量前20的市区,定位高价值区域:

 
  1.  
    # 按所在地市分组统计订购数量,取前20并按升序排列(便于横向柱状图展示)
  2.  
    city_order_top20 = daily_chem_order.groupby('所在地市').agg({'订购数量': 'sum'}).sort_values(
  3.  
    by='订购数量', ascending=False
  4.  
    )[:20].sort_values(by='订购数量').to_dict()['订购数量']
  5.  
    # 绘制横向柱状图
  6.  
    city_order_bar = Bar()
  7.  
    city_order_bar.add_xaxis(list(city_order_top20.keys()))
  8.  
    city_order_bar.add_yaxis("订购量(万件)", [round(v/10000, 2) for v in city_order_top20.values()],
  9.  
    label_opts=opts.LabelOpts(position="right", formatter='{@[1]} 万'))
  10.  
    city_order_bar.reversal_axis() # 反转坐标轴,改为横向柱状图
  11.  
    city_order_bar.set_global_opts(title_opts=opts.TitleOpts("日化商品市区订购数量排行 TOP20"))
  12.  
    city_order_bar.render('日化商品市区订购数量排行 TOP20.html')
 
 

可视化结果如下:

TOP20市区多为一线城市或新一线城市(如北京、上海、广州等),这些地区消费能力强、日化品需求大。企业可针对这些市区推出定制化推广活动(如联名产品、满减优惠),进一步提升销量。

2.3 省份订购数量分布分析

通过地图展示各省份订购量,把握全国区域差异:

 
  1.  
    from pyecharts.charts import Map
  2.  
    # 按所在省份分组统计订购数量
  3.  
    province_order = daily_chem_order.groupby('所在省份').agg({'订购数量': 'sum'}).to_dict()['订购数量']
  4.  
    # 绘制省份分布地图
  5.  
    province_order_map = Map()
  6.  
    province_order_map.add("订购数量", list(province_order.items()), "china", is_map_symbol_show=False)
  7.  
    province_order_map.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
  8.  
    province_order_map.set_global_opts(
  9.  
    title_opts=opts.TitleOpts(title='日化商品不同省份订购数量分布'),
  10.  
    visualmap_opts=opts.VisualMapOpts(max_=1000000) # 颜色范围对应订购量
  11.  
    )
  12.  
    province_order_map.render('日化商品不同省份订购数量分布.html')
 
 

可视化结果如下:

该地图与天猫订单地区分布趋势一致,华东、华南省份订购量领先。企业可在这些省份加强渠道布局(如与本地商超合作),同时针对西北、西南等低订购量省份,推出性价比更高的产品以拓展市场。

2.4 不同商品品类订购分析

通过表关联(销售订单表+商品信息表),分析不同品类的销售情况:

 
  1.  
    # 表关联:通过“商品编号”关联销售订单与商品信息,获取商品分类
  2.  
    daily_chem_merged = pd.merge(daily_chem_order, daily_chem_product, on='商品编号', how='inner')
  3.  
    # 按“商品大类-商品小类”分组,统计订购数量并按大类排序
  4.  
    category_order = daily_chem_merged.groupby(['商品大类', '商品小类']).agg({'订购数量': 'sum'}).sort_values(
  5.  
    by=['商品大类', '订购数量'], ascending=[True, False]
  6.  
    )
  7.  
    print("不同商品品类订购数量:")
  8.  
    print(category_order)
 
 

关联分析后可发现,日化商品中某类小类(如护肤品中的面膜、清洁用品中的洗衣液)订购量显著高于其他品类——这提示企业可加大该类商品的生产与推广,同时优化低销量品类(如调整配方、包装),提升整体品类效益。

3. RFM模型挖掘客户价值

RFM模型通过“最近购买时间(Recency)”“消费频率(Frequency)”“消费金额(Monetary)”三个维度量化客户价值,帮助企业实现客户分层运营:

 
  1.  
    # 计算RFM核心指标(按客户编码分组)
  2.  
    daily_chem_rfm = daily_chem_order.groupby('客户编码').agg({
  3.  
    '订单日期': 'max', # R:最近一次购买时间
  4.  
    '订单编码': 'count', # F:消费频率(订单次数)
  5.  
    '金额': 'sum' # M:消费金额
  6.  
    })
  7.  
    # 重命名字段,便于后续处理
  8.  
    daily_chem_rfm.columns = ['最近一次购买时间', '消费频率', '消费金额']
  9.  
    # 将R、F、M转为百分比排名(0-1区间),消除量纲影响
  10.  
    daily_chem_rfm['R_rank'] = daily_chem_rfm['最近一次购买时间'].rank(pct=True)
  11.  
    daily_chem_rfm['F_rank'] = daily_chem_rfm['消费频率'].rank(pct=True)
  12.  
    daily_chem_rfm['M_rank'] = daily_chem_rfm['消费金额'].rank(pct=True)
  13.  
    # 客户价值打分:权重M=50%、F=30%、R=20%(金额直接关联收入,权重最高)
  14.  
    daily_chem_rfm['customer_score'] = daily_chem_rfm['R_rank'] * 20 + daily_chem_rfm['F_rank'] * 30 + daily_chem_rfm['M_rank'] * 50
  15.  
    daily_chem_rfm['customer_score'] = daily_chem_rfm['customer_score'].round(1)
  16.  
    # 按分数降序排列,查看高价值客户
  17.  
    daily_chem_rfm_sorted = daily_chem_rfm.sort_values(by='customer_score', ascending=False)
  18.  
    print("客户价值分数TOP10:")
  19.  
    print(daily_chem_rfm_sorted.head(10))
 
 

根据customer_score可将客户分为三类:

  • 高价值客户(score≥80):最近购买时间近、消费频率高、金额大——企业需提供专属服务(如VIP客服、定制优惠),维持客户忠诚度;
  • 中价值客户(50≤score<80):消费频率或金额中等——企业可通过满减活动提升消费金额,增加购买频率;
  • 低价值客户(score<50):最近购买时间远、频率低、金额小——企业可通过优惠券激活,引导再次购买。
    通过RFM模型,企业能将有限的运营资源精准投向高价值客户,同时激活低价值客户,实现运营效率最大化。

四、总结

本报告以天猫订单数据与日化商品销售数据为核心,通过Python工具完成数据预处理、可视化分析与RFM模型应用,最终形成三大核心结论:

  1. 时间趋势规律:天猫订单受疫情影响呈现“2月上半月低、下半月高”的特征,一天内存在10点、15点、21点三个下单高峰——企业需针对性调整客服排班与应急预案;
  2. 地区消费差异:华东、华南等沿海省份订单量领先,一线城市市区是日化商品高价值区域——企业可加强这些地区的推广与渠道布局;
  3. 客户价值分层:通过RFM模型将日化商品客户分为高、中、低价值三类——企业可针对不同层级客户制定差异化运营策略,提升资源利用效率。
    本次分析改编自实际电商咨询项目,所有代码与数据已分享至交流社群。未来可进一步结合用户画像数据(如年龄、性别),实现更精准的商品推荐与运营优化,助力企业在电商竞争中持续提升效益。

关于分析师

在此对 Jiaxin Yao 对本文所作的贡献表示诚挚感谢,她在浙江工业大学攻读数据科学与大数据技术专业,专注微博情感分析领域。擅长 Python、VMware(略熟悉 R 语言)、深度学习、数据采集 。

相关文章:

Python天猫订单数据与日化商品销售数据RFM模型应用可视化分析

全文链接:https://tecdat.cn/?p=43860原文出处:拓端抖音号@拓端tecdat分析师:Jiaxin Yao在电商行业快速发展的背景下,订单数据与商品销售数据已成为企业优化运营、提升效益的核心资产。通过对这些数据的深度分析,不仅能挖掘销售趋势、地区消费差异,还能精准识别客户价值…...

JBoltAI重塑智能检索:问题重写与混合检索如何破解企业RAG应用瓶颈

JBoltAI重塑智能检索:问题重写与混合检索如何破解企业RAG应用瓶颈当前,生成式AI技术正在席卷全球各行业。然而,传统RAG系统在实际部署中面临两大核心痛点:查询意图理解偏差和检索召回率低下。这直接导致企业AI应用效果不尽如人意——要么找不到正确答案,要么生成的内容与实…...

Springcloud Alibaba从入门到入土(一)

一、什么是微服务微服务是一种架构风格,代表一种通过将应用程序拆分为一个个小型的、独立的功能模块(服务)的开发方式。 每个模块(服务)实现独立的业务功能(不限制开发语言),服务之间通过轻量化的通信机制(HTTP、REST、消息队列)进行交互 微服务架构的核心思想是解耦…...

JBoltAI函数调用技术:自然语言即可查询数据库,重构企业数据交互方式

JBoltAI函数调用技术:自然语言即可查询数据库,重构企业数据交互方式AI正在重构企业数据交互方式在当今数据驱动的商业环境中,企业数据库里沉淀着大量宝贵信息:客户行为、销售趋势、运营效率等关键洞察。然而,这些数据的获取却长期依赖技术团队编写SQL查询,形成了业务与数…...

JBoltAI文档提取技术:企业智能升级的数据解锁之道

JBoltAI文档提取技术:企业智能升级的数据解锁之道企业数字化转型的下一站:从“数据沉淀”到“价值提取”当前,全球企业正从“数字化转型”迈入“智能化升级”的关键阶段。据《中国企业智能化升级报告2025》显示,83%的中大型企业表示,数字化后的“数据孤岛”、“流程割裂”…...

题解:CF645B Mischievous Mess Makers

Solution 为了让逆序对数量尽量多,每次要交换 \(i\) 和 \(n - i + 1\),然后把每一次的结果累加起来,答案就是 \(\sum_{i=1}^{\min\left(\lfloor{\frac{n}{2}}\rfloor,k\right)}\left(2 \times \left(n - i + 1\right) + 1\right)\)。 Code 完整代码如下 #include <bits/st…...

题解:CF1076C Meme Problem

Solution 由韦达定理得,因为 \(a + b = d\) 且 \(a \times b = d\),所以 \(a\),\(b\) 就是方程 \(x^2 - d \times x + d = 0\) 的实数根,只要判断方程有无实根就可以了。 Code 完整代码如下 #include <bits/stdc++.h> using namespace std; double d; int main() {in…...

视频讲解|Python用ResNet残差神经网络在大脑出血CT图像描数据预测应用

全文链接:https://tecdat.cn/?p=43843原文出处:拓端抖音号@拓端tecdat分析师:Zikun Zhang视频讲解Python用ResNet残差神经网络在大脑出血CT图像描数据预测在临床医疗影像诊断中,大脑出血的快速准确识别直接关系到患者的救治效率——CT影像作为常用检查手段,传统人工阅片不…...

题解:CF1188A1 Add on a Tree

Solution 我们可以先计算每个节点的度。 若 \(deg_i = 1\),只有一条边,可以变成任意值。 若 \(deg_i = 2\),两条边会同时加上一个任意实数,但如果要求这两条边不相等,就无法做到。 若 \(deg_i \ge 3\),以 \(deg_i = 3\) 为例,可以先把这三条边的边权变为 \(0\),然后就可…...

CSP-S 9.9

赛时: 6:00:发题,一眼不会 BCD 6:03:一眼秒了 A,快速写了一个线段树,然后发现可以用树状数组,最后发现直接记录最大值和次大值就可以了。 6:10:写完了,发现恶心大样例: 1 999999胡:你就说满不满足子任务 2 吧。 好吧完全不拍,直接写 T3。 8:30:想到了一个伪正解:…...

250913 课堂笔记

0 1 CF1147E 2 CF1007C 3 CF750F 4 CF1129E 5 P9601 6 P5208 7 CF1292E 8 CF1924F 9 P13535 10 CF1991I本文来自博客园,作者:cwkapn,转载请注明原文链接:https://www.cnblogs.com/cwkapn/p/19088845...

NKOJ全TJ计划——NP11792

题目内容 33DAI 最近喜欢玩《骑马与砍杀 2》,他正领导着一支\(n\)人的小队(保证\(n\)是偶数),小队成员编号\(1\backsim n\)。他们中编号为 \(i\)的成员(\(1\le i\le \frac{n}{2}\) )与编号为\(i+\frac{n}{2}\)的成员互为朋友关系。 为了掩护主力撤退,他决定选择其中\(k\…...

求加小红书

一定回关 因为现在小白实力较小,没那么多粉丝,希望可以成为一名大主播,希望大家支持,谢谢!这个家伙很懒,什么也没有留下 🐾...

Ubuntu 修改 Git 的编辑器为 Vim

使用命令行 git config --global core.editor vim 可以为所有仓库全局指定 Git 的编辑器为 Vim。 修改之前:修改之后:...

完整教程:Photo Lab PRO 图片编辑器 功能解锁版

完整教程:Photo Lab PRO 图片编辑器 功能解锁版pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace …...

编辑功能查询问题解决

问题点: 报错:“System.InvalidCastException”类型的异常在 System.Data.dll 中发生,但未在用户代码中进行处理 其他信息: 指定的转换无效。解决方法: 修改前的代码示例public AccessoryInfo GetInfo(Int32 accessoryId){AccessoryInfo entity = null;SqlParameter[] parm…...

Ubuntu 18.04 虚拟机 VScode无法正常输入中文解决办法

小问题,咱们速战速决问题描述或者其实就是安装的Ubuntu版本太旧了,依赖包的版本不支持VScode安装。如果不想升级Ubuntu,那找一个旧版本VScode安装包就行。这里是旧版本VScode,旧版本合集 推荐在Ubuntu的浏览器中打开并下载,如图点击.deb当然,也可以用Windows系统下载,能…...

manacher算法

模板题:洛谷p3805 code: #include<iostream> #include<algorithm> using namespace std; const int N=2.2e7+10; string t,s; int m,n; int d[N]; int main(){cin>>t;m=t.size();s+= ;for(auto ch: t){s+=#;s+=ch;}s+="##";n=s.size()-2;d[1]=1;i…...

[能源化工] 面向锂电池RUL预测的开源项目全景速览

锂离子电池是新能源汽车、储能系统及便携式电子设备的核心能源部件,其剩余使用寿命(Remaining Useful Life,RUL)的准确预测直接关系到设备运行安全、维护成本优化和能源效率提升。RUL预测算法能够提前量化电池剩余可用时间,是保障新能源汽车与储能系统安全稳定运行、降低突…...

源码app陪玩,React技巧之发出http请求 - 云豹科技

源码app陪玩,React技巧之发出http请求总览在React中,通过点击事件发出http请求:1、在元素上设置onClick属性。2、每当元素被点击时,发出http请求。3、更新state变量,并重新渲染数据。如果你使用axios,请向下滚动到下一个代码片段。import {useState} from react;const Ap…...

qoj1847 Elephants

题意 有一个长度为 \(n\) 的 \(01\) 数组 \(a\)。 给出 \(q\) 组限制条件,第 \(i\) 组给出大小为 \(k_i\) 的集合 \(C_i=\{x_{i,1},x_{i,2},\cdots,x_{i,k_i}\}\)。若 \(cnt_0\) 为 \(\{x|x\in C_i,a_x=0\}\) 的集合大小,\(cnt_1\) 为 \(\{x|x\in C_i,a_x=1\}\) 的集合大小,…...

p4085

洛谷p4085 题目链接 首先想怎么计算一个区间的风味和辣度;风味是区间内的风味总和,可以用前缀和处理;辣度是区间最大值,可以用ST表处理; 处理完ST表和前缀和之后考虑怎么求答案,可以考虑二分查找前缀和满足风味要求的最小值,然后列举后面的所有情况求最小; 代码: #inc…...

Excel甘特图 - 教程

Excel甘特图 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14px…...

基于ArcGIS的通用界址点导入导出工具设计与实现

# 基于ArcGIS的通用界址点导入导出工具设计与实现最近在开发一个兼容 **ArcGIS Desktop** 和 **ArcGIS Pro** 的通用界址点数据导入导出工具。在实际项目中,界址点虽然有国家标准规范,但各地的实际应用需求差异较大,导致格式五花八门:- 有的地方要求包含 **9个属性字段**;…...

python 函数作用域

对于 python 中的全局变量,在函数体内只能访问,不可修改。若想修改则需要用 global 关键字声明。 eg:c = 1 def f():print(c)f() # 可执行c = 1 def g():global c # 在函数体内修改全局变量,需要声明c += 1print(c)g()定义在函数体内的函数,称为“闭包”。与全局变量原理一…...

基于Python+Vue开发的鲜花商城管理系统源码+运行

项目简介该项目是基于Python+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的鲜花商城管理系统项目,大学生可以在实践中学习和…...

Idea win 快捷键大全

转载自:https://www.cnblogs.com/chuangzhijian/p/8477220.html Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ OR ],可以跑到大括号的开头与结尾Ctrl+F12,可以显示…...

文献阅读 | AutoCodeBench

AutoCodeBench:大型语言模型是自动代码基准生成器 - AI论文精选 解决大模型标注困难的问题,可自动生成高难度多语言代码生成数据集TRANSLATE with xEnglishArabic Hebrew PolishBulgarian Hindi PortugueseCatalan Hmong Daw RomanianChinese Simplified Hungarian RussianC…...

【ARM Cache 及 MMU 系列文章 6.5 -- 如何进行 Cache miss 统计?】

ARM Cache Miss 统计 在ARMv8/v9架构中,缓存未命中(Cache Miss)的统计对于性能调优和系统分析至关重要。缓存未命中意味着处理器尝试从缓存中读取数据时没有找到,因此不得不从更低速的存储(如L2缓存或主内存)中加载数据,这会导致延迟增加和性能下降。理解和分析缓存未命…...

VSCode+neovim工作环境快速构建

环境系统:Windows 代码编辑器:VSCode 插件:vscode-neovim、clangd目的 为了减少右手趴鼠标上的时间,所以根据以下目标给出一份最简洁的配置方案:窗口跳转:<C-w>+ h j k l 标签页跳转:H L 终端打开\关闭: <C-`> 相对行号 引用跳转(Go to Define): gd 模式切…...

25.9.12随笔联考总结

考试 通读题面,感觉只能顺序开题。T1 做了 40 多分钟,感觉这个题比之前的要难一点;T2 很快找到一些性质,但是最后一个东西似乎不太能做,于是就花了好一会去想,但是还是没想出来。最后只写了暴力。T3 看着就很不可做,想了一会没找到啥性质。T4 是串串计数题,因为计数做少…...

macos

调节鼠标熟读 defaults write -g com.apple.mouse.scaling 6...

0912模拟赛总结

这次比赛T1没有注意 DP 初始化少了 30 分,T4把 \(m\) 写成 \(n\) RE 了,少了85分,所以一定要自己造极限数据,同时要把题目里面的变量改成自己的习惯。后面在对拍的时候一直在改T1,忽略了 -inf 和 0 是有区别的,后者可以转移出不存在的状态。这几次考试都反映出大样例是很…...

Java基础程序设计

Java基础程序设计Day02 关键字和保留字的含义: 关键字被Java语言赋予了特殊含义,用做专门用途的字符串(单词)(关键字特点字母都为小写),保留字不能被用作标识符来使用goto、const,保留字不能作为标识符来命名。 标识符:凡是需要起名字的地方都叫标识符 定义标准:标识符的命名规…...

CF482C Game with Strings

比较具有启发意义的题目。 首先看到 \(m \le 20\),我们第一个想到的就是状压 DP,设 \(f_i\) 为选取位置集合为 \(i\) 时期望多少步确定,显然转移是简单的,比较困难的地方在当 \(i\) 唯一确定一个串(这个串需要你枚举出来)时,\(f_i = 0\),而这一步需要 \(O(nm2^m)\) 的复…...

相机标定

为保证单目相机在全站仪融合定位中的精度,需要进行相机标定以获得准确的内参和畸变参数。 内参矩阵 (K):描述了相机自身的几何属性,与相机的位置和姿态无关。f_x, f_y: 以像素为单位的焦距,与物理焦距和图像传感器密度有关。c_x, c_y: 主点坐标,通常是图像的中心(或附近)…...

深度学习隐私测试框架PrivacyRaven全面解析

PrivacyRaven是专为深度学习系统设计的隐私攻击测试套件,支持模型提取、成员推理和模型反演三大攻击类型,通过模块化设计实现高效隐私测试,帮助研究人员评估系统安全性。PrivacyRaven Has Left the Nest - The Trail of Bits Blog Suha S. Hussain, Georgia Tech October 08…...

华硕灵耀双屏不定时死机,开机蓝屏 其一解决方法

关闭intel RST,关闭VMD,...

完整教程:Java 抽象(abstract)关键字

完整教程:Java 抽象(abstract)关键字pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !importa…...

自建rustdesk服务器,不填写中继地址无法连接的解决

研究相当长时间,官方文档在配置服务器步骤时省略了关键一步,导致当你用定义文件名方式给客户直接使用客户端时,无法连接中继的问题,不在于客户端,而在于服务端过程省略,直接设置hbbs 服务的启动参数,添加-r <中继地址> -k_ 即可默认为 -r 0.0.0.0 服务端不能推导I…...

Typescript中Type 类型的实现原理

TypeScript 中的 "类型"(Type)是对值的结构和行为的抽象描述。它不直接参与运行时,而是在编译阶段用于约束值的形态,确保代码符合预期的契约。1.核心作用:定义 "允许的值" 的范围和操作规则2.与 JavaScript 的关系:TS 的类型系统是对 JS 值的补充描述…...

数据结构与算法-30.图-拓扑排序

一、拓扑排序定义 二、检测有向图中的环API设计实现过程 以上仅供参考,如有疑问,留言联系...

1.进制转化

...

CF1796E Colored Subgraphs

是一个读懂题意就能做出来的题。 题目意思就是要你进行某种树上剖分,求最短链可能的最大长度。 显然,有一个很容易的 DP 是设 \(f_i\) 为以 \(i\) 结尾的最短链长度,显然,它会从儿子中的最短链转移而来。 那么,在换根的过程中,我们需要记录一个全局最小值和全局次小值,可…...

MySQL 日期时间类型:从入门到精通的核心指南 - 指南

MySQL 日期时间类型:从入门到精通的核心指南 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monosp…...

Map对象在JavaScript循环中的使用

在JavaScript中,Map对象是一种新的键值对集合数据结构,与传统的Object有着本质的差异。一个Map的键可以是任意值,包括函数、对象或任何原始值。Map对象与传统的Object相比,有以下几个显著的优点:键的范围不限于字符串和Symbol。 Map对象的键值对是有序的,即键值对的插入顺…...

戒己谨言

言一 高投入,低期待 —— 2025.9.13 言二 学习是以知识武装自己 —— 2025.9.13...

2025.9.13——1黄

普及/提高- B3873 [GESP202309 六级] 小杨买饮料 简单的背包dp,注意边界情况处理。...

安全加固:启动PostgreSQL 14服务器SSL加密的方法指南在CentOS 7环境中

在CentOS 7操作系统中配置PostgreSQL 14以启用SSL加密,需要进行以下步骤: 1. 安装PostgreSQL 14: 首先确保安装了PostgreSQL 14,可以通过以下命令安装: sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest…...

更美观的网页布局

更美观的网页布局<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=d…...