利用python,对于多个类别的数据,每个类别具有相同的流程,计算其各自转换率并绘图的问题
难点:
1、多个类别需要计算
2、每个类别中有多个流程需要进行计算
3、需要生成一张表
关键点:
1、计算完数据后,为二维表,需要将其转换为一维表才能进行绘图计算
1、数据下钻
2、按照对应的转换率进行计算
3、数据转置
4、生成固定的标签
5、二维数转一维数据 concat
附代码和案例
1、原始数据:需要分别计算新老用户(new_user)的各环节转化率([‘home_page’,‘list_page’,‘product_page’,‘payment_page’,‘paycon_page’])
#1、数据下钻 user_cr = df.groupby('new_user').agg({'home_page':'sum','list_page':'sum','product_page':'sum','payment_page':'sum','paycon_page':'sum'}).reset_index()
#2、按照对应流程计算转化率 page_list = ['home_page','list_page','product_page','payment_page','paycon_page'] CR_list = ['CR0','CR1','CR2','CR3'] for i in range(4): user_cr[CR_list[i]]= user_cr[page_list[i+1]]/user_cr[page_list[i]]
#3、数据转置 user_cr1 = user_cr.T.iloc[6:,:].reset_index()
#4、设置对应的标签 user_cr1['tag1']=pd.Series(['0','0','0','0']) user_cr1['tag2']=pd.Series(['1','1','1','1'])
#5、筛选生成对应的子表,并将二维表转化为一维表,利用concat进行拼接 user_cr1_1 = user_cr1[['index',0,'tag1']].rename(columns={0:'CR','tag1':'tag'}) user_cr1_2 = user_cr1[['index',1,'tag2']].rename(columns={1:'CR','tag2':'tag'}) user_cr1_3 = pd.concat([user_cr1_1,user_cr1_2]).sort_values('index').reset_index() # 进行排序和重置序号
#6、利用seaborn绘图,注意三个参数,x,y和hue(分组) #绘图 plt.figsize=(10,10) g = sns.barplot(x='index',y='CR',hue='tag',data=user_cr1_3) for i,j in user_cr1_3.iterrows(): g.text(i/2-0.25,j.CR+0.1,round(j.CR,2),ha='center') plt.show()