Search

Travel Tips

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Lifestyle

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Hotel Review

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Python数据分析实战——电商打折套路解析二

Python数据分析实战——电商打折套路解析二

2、哪些商品真的在打折呢?

要求:

① 针对每个商品,评估其打折的情况

② 针对在打折的商品,其折扣率是多少

   * 用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))

image.png

# 针对在打折的商品,其折扣率是多少


# 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

image.png

# 用bokeh绘制折线图:x轴为折扣率,y轴为商品数量占比


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)

image.png

a3 = bokeh_data2.reset_index()
a3['zkl_range'].astype(np.str)

image.png

# 按照品牌分析,不同品牌的打折力度

# 用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)

image.png



这是一个简介
    互联网冲浪金牌选手。赖床世锦赛纪录保持者,拖延俱乐部顶级VIP,夜宵外卖一级鉴赏师,国家脱单脱贫重点扶持对象,中央戏精学院优秀学生,亚洲酸柠檬推广大使,国家一级退堂鼓表演艺术家。
评论 (125)
评论

我是 s enim interduante quis metus. Duis porta ornare nulla ut bibendum

Rosie

6 minutes ago

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

Agatha Christie

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

Steven

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.

Danielle Steel

December 4, 2020 at 3:12 pm