python绘制桑吉图

昨晚研究了一晚上,给小伙伴们分享一下新学会的桑吉

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')

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值