pyecharts--树形图的数据格式转换

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]

pyecharts--树形图的数据格式转换

上一篇:HIBT全球安全顶会|阿里云安全最新Java研究分享


下一篇:理解 KingbaseES 中的递归查询