桑基图通常可以作为路径分析的展示,说一下如何用Python实现。
可视化神器pyecharts里有现成可用的包,今天我就是平平无奇搬运工!
官方文档参考:
1.https://pyecharts.org/#/zh-cn/basic_charts
2.https://gallery.pyecharts.org/#/Sankey/sankey_with_level_setting
第一个文档 ,基本图表——桑基图,解释了各个参数的释义;
第二个文档,举例了几类可视化的图和具体的代码:基本、从json中解析直接画图、设置每一步的样式、垂直型。
基本示例代码如下:
#导入需要的包
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-表示第一步第二步,具体内容还是脱敏啦。