昨晚研究了一晚上,给小伙伴们分享一下新学会的桑吉
import pandas as pd
import numpy as np
from pyecharts.globals import CurrentConfig, OnlineHostType
from pyecharts import options as opts # 图形设置
from pyecharts.charts import Sankey # 导入桑基图型的类
加载数据
#单线桑吉图
df=pd.read_excel('D:\用户画像\桑吉图\桑吉图数据源3_1.xlsx')
# df=df.iloc[0:16,2:]
# df.values
df=df.iloc[33:,2:5]
数据结构如下
nodes=[]
list_index = [0,1]
for i in list_index:
vales=df.iloc[:,i].unique()
print(vales)
for value in vales:
dic={}
dic['name']=value
nodes.append(dic)
linkes=[]
for i in df.values:
dic={}
dic['source']=i[0]
dic['target']=i[1]
dic['value']=i[2]
if dic['value'] == 0:
pass
else:
linkes.append(dic)
print(linkes)
pic=(
Sankey().add(
'',#图例名称
nodes,#传入节点数据
# linkes,#传入边和流量数据
linkes,
#设置透明度、弯曲度、颜色
linestyle_opt=opts.LineStyleOpts(opacity=0.3,curve=0.5,color='source'),
#标签显示位置
label_opts=opts.LabelOpts(position='right'),
#节点之间的距离
node_gap=30,
)
.set_global_opts(title_opts=opts.TitleOpts(title='11月新员工评分区间变动'))
)
pic.render('D:/用户画像/桑吉图/11月新员工评分区间变动11.html')
效果如下
多流程桑吉图
加载数据
#多流程桑吉图
df=pd.read_excel('D:\用户画像\桑吉图\桑吉图数据源3_1.xlsx')
# df=df.iloc[:,2:5]
df=df.iloc[:32,2:5]
df
数据结构如下
# 父类+子类中的数据,需要去重 df['父类'].tolist() df['子类'].tolist() # 将两个列表相加,在转成集合set进行元素去重,再转成列表 nodes = list(set(df['父类'].tolist() + df['子类'].tolist())) # 节点列表数据: nodes_list nodes_list = [] for i in nodes: dic = {} dic["name"] = i nodes_list.append(dic) nodes_list links_list = [] for i in range(len(df)): dic = {} dic['source'] = df.iloc[i,0] # 父类 dic['target'] = df.iloc[i,1] # 子类 dic['value'] = int(df.iloc[i,2]) # 数据值 : 使用int函数直接强制转换,防止json.dump()报错 links_list.append(dic) c = ( Sankey() .add( "员工评分变动情况", nodes_list, links_list, linestyle_opt=opts.LineStyleOpts(opacity=0.5, curve=0.5, color="source"), label_opts=opts.LabelOpts(position="right"), ) .set_global_opts(title_opts=opts.TitleOpts(title="连续三月在职员工桑葚图")) ) # c.render_notebook() c.render('D:\用户画像\桑吉图\连续三月在职员工评分变动10_12.html')