在许多d3可视化示例中,flare.json用作树数据结构的示例,如下所示:
{
"name": "flare",
"children": [
{
"name": "analytics",
"children": [
{
"name": "cluster",
"children": [
{"name": "AgglomerativeCluster", "size": 3938},
{"name": "CommunityStructure", "size": 3812},
{"name": "HierarchicalCluster", "size": 6714},
{"name": "MergeEdge", "size": 743}
]
},
{
"name": "graph",
"children": [
{"name": "BetweennessCentrality", "size": 3534},
{"name": "LinkDistance", "size": 5731},
{"name": "MaxFlowMinCut", "size": 7840},
{"name": "ShortestPaths", "size": 5914},
{"name": "SpanningTree", "size": 3416}
此示例中的每个元素(根除外)都具有size属性。 size属性是根据树中的相对分区计算的(即有多少子节点,它有/没有子节点)。这是一个d3 example,其中这个大小的“属性”用于计算d3树形图中元素的大小。
我自己的数据看起来像这样,但没有size属性。如何使用像python这样的脚本语言计算数据的大小属性?或者我甚至不得不自己写,我可以做一个更简单,已经制作的方式吗?
答案 0 :(得分:0)
我不确定您想要什么,但可能您想要总结子分支的大小并将其作为父节点的大小(如果它还没有已经有一个集合)。这将在Python中完成,如下所示:
def sizify(tree):
children = tree.get('children', None)
if children:
children = [ sizify(child) for child in children ]
size = (tree['size'] if 'size' in tree
else sum(child['size'] for child in children))
else:
size = tree.get('size', 0)
tree['size'] = size
if children:
tree['children'] = children
return tree
对于上面的树,这就像:
{'children': [{'children': [{'children': [{'name': 'AgglomerativeCluster',
'size': 3938},
{'name': 'CommunityStructure',
'size': 3812},
{'name': 'HierarchicalCluster',
'size': 6714},
{'name': 'MergeEdge',
'size': 743}],
'name': 'cluster',
'size': 15207},
{'children': [{'name': 'BetweennessCentrality',
'size': 3534},
{'name': 'LinkDistance',
'size': 5731},
{'name': 'MaxFlowMinCut',
'size': 7840},
{'name': 'ShortestPaths',
'size': 5914},
{'name': 'SpanningTree',
'size': 3416}],
'name': 'graph',
'size': 26435}],
'name': 'analytics',
'size': 41642}],
'name': 'flare',
'size': 41642}