0
点赞
收藏
分享

微信扫一扫

【python数据分析实战】电商打折套路解析(3)—— 哪些商品真的在打折?其折扣率是多少?


1. 划分商品销售时期

1) 首先需要重新的取出加载的原始表格中所需字段的数据

2) 其次就是针对销售的时间进行时期的划分,就类似之前处理的商品类别的划分。划分的依据如下

     划分时段为:‘双十一前’(4-10),‘双十一当天’(11),‘双十一后’(11-14);

3)接着针对每个商品,评估其打折的情况

     真打折:商品的价格在10天内有波动、双11价格为10天内最低价、不存在涨价现象

     不打折:商品价格无变化

data2 = df[['id','title','店名','date','price']]
data2['period'] = pd.cut(
data2['date'],#依据要划分的字段
[4,10,11,14], #划分的区间
labels = ['双十一前','双十一当天','双十一后']#对应的命名填充
)

2. 计算出打折商品和未打折商品占比

1) 首先查看同一个商品是否有价格上的波动

和之前的筛选同一个商品是否换了马甲的筛选情况类似,之前的是按照’id’和’title’字段,原理是通过同一个’id’对应多个’title’从而确定商品是换了马甲的,那么这里是可以借鉴,使用’id’和’price’进行分组,就可以知道同一个’id’对应的’price’是否一致,如果不一致,证明双十一期间存在着价格波动,如果一致说明未变化。由于这里是要获得价格,按照最小值的进行获取

price = data2[['id','price','period']].groupby(['id','price']).min()
price.reset_index(inplace = True)
print(price.head(15))

–> 输出结果为:(从结果可以看出部分商品双十一前的价钱是有打折的)

【python数据分析实战】电商打折套路解析(3)—— 哪些商品真的在打折?其折扣率是多少?_机器学习


2) 筛选出真打折和不打折的商品的​​id​

这里默认价格变动就是在真打折,因为是双十一活动,如果比原来的价钱还高的话,商家也没有必要和自己作对呢,所以可以认定价格存在波动就是在打折(商家参加活动的策略:就是以让利获取多销)。筛选的方式就很简单了,可以直接对’id’字段进行计数即可,如果’id’的值为1,说明该商品的价钱一直没有发生变化,如果’id’值不为1,说明商品再打折

id_count = price['id'].value_counts()
id_type1 = id_count[id_count == 1].index
id_type2 = id_count[id_count != 1].index

3) 计算打折商品和不打折商品占比

n1 = len(id_type1)
n2 = len(id_type2)
print('真打折的商品数量约占比{:.2f}%,不打折的商品数量约占比{:.2f}%'.format(n2/len(id_count)*100, n1/len(id_count)*100))

–> 输出结果为:(可以看出其实有四分之三的商品是没有打折的)

真打折的商品数量约占比24.73%,不打折的商品数量约占比75.27%

3. 针对打折商品,查看折扣率为多少

1) 还是和之前一样按照’id’和’price’分组,不过这次选择的数据集是刚刚处理完毕后的data2(添加了’period’字段)

result3_data1 = data2[['id','price','period','店名']].groupby(['id','period']).min()
result3_data1.reset_index(inplace = True)
print(result3_data1.head(15))

–> 输出结果为:

【python数据分析实战】电商打折套路解析(3)—— 哪些商品真的在打折?其折扣率是多少?_机器学习_02


2)选择商品,筛选出双十一前和当天的商品,两者相除就是折扣率了

result3_before11 = result3_data1[result3_data1['period'] == '双十一前']
result3_at11 = result3_data1[result3_data1['period'] == '双十一当天']
result3_data2 = pd.merge(result3_at11,result3_before11,on = 'id')

result3_data2['zkl'] = result3_data2['price_x'] / result3_data2['price_y']

–> 输出结果为:(先筛选,在合并,最后计算折扣率)

【python数据分析实战】电商打折套路解析(3)—— 哪些商品真的在打折?其折扣率是多少?_python_03


3) 数据清洗

可以看到最后输出的结果存在着很多缺失值,需要先处理这些数据,可以先查看最后的数据缺失值的情况,然后对相应字段进行处理,最后核实

print(result3_data2.isna().sum())

bokeh_data = result3_data2[['id','zkl']].dropna()
print(bokeh_data.isna().sum())

–> 输出结果为:(最后只需要提取商品的id号以及折扣率即可)

id             0
period_x 0
price_x 1167
店名_x 1167
period_y 0
price_y 141
店名_y 141
zkl 1224
dtype: int64

id 0
zkl 0
dtype:

4)划分折扣区间

为了绘图美观,数据绘制的点数在15-20个左右较好,这里由于数据量较大,采用的是划分20份,接着就是对处于这20个区间的数据进行分组,就可以得到需要的数据了

bokeh_data['zkl_range'] = pd.cut(bokeh_data['zkl'],bins = np.linspace(0,1,21))
bokeh_data2 = bokeh_data.groupby('zkl_range').count().iloc[:-2]
print(bokeh_data2)

–> 输出结果为:(最后一个区间是nan,原因是有的商品实际上是涨价的,也就不在[0-1]区间内,但是数据很少,倒数第二个是区间(0.95-1],反应的是商品几乎没有打折,可以直接删除,如果保留的话,数据量较大,共1468份,会造成绘制的图形畸形)

【python数据分析实战】电商打折套路解析(3)—— 哪些商品真的在打折?其折扣率是多少?_机器学习_04


5) 计算不同折扣率商品的百分比

bokeh_data2['zkl_pre'] = bokeh_data2['zkl']/bokeh_data2['zkl'].sum()

6) bokeh制图

① 绘制商品折扣率情况图形

from bokeh.models import HoverTool
output_file('折扣率.html')
source = ColumnDataSource(data=bokeh_data2)
# 创建数据

lst_brand = bokeh_data2.index.tolist()

hover = HoverTool(tooltips=[("商品数量", "@zkl"),
("折扣率","@zkl_pre{100%,0.0}")]) # 设置标签显示内容

p = figure(x_range=lst_brand, plot_width=900, plot_height=350, title="商品折扣率统计",
tools=[hover,'reset,xwheel_zoom,pan,crosshair'])
# 构建绘图空间

p.line(x='zkl_range',y='zkl_pre',source = source, # 设置x,y值, source → 数据源
line_width=2, line_alpha = 0.8, line_color = 'black',line_dash = [10,4]) # 线型基本设置
# 绘制折线图
p.circle(x='zkl_range',y='zkl_pre',source = source, size = 8,color = 'red',alpha = 0.8)

p.xgrid.grid_line_color = None
p.axis.minor_tick_line_color = None
p.outline_line_color = None
# 设置其他参数
show(p)

–> 输出结果为:(这里要注意可交互式注释的时候,显示的格式的问题,比如想都按照百分号的形式输入)

【python数据分析实战】电商打折套路解析(3)—— 哪些商品真的在打折?其折扣率是多少?_机器学习_05


② 绘制不同品牌折扣率情况图形

from bokeh.transform import jitter

brands = result3_data2['店名_y'].dropna().unique().tolist()
# 得到y坐标

bokeh_data = result3_data2[['id','zkl','店名_y']].dropna()
bokeh_data = bokeh_data[bokeh_data['zkl'] < 0.95]
source = ColumnDataSource(data = bokeh_data)
# 创建数据
output_file('不同品牌折扣率.html')

hover = HoverTool(tooltips=[("折扣率", "@zkl")]) # 设置标签显示内容

p = figure(plot_width=800, plot_height=600,y_range=brands,title="不同品牌折扣率情况",
tools=[hover,'reset,ywheel_zoom,pan,crosshair,box_select'])

p.circle(x='zkl',
y=jitter('店名_y', width=0.6, range=p.y_range),
source=source, alpha=0.3)

p.ygrid.grid_line_color = None
# 设置其他参数

show(p)

–> 输出结果为:( jitter参数 → ‘day’:第一参数,这里指y的值,width:间隔宽度比例,range:分类范围对象,这里和y轴的分类一致)

【python数据分析实战】电商打折套路解析(3)—— 哪些商品真的在打折?其折扣率是多少?_数据可视化_06


举报

相关推荐

0 条评论