桑基图的Python实现

桑基图通常可以作为路径分析的展示,说一下如何用Python实现。

可视化神器pyecharts里有现成可用的包,今天我就是平平无奇搬运工!

官方文档参考:
1.https://pyecharts.org/#/zh-cn/basic_charts
2.https://gallery.pyecharts.org/#/Sankey/sankey_with_level_setting

第一个文档 ,基本图表——桑基图,解释了各个参数的释义;
第二个文档,举例了几类可视化的图和具体的代码:基本、从json中解析直接画图、设置每一步的样式、垂直型。
桑基图的Python实现_第1张图片
基本示例代码如下:

#导入需要的包
from pyecharts import options as opts
from pyecharts.charts import Sankey

#列全涉及的节点名称
nodes = [
    {"name": "category1"},
    {"name": "category2"},
    {"name": "category3"},
    {"name": "category4"},
    {"name": "category5"},
    {"name": "category6"},
]

#节点之间的关系和数量,source起点,target终点,value数量
links = [
    {"source": "category1", "target": "category2", "value": 10},
    {"source": "category2", "target": "category3", "value": 15},
    {"source": "category3", "target": "category4", "value": 20},
    {"source": "category5", "target": "category6", "value": 25},
]
c = (
    Sankey(init_opts=opts.InitOpts(width="1200px", height="600px")) #设置图表的宽度和高度
    .add(
        "sankey",
        nodes,#读取节点
        links,#读取路径
        linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),#设置线条样式
        label_opts=opts.LabelOpts(position="right"),#设置标签配置项
        node_align=str( "justify"),#设置节点对齐方式:right,left,justify(节点双端对齐)
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Sankey-基本示例"))#表名
    .render("sankey_base.html")#保存html文件
)
)

图片展示:

实践步骤:可以提前在SQL里计算好,以 “start,end,num:1-a, 2-b, 100”的格式存储,然后在excel里处理成nodes\links的格式,填充进去;或者用Python直接读取对应表格,再处理成符合要求的格式。
循环写入到nodes和links,代码大致如下:

#导入需要的包
from pandas as pd
from numpy as np

#读入数据data,表结构:start,end,num

#将节点循环写入到nodes
nodes = []
for i in range(2):
	label = data.iloc[:,i].unique()#去重后的节点名称
	for j in label:#以字典格式循环写入
		nodedic={}
		nodedic['name'] = j
		nodes.append(nodedic)
#nodes

#将流转路径数据循环写入links
links = []
for k in data.values:
	linkdic={}
	linkdic['source'] = k[0]
    linkdic['target'] = k[1]
    linkdic['value'] = k[2] 
    links.append(linkdic)	
#links
#带入到桑基图函数中即可

通过ESP(Excel+Sql+Python)的合力操作,就完成啦!
注意nodes\links里不要有空格,不然结果可能出不来哦,别问我为什么知道)。
最后附上一张实践成果,是用户在某个页面的路径,1-,2-表示第一步第二步,具体内容还是脱敏啦。

桑基图的Python实现_第2张图片
参考:https://www.jianshu.com/p/dde9d4072e31

你可能感兴趣的:(Python,数据可视化,数据可视化,python)