寻找零售密码 | Python 实现周权重指数计算&可视化
引言 周权重指数的概念先不说,先看下图(单位:万元) 很明显最右边的方式能很快反映出一大个表格数据的比例情况,也更便于推广。 周权重指数计算简单,但其反映出的问题和其应用却相当不简单,是将业务融合进数据分析的基础。老板给你一份公司成都四家 ZARA 的2020年每日销售数据,要求我们从每日销售额的角度找出一些规律,出于不浪费双方时间的角度,分析结果只允许画在一张图中。 根据...
引言
周权重指数的概念先不说,先看下图(单位:万元)
很明显最右边的方式能很快反映出一大个表格数据的比例情况,也更便于推广。
周权重指数是以某段销售周期内的历史日销售额数据为基础,以周为单位,进行权重分析处理的一种管理工具。周权重指数是一个相对的概念,每个企业都不尽相同,一般介于 7.0 ~ 14.0 之间。值越大表示该企业或者店铺的日销售额波动幅度越大。周权重指数是零售店铺用来量化处理各种销售状况、销售事件的管理工具,非常强大。
周权重指数计算简单,但其反映出的问题和其应用却相当不简单,是将业务融合进数据分析的基础。老板给你一份公司成都四家 ZARA 的2020年每日销售数据,要求我们从每日销售额的角度找出一些规律,出于不浪费双方时间的角度,分析结果只允许画在一张图中。
根据需求,周权重指数表便是一个很不错的选择。事不宜迟,快开始,本文含精美快捷可视化和数据处理。
公式
星期N的日权重指数
= (星期N的平均日销售额 ÷ 平均周销售额)× 企业周权重指数
讲解完毕,不算难,只是一个比例问题,关键就看企业是否已经有了确定的周权重指数(正常都会有),没有的话我们通常把平均日销售额最小的那天设置为 1.0。本博文侧重代码/可视化实现和应用方面,所以请继续往下
实战效果
有点骚的可视化
静态图
它动起来了!
业务应用(重要)
实战中的数据是笔者自己构造的,现实生活中的周权重指数的分布一般为如下几种,我们可以根据权重指数值的高低来安排店铺的员工排班(后续博文会出如何排班的)、安排店铺的陈列调整时间、部署送货时间窗口等。
比如右上角的分店陈列换装时间定在星期三就不合适,星期三对它来说是销售高峰,应该尽量不要安排可能影响销售的事情。同理,在该店周三上班的店员应该是一周中最多的,而相反周一应该是最少的。另外,左上角分店安排周四送货,右下角店铺周一送货最好。
拓展一下:我们还可以猜猜这些图大多会出现在哪些场景呢?
- 如果门店在周末两天的权重指数合计占比较少的话,这个店铺很可能是位于写字楼区域内,因为这个时段正好是写字楼周末休息的时间。
- 若周五到周日的权重指数合计占到了70%,说明该分店的销售过于集中。
哪些行业可能具有这些以周为单位循环的规律?
- 传统零售业:包括百货商场,超市,便利店等
- 各种专卖店
- 以普通消费者为对象的电子商务模式,包括B2C,C2C等
- 售卖服务的也太,如火车站,汽车站,电影院,饭店,旅游景点等
以售卖服务为主的业态,比如手机营运商的营业厅,可能不会产生销售额,这时候我们就可以利用日客流量为基础数据进行计算。其他如呼叫中心可用电话接通数的数据,电子商务网站可用访问量数据(后续ab测试案例函数)。
源码呈现(重点)
里面的一些定位语句如 data[‘Fri’] 也可以根据现实需求改造成 iloc 来定位,这样也可能更准确
import pandas as pd
import numpy as np
# 提高输出效率库
from IPython.core.interactiveshell import InteractiveShell # 实现 notebook 的多行输出
InteractiveShell.ast_node_interactivity = 'all' #默认为'last'
# ---------------------- 周权重指数 -----------------------------
def weightCreated(data, standard=None):
""" 传入指定格式的数据,返回该分店的周权重表,可自定义标准 """
daily_mean = {'Mon': np.mean(data['Mon']), 'Tue': np.mean(data['Tue'])
, 'Wed': np.mean(data['Wed']), 'Thu': np.mean(data['Thu'])
, 'Fri': np.mean(data['Fri']), 'Sau': np.mean(data['Sau'])
, 'Sun': np.mean(data['Sun'])}
weight_index = ['平均日销售额', '日销售权重指数']
weight_columns = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sau', 'Sun']
weight = pd.DataFrame(data=daily_mean,
index=weight_index, columns=weight_columns)
weight['Total'] = np.sum(weight.loc['平均日销售额', :])
if standard:
weight.loc['日销售权重指数', :] = \
weight.loc['平均日销售额', :]*standard / weight.loc['平均日销售额', 'Total']
return weight
# 若没有标准将销售中销售额最低一天的数据的日权重指数设置为 1.0,其余参照
base = weight.iloc[0, :].min()
weight.loc['日销售权重指数', :] = weight.loc['平均日销售额', :] / base
return weight
你可能还喜欢
精彩回顾
延伸阅读
更多推荐
所有评论(0)