我们在数据分析的时候,特别是电商数据分析转化率,通常用漏斗图的形式来表示各个阶段的转化率从而分析哪个环节出了问题。这些阶段大多数都是依次降低,所以我们可以更乐意用漏斗图来使得我们的数据更直观。
一般我们都熟知柱状图的绘制,但是要想变成漏斗的形式展示还是需要进行一些操作。
普通水平柱状图的绘制
import matplotlib.pyplot as plt
import pandas as pd
group=pd.DataFrame({'环节':[1,2,3,4,5],'转化率':[1,0.8,0.6,0.4,0.2]})
plt.barh(group['环节'],group['转化率'])
如果想进行逆序排列可以用
plt.gca().invert_yaxis()
漏斗图绘制
我们的漏斗图,是把柱子移到中间,那么我们该怎么样进行操作呢
首先我们来补充一点逻辑概念
如果我们要把70这个柱子移动成中心对称,那么中心点就是50这个值,两边则各是35
此时这根柱子离最左端距离则是50-35=15
要想移动柱子,则是把原来的值变为(中间值+原先的一半)
然后再用背景色的柱子进行表层覆盖,高度为(中间值-原先的一半)
然后我们就开始着手代码的编程
import matplotlib.pyplot as plt
import pandas as pd
group=pd.DataFrame({'环节':[1,2,3,4,5],'转化率':[1,0.8,0.6,0.4,0.2]})
#plt.barh(group['环节'],group['转化率'])
group['text1']=group['转化率'].apply(lambda x:0.5+x/2) #0.5为中间值
group['text2']=group['转化率'].apply(lambda x:0.5-x/2)
plt.barh(group['环节'],group['text1'])
bars=plt.barh(group['环节'],group['text2'],color='white') #背景色为白色
for i, bar in enumerate(bars): #添加数值
plt.text(0.47, bar.get_y() + bar.get_height() / 2, group['转化率'][i],
ha='left', va='center', color='black')
plt.tick_params(axis='x', which='both', bottom=False, top=False, labelbottom=False) #隐藏x轴标签和刻度线
plt.gca().invert_yaxis() #逆序排列
group补充后的样子
环节 | 转化率 | text1 | text2 | |
---|---|---|---|---|
0 | 1 | 1.0 | 1.0 | 0.0 |
1 | 2 | 0.8 | 0.9 | 0.1 |
2 | 3 | 0.6 | 0.8 | 0.2 |
3 | 4 | 0.4 | 0.7 | 0.3 |
4 | 5 | 0.2 | 0.6 | 0.4 |
大概就是这样,就不做过多的美化了