Невозможно создать график, используя graphviz - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть следующий пример данных JSON. Я прохожу через это. Я также получаю желаемый результат, но я не могу создать график из него. Мне нужен график для визуализации данных с ребрами для каждого узла.

from __future__ import print_function
import json
from graphviz import Graph
import sys
# Tree in JSON format
#s = '{"Harry": {"children": ["Bill", {"Jane": {"children": [{"Diane": {"children": ["Mary"]}}, "Mark"]}}]}}'
#s = '{"Harry": {"children": ["3Bi_ll<=0.5 samplesize=10", {"Jane": {"children": [{"Diane": {"children": ["Mary"]}}, "Mark"]}}]}}'
#{'pd_a6 <= 2.5':
# Convert JSON tree to a Python dict
TREEDATA = {'pd_a6 <= 2.5':
[{'2pd_count <= 1.9767665617780872':
[{'limit_bal <= 36181.54239732496':
[{'rev_m5 = 1.0': [1, 0]},
{'pd_m6 = 1.0': [1, 0]}]},
{'limit_bal <= 50002.424881786734':
[1, {'pd_m6 = 1.0':
[1, {'limit_bal <= 63514.92986216776': [1, 0]}]}]}]},
{'rev_a6 <= 1.5':
[{'rev_m1 = 1':
[{'1pd_count <= 0.8656180257162627':
[1, {'limit_bal <= 29954.87122417677':
[1, 0]}]}, 1]}, 1]}]}

def preOrderTraversal(pyTree):
    for key, value in pyTree.items():
        print(key)
        if isinstance(value, dict):
            preOrderTraversal(value)
#s = '{"pd_a6 <= 2.5":[{2pd_count <= 1.9767665617780872":[{"limit_bal <= 36181.54239732496":[{"rev_m5 = 1.0": [1, 0]},{"pd_m6 = 1.0": [1, 0]}]},{"limit_bal <= 50002.424881786734":[1, {"pd_m6 = 1.0":[1, {"limit_bal <= 63514.92986216776": [1, 0]}]}]}]},{"rev_a6 <= 1.5":[{"rev_m1 = 1":[{"1pd_count <= 0.8656180257162627":[1, {"limit_bal <= 29954.87122417677":[1, 0]}]}, 1]}, 1]}]}'
#data = json.loads(s)
print(json.dumps(TREEDATA, indent=5))
# Convert back to JSON & print to stderr so we can verify that the tree is correct.
#print(json.dumps(data, indent=4), file=sys.stderr)

# Extract tree edges from the dict
edges = []

def get_edges(treedict, parent=None):
    name = next(iter(treedict.keys()))
    if parent is not None:
        edges.append((parent, name))
    for item in treedict[name]:
        if isinstance(item, dict):
            get_edges(item, parent=name)
        else:
            edges.append((name, item))

get_edges(TREEDATA)
#xyz =get_edges(TREEDATA)
# Dump edge list in Graphviz DOT format
print('strict digraph tree {')
for row in edges:
    print('    {0} -> {1};'.format(*row))
print('}')

TREEDATA = Graph(format='png')
TREEDATA.attr('node', shape='box')
TREEDATA.render("graph-")
...