Rahkakavee Baskaran
add tree map complete
aa68450
raw
history blame
2.81 kB
from collections import Counter
import streamlit as st
import json
from itertools import islice
from typing import Generator
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import httpx
from plotly import express as px
def chunks(data: dict, size=13) -> Generator:
it = iter(data)
for i in range(0, len(data), size):
yield {k: data[k] for k in islice(it, size)}
def get_tree_map_data(
data: dict,
countings_parents: dict,
countings_labels: dict,
root: str = " ",
) -> tuple:
names: list = [""]
parents: list = [root]
values: list = ["0"]
for group, labels in data.items():
names.append(group)
parents.append(root)
if group in countings_parents:
values.append(str(countings_parents[group]))
else:
values.append("0")
for label in labels:
if "-" in label:
label = label.split("-")
label = label[0] + "<br> -" + label[1]
names.append(label)
parents.append(group)
if label in countings_labels:
values.append(str(countings_labels[label]))
else:
values.append("0")
# if "-" in label:
# names.append(label.split("-")[0])
# parents.append(label)
# names.append(label.split("-")[1])
# parents.append(label)
return parents, names, values
# Load Data
with open("taxonomy_processed_v3.json", "r") as fp:
taxonomy = json.load(fp)
re = httpx.get(
"https://www.bertelsmann-stiftung.de/fileadmin/files/musterdatenkatalog/Musterdatenkatalog_4.0_042023.json"
)
data = re.json()
theme_counts = dict(Counter([el["THEMA"] for el in data]))
labels_counts = dict(Counter([el["BEZEICHNUNG"] for el in data]))
taxonomy = taxonomy
names = [""]
parents = ["Musterdatenkatalog"]
taxonomy_group_label_mapper: dict = {el["group"]: [] for el in taxonomy}
for el in taxonomy:
if el["group"] != "Sonstiges":
taxonomy_group_label_mapper[el["group"]].append(el["label"])
else:
taxonomy_group_label_mapper[el["group"]].append("Sonstiges ")
parents, name, values = get_tree_map_data(
data=taxonomy_group_label_mapper,
countings_parents=theme_counts,
countings_labels=labels_counts,
root="Musterdatenkatalog",
)
# fig = go.Figure(
# go.Treemap(
# labels=name,
# parents=parents,
# root_color="white",
# values=values,
# # textinfo="label+value",
# ),
# )
fig = px.treemap(
names=name,
parents=parents,
)
fig.update_layout(
margin=dict(t=50, l=25, r=25, b=25),
height=1000,
width=1000,
template="plotly",
)
st.title(" Musterdatenkatalog")
st.plotly_chart(fig)