桑吉图的简单实现
主要用到的工具函数
import pandas as pd
from pyecharts.charts import Sankey
import pyecharts.options as opts
dt = pd.read_excel("C:/Users/ganyu/Desktop/ceshi.xlsx")
数据的样子
一共要将原始数据处理成两份桑吉图专用的数据。
一份是所有的节点数据,另一份是所有的连接的线数据
nodes = []
d1 = pd.concat([dt["source"],dt["target"]],ignore_index=True,axis=0)
d1 = pd.DataFrame(d1)
d1.drop_duplicates(inplace=True)
for name in d1.values:
dic = {}
dic["name"] = name[0]
nodes.append(dic)
lines = []
for line in dt.values:
dic = {}
dic["source"] = line[1]
dic["target"] = line[0]
dic["value"] = line[2]
lines.append(dic)
#增加个汇总的节点
nodes.append({"name":"total"})
lines.append({"source":"我你","target":"total","value":1200})
数据的处理结果:
节点nodes(要去重)
联接links:从左到右顺序,source指向target
制作桑吉图
c =(Sankey()
.add("sankey",
nodes=nodes,
links=lines,
linestyle_opt=opts.LineStyleOpts(opacity=0.5,width=1,curve=0.6,color="source"),
label_opts=opts.LabelOpts(position="left"),
)
.set_global_opts(title_opts=opts.TitleOpts(title="桑吉图示例"))
#.render("sankey_base2.html")
)
c.render_notebook()#在notebook上显示