Pyecharts 各种图的数据样式
1.树形图(Tree)
1.1树形图的格式
- 样式为dict字典格式,其中包含的key为【name,children,value】
- 同一层的key,只会有两种组合【name,children】和【name,value】,其中第一种代表该名称下存在子集
- name代表的为名称,children代表该名称下存在子集,value代表值
- name作为key,value的值为字符串;value作为key,value的值为数字或者字符串;children作为key,value的值为列表
1.2树形图数据样式
data={
‘name‘:‘apple‘, # 树根,第一层
‘children‘:[
{‘name‘:‘banana‘,‘value‘:2000},
{‘name‘:‘orange‘,‘value‘:3000},
{‘name‘:‘pie‘,‘children‘:[{‘name‘:‘litchi‘,‘value‘:4000}]} # 第二层为banana,orange,pie,第三层为litchi
]
}
1.3数据转换代码
原始数据类似这样的表格,注意事项,根节点的数据必须为全部一致的数据,分支2的数据必须为不重复的数据,否则会出现问题。
根节点 | 分支1 | 分支2 | 值 |
---|---|---|---|
客服一部(故障报修) | 报修01班 | 马根玲 | 03003394 |
客服一部(故障报修) | 报修02班 | 林健张 | 03000327 |
客服一部(故障报修) | 报修02班 | 刘月 | 03008591 |
客服一部(故障报修) | 报修02班 | 吴雅丽 | 03008825 |
客服一部(故障报修) | 报修02班 | 严浩 | 03006447 |
客服一部(故障报修) | 报修02班 | 徐红娣 | 03008593 |
数据转换的函数如下
def tree_data(df):
if df.__class__.__name__ != ‘DataFrame‘:
print(‘传入的参数非pandas得数组对象,请确认传参是否准确‘)
return None
col_len = len(df.columns)
if len(df.iloc[:,0].unique()) != 1:
print(‘传入的数据,第一列值中存在不相同的值或者第一列为空值,请核对‘)
return None
if not df.iloc[:,col_len-1].is_unique:
print(‘传入的数据,倒数第二列值必须为非重复值,请核对‘)
return None
# 从第一列到倒数第二列,依次循环,形成一个匹配的字典数据
data_dic = {}
for i in range(col_len-2):
for n in df.iloc[:, i].unique():
data_dic[n] = list(df[df.iloc[:, i] == n].iloc[:, i + 1].unique())
# 将df数据,逐列开始判断是否存在子集,并依次形成列表
data_list = []
for f in range(col_len):
data = []
for w in df.iloc[:,f].unique():
dic = {}
dic[‘name‘] = w
if f == col_len - 2:
dic[‘value‘] = df[df.iloc[:,f]==w].iloc[:,f+1].values[0]
elif f == col_len - 1:
break
else:
dic[‘children‘] = []
data.append(dic)
data_list.append(data)
# 删除末尾空列表,并跌倒列表顺序
data_list.pop()
data_list.reverse()
# 嵌套循环,根据匹配表依次将数据录入到所属children中
for i in range(col_len-2):
for w in data_list[i+1]:
v_list = data_dic[w[‘name‘]]
for m,n in enumerate(data_list[i]):
v_1 = n[‘name‘]
if v_1 in v_list:
w[‘children‘].append(n)
return data_list[-1][0]