Skip to content Skip to sidebar Skip to footer

Appending "size" Element To Last Json Child Element For A Sunburst Diagram

I have a working python script that takes my csv columns data and converts it to a json file to be read by my d3 sunburst visualization. Problem is that there is no 'size' element

Solution 1:

To add size to the last entry:

import csv
from collections import defaultdict
import json
#import uuid
#from IPython.display import display_javascript, display_html, display


def ctree():
    return defaultdict(ctree)


def build_leaf(name, leaf):
    res = {"name": name}

    # add children node if the leaf actually has any children
    if leaf.keys():
        res["children"] = [build_leaf(k, v) for k, v in leaf.items()]
    else:
        res['size'] = 1

    return res


def main():
    tree = ctree()
    # NOTE: you need to have test.csv file as neighbor to this file
    with open('test.csv') as csvfile:
        reader = csv.reader(csvfile)
        header = next(reader)  # read the header row

        for row in reader:
            # usage of python magic to construct dynamic tree structure and
            # basically grouping csv values under their parents
            leaf = tree[row[0]]

            for value in row[1:]:
                leaf = leaf[value]

    # building a custom tree structure
    res = []

    for name, leaf in tree.items():
        res.append(build_leaf(name, leaf))

    # printing results into the terminal
    print(json.dumps(res, indent=2))


main()

Post a Comment for "Appending "size" Element To Last Json Child Element For A Sunburst Diagram"