diff --git a/observable/docs/data/graph.json.py b/observable/docs/data/graph.json.py index 3822df4..ea688ad 100644 --- a/observable/docs/data/graph.json.py +++ b/observable/docs/data/graph.json.py @@ -3,7 +3,7 @@ import pyalex from dotenv import load_dotenv -from pyalex import Institutions +from pyalex import Authors, Institutions # Load Secrets load_dotenv() @@ -19,18 +19,61 @@ y for x in institutions for y in x["associated_institutions"] ] -# Combine all institutions -all_institutions = [*institutions, *associated_institutions] +# Combine all unique institutions +seen = set() +all_institutions = [ + x + for x in [*institutions, *associated_institutions] + if not (x["id"] in seen or seen.add(x["id"])) +] # Create nodes -nodes = [{"id": x["id"], "label": x["display_name"]} for x in all_institutions] +institution_nodes = [ + {"id": x["id"], "label": x["display_name"], "type": "INSTITUTION"} + for x in all_institutions +] + +# Get unique affiliated authors +seen = set() +authors = [ + y + for x in all_institutions + for y in Authors().filter(affiliations={"institution": {"id": x["id"]}}).get() + if not (y["id"] in seen or seen.add(y["id"])) +] + +# Get unique authors affiliated with each institution +author_nodes = [ + {"id": x["id"], "label": x["display_name"], "type": "AUTHOR"} for x in authors +] + +nodes = [*institution_nodes, *author_nodes] # Create associated institution edges -edges = [ - {"id": x["id"], "start": x["id"], "end": y["id"], "label": "ASSOCIATED"} +associated_institution_edges = [ + { + "id": f"""{x["id"]}-{y["id"]}""", + "start": x["id"], + "end": y["id"], + "label": "ASSOCIATED", + "start_type": "INSTITUTION", + "end_type": "INSTITUTION", + } for x in institutions for y in x["associated_institutions"] ] - +affiliated_author_edges = [ + { + "id": f"""{x["id"]}-{y["institution"]["id"]}""", + "start": x["id"], + "end": y["institution"]["id"], + "label": "AFFILIATED", + "start_type": "AUTHOR", + "end_type": "INSTITUTION", + } + for x in authors + for y in x["affiliations"] +] +edges = [*associated_institution_edges, *affiliated_author_edges] print(json.dumps({"nodes": nodes, "edges": edges})) diff --git a/observable/docs/index.md b/observable/docs/index.md index 6c2a683..6c5a4c5 100644 --- a/observable/docs/index.md +++ b/observable/docs/index.md @@ -49,11 +49,11 @@ orb.data.setDefaultStyle({ size: 6, }; - if (node.data.label === "Node A") { + if (node.data.type === "AUTHOR") { return { ...basicStyle, size: 10, - color: "#00FF2B", + color: "#0df2c9", zIndex: 1, }; } @@ -85,4 +85,4 @@ orb.view.render(() => { }); ``` -
+