Travel Tips
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Python数据分析实战——电商打折套路解析二
要求:
① 针对每个商品,评估其打折的情况
② 针对在打折的商品,其折扣率是多少
* 用bokeh绘制折线图:x轴为折扣率,y轴为商品数量
③ 按照品牌分析,不同品牌的打折力度
* 用bokeh绘制浮动散点图,y坐标为品牌类型,x坐标为折扣力度
提示:
① 打折情况评估方法:
真打折:商品的价格在10天内有波动、双11价格为10天内最低价、不存在涨价现象
不打折:商品价格无变化
② 针对每个商品做price字段的value值统计,查看价格是否有波动,可以先用pd.cut将date分为不同周期:'双十一前','双十一当天','双十一后',得到period字段
data[['id','price','date']].groupby(['id','price']).min()
针对统计出来的结果,如果按照id和price分组仍只有一个唯一值,则说明价格未变,没打折;否则为打折
③ 折扣率 = 双十一当天价格 / 双十一之前价格
④ 作图过程中,清除掉折扣率大于95%的数据
# 针对每个商品,评估其打折的情况 # 真打折:商品的价格在10天内有波动、双11价格为10天内最低价、不存在涨价现象 # 不打折:商品价格无变化 import os os.chdir('/home/zty/Documents/python/Python进阶数据分析及可视化/实战/练习04_电商打折套路解析/') # 创建工作路径 df = pd.read_excel('双十一淘宝美妆数据.xlsx',sheet_name=0,header=0,index_col=0) df['date'] = df.index.day # 提取销售日期 data2 = df[['id','title','店名','date','price']] data2['period'] = pd.cut(data2['date'],[4,10,11,14],labels = ['双十一前','双十一当天','双十一后']) #print(data2.head()) # 筛选数据 price = data2[['id','price','period']].groupby(['id','price']).min() price.reset_index(inplace = True) # 针对每个商品做price字段的value值统计,查看价格是否有波动 id_count = price['id'].value_counts() id_type1 = id_count[id_count == 1].index id_type2 = id_count[id_count != 1].index # 筛选出“不打折”和“真打折”的商品id n1 = len(id_type1) n2 = len(id_type2) print('真打折的商品数量约占比%.2f%%,不打折的商品数量约占比%.2f%%' % (n2/len(id_count)*100, n1/len(id_count)*100))
# result3_data1 = data2[['id','price','price','店名']] # print(result3_data1.describe) # data2 = df[['id','title','店名','date','period']] # data2 = data2.loc[data2.index.drop_duplicates(keep=False),:] # 去掉df1中重复索引 data2['period'] = pd.cut(data2['date'],[4,10,11,14],labels = ['双十一前','双十一当天','双十一后']) result3_data1 = data2[['id','price','店名','period']].groupby(['id','price']).min() result3_data1.reset_index(inplace = True) # 筛选数据 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'] # 计算折扣率 result3_data2
bokeh_data = result3_data2[['id','zkl']].dropna() bokeh_data['zkl_range'] = pd.cut(bokeh_data['zkl'],bins = np.linspace(0,1,21)) bokeh_data2 = bokeh_data.groupby('zkl_range').count().iloc[:-1] # 这里去掉折扣率在0.95-1之间的数据,该区间内数据zkl大部分为1,不打折 bokeh_data2['zkl_pre'] = bokeh_data2['zkl']/bokeh_data2['zkl'].sum() # 将数据按照折扣率拆分为不同区间,并统计不同1扣率的商品数量 bokeh_data2.index =bokeh_data2.index.astype(np.str) source = ColumnDataSource(data=bokeh_data2) # 创建数据 lst_brand = bokeh_data2.index.tolist() hover = HoverTool(tooltips=[("折扣率", "@zkl")]) # 设置标签显示内容 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)
a3 = bokeh_data2.reset_index() a3['zkl_range'].astype(np.str)
# 用bokeh绘制浮动散点图,y坐标为品牌类型,x坐标为折扣力度 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) # 创建数据 hover = HoverTool(tooltips=[("折扣率", "@zkl")]) # 设置标签显示内容 p = figure(plot_width=800, plot_height=600,y_range=brands,title="不同品牌折扣率情况", tools=[hover,'reset,ywheel_zoom,pan,crosshair']) p.circle(x='zkl', y=jitter('店名_y', width=0.6, range=p.y_range), source=source, alpha=0.3) # jitter参数 → 'day':第一参数,这里指y的值,width:间隔宽度比例,range:分类范围对象,这里和y轴的分类一致 p.ygrid.grid_line_color = None # 设置其他参数 show(p)
Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor
December 4, 2020 at 3:12 pm
Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor
December 4, 2020 at 3:12 pm
Donec in ullamcorper quam. Aenean vel nibh eu magna gravida fermentum. Praesent eget nisi pulvinar, sollicitudin eros vitae, tristique odio.
December 4, 2020 at 3:12 pm
我是 s enim interduante quis metus. Duis porta ornare nulla ut bibendum
Rosie
6 minutes ago