今天给大家分享一些数据可视化方向的干货,我们来试试用Python画“漏斗图”吧,我希望你会阅读这篇文章它会有所回报。关于“漏斗图”漏斗图常用于用户行为的转化率分析,例如通过漏斗图分析用户购买过程中各个环节的转化率。当然,在整个分析过程中,我们会将流程优化前后的漏斗图放在一起,进行对比分析,得出相关结论。今天,我将使用模块“matplotlib”、“plotly”和“pyecharts”来教大家如何画出好看的漏斗图。首先,我们需要导入我们需要的模块和数据,importmatplotlib.pyplotaspltimportpandasassspddf=pd.DataFrame({"Link":["Link1","Link2","Link3","Link4","Link5"],"NumberofPeople":[1000,600,400,250,100],"OverallConversionRate":[1.00,0.60,0.40,0.25,0.1]})需要的数据如下如图:使用matplotlib制作一个漏斗图,效果可能略显简单粗暴,制作原理比较简单。先画一个水平方向的直方图,然后用plot.barh()中的“left”参数将直方图向左移动,看起来像漏斗图。y=[5,4,3,2,1]x=[85,75,58,43,23]x_max=100x_min=0foridx,valinenumerate(x):plt.barh(y[idx],x[idx],left=idx+5)plt.xlim(x_min,x_max)绘制我们想要的漏斗图,代码示例如下:frommatplotlibimportfont_managerasfm#funnelcharty=[5,4,3,2,1]labels=df["link"].tolist()x=df["人数"].tolist()x_range=100font=fm.FontProperties(fname="KAITI.ttf")fig,ax=plt.subplots(1,figsize=(12,6))foridx,valinenumerate(x):left=(x_range-val)/2plt.barh(y[idx],x[idx],left=left,color='#808B96',height=.8,edgecolor='black')#labelplt.text(50,y[idx]+0.1,labels[idx],ha='center',fontproperties=font,fontsize=16,color='#2A2A2A')#valueplt.text(50,y[idx]-0.3,x[idx],ha='center',fontproperties=font,fontsize=16,color='#2A2A2A')ifidx!=len(x)-1:next_left=(x_range-x[idx+1])/2shadow_x=[left,next_left,100-next_left,100-left,left]shadow_y=[y[idx]-0.4,y[idx+1]+0.4,y[idx+1]+0.4,y[idx]-0.4,y[idx]-0.4]plt.plot(shadow_x,shadow_y)plt.xlim(x_min,x_max)plt.axis('off')plt.title('损失率每个链接',字体属性es=font,loc='center',fontsize=24,color='#2A2A2A')plt.show()绘制的漏斗图如下图所示:当然如果我们用plotly来更简单绘制,代码示例如下:importplotly.expressaspxdata=dict(values=[80,73,58,42,23],labels=['Link1','Link2','Link3','Link4','Link5'])fig=px.funnel(data,y='labels',x='values')fig.show()最后我们使用pyecharts模块来绘制。有一种方法专门用来画“漏斗图”。我们只需要调用frompyecharts.chartsimportFunnelfrompyechartssimportoptionsasoptsfrompyecharts.globalsimportThemeTypec=(Funnel(init_opts=opts.InitOpts(width="900px",height="600px",theme=ThemeType.INFOGRAPHIC)).add("Link",df[["Link","整体转化率"]].values,sort_="descending",label_opts=opts.LabelOpts(position="inside"),).set_global_opts(title_opts=opts.TitleOpts(title="PyechartsFunnelChart",pos_bottom="90%",pos_left="center")))c.render_notebook()在我们标记数据之后。c=(Funnel(init_opts=opts.InitOpts(width="900px",height="600px",theme=ThemeType.INFOGRAPHIC)).add("商品",df[["环球节","总体转化率"]].values,sort_="descending",label_opts=opts.LabelOpts(position="inside"),).set_global_opts(title_opts=opts.TitleOpts(title="Pyecharts漏斗图",pos_bottom="90%",pos_left="center")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}")))c.render_notebook()
