Pyecharts 各种图的数据样式

桑吉图(sankey)

1.1 数据格式

桑吉图的数据格式分为两个部门,分别为nodes和links

  • nodes为所有类别的集合,数据的格式将字典通过列表进行封装
  • links是【子类-父类-数值】的集合,字典的key对应的名称为【'source(来源)','target(目标)','value'】

1.2 数据样式

nodes = [
{'name':'支出'},
{'name':'水果'},
{'name':'苹果'},
{'name':'橘子'},
{'name':'交通工具'},
{'name':'自行车'}
]
links = [
{'source':'水果','target':'支出','value':50},
{'source':'交通工具','target':'支出','value':50},
{'source':'苹果','target':'水果','value':25},
{'source':'橘子','target':'水果','value':25},
{'source':'自行车','target':'交通工具','value':50}
]


1.3 数据转换代码

原始数据传入必须为df的格式,注意事项,数据从左到右,数据必须是遵循父类到子类,样表如下

根节点

一级节点

二级节点

支出

交通工具

自行车

50

支出

水果

苹果

25

支出

水果

橘子

25

转换的函数如下:

import numpy as np
import pandas as pd


def sankey_data(df):
nodes = []
col = df.columns[0:-1]
for i in col:
for w in df[i].unique():
dic = {}
dic['name'] = w
nodes.append(dic)

col_name = ['target', 'source', 'value']
dff = pd.DataFrame(columns=col_name)
for w in range(len(col) - 1):
index_list = list(col[w:w + 2])
df1 = pd.pivot_table(df, index=index_list, aggfunc=np.sum)
df1 = df1.reset_index()
df1.columns = col_name
dff = dff.append(df1)

dff.value = dff.value.astype('int')
dff = dff[['source', 'target', 'value']]
links = dff.to_dict('records')
return nodes,links