Praxisprojekt Second Brain · Graphen
Den Graphen exportieren
Lernziele
- Du exportierst den Graphen deines Vaults als CSV oder GraphML und weißt, was das Export-Skript weglässt.
- Du beantwortest mit NetworkX in wenigen Zeilen, wie zersplittert der Vault ist, welche Seiten zentral sind und was niemand erreicht.
- Du findest Brücken über Betweenness und weißt, warum sie wertvoll und empfindlich zugleich sind.
Die Graphansicht von Obsidian ist ein Betrachter. Um etwas zu berechnen, brauchst du den Graphen außerhalb davon.
Exportieren
python3 scripts/graph_export.py ~/brain edges.csv
python3 scripts/graph_export.py ~/brain graph.graphml --format graphml
Das Skript aus dem Werkzeugkasten des Kurses liest jeden Wikilink als Kante, übernimmt den Seitentyp type als Eigenschaft jedes Knotens und braucht keine weiteren Pakete. Die CSV-Datei ist für Code, GraphML für Gephi. Der Befehl /graph-export startet das Skript und fasst zusammen, was der Export enthält.
Analyse
Mit dem Python-Paket NetworkX beantwortest du drei Fragen in wenigen Zeilen: Wie zersplittert ist der Vault? Welche Seiten sind strukturell zentral? Was erreicht niemand?
import networkx as nx
g = nx.DiGraph(nx.read_graphml("graph.graphml"))
print(nx.number_weakly_connected_components(g))
print(sorted(nx.pagerank(g).items(), key=lambda kv: -kv[1])[:10])
print([n for n in g if g.in_degree(n) == 0])
Die erste Zeile zählt die Inseln. Die zweite listet die zehn Seiten mit dem höchsten PageRank. Die dritte nennt alle Seiten, auf die nichts verlinkt.
Wir laden bewusst die GraphML-Datei. Sie enthält jede Seite als Knoten, auch Seiten ganz ohne Links. Baust du den Graphen nur aus edges.csv, fehlen genau diese Seiten, und Inseln wie Waisen werden zu niedrig gezählt. Installiert wird NetworkX mit pip3 install --user networkx.
PageRank auf einem Wissensgraphen lohnt sich nach unserer Einschätzung einmal. Die obersten Seiten zeigen, worum es in deinem Vault wirklich geht, und das weicht verlässlich von dem ab, was du selbst sagen würdest.
Betweenness
b = nx.betweenness_centrality(g)
print(sorted(b.items(), key=lambda kv: -kv[1])[:10])
Betweenness misst, wie oft eine Seite auf dem kürzesten Weg zwischen zwei anderen liegt. Seiten mit hoher Betweenness sind die Brücke · engl. bridgeEine Seite, die zwei sonst getrennte Bereiche des Graphen verbindet. Sie liegt auf vielen kürzesten Wegen zwischen anderen Seiten.Im Glossar zwischen den Clustern. Nach unserer Einschätzung ist das die eine Kennzahl, die den Rechenaufwand wert ist. Der Befehl /bridges berechnet sie und nennt zu jeder Brücke, was ohne sie nichts mehr voneinander weiß.
Brücken zählen aus zwei Gründen. Sie sind nach unserer Einschätzung deine wertvollsten Seiten, weil sie Verbindungen halten, die in keiner einzelnen Quelle standen. Und sie sind die empfindlichen Stellen: Ist eine Brücke falsch oder verschwindet sie bei einer Zusammenführung, hören zwei Bereiche des Vaults still auf, sich gegenseitig zu informieren.
Ein Hub und eine Brücke sind verschiedene Dinge. Im Beispiel hat „Embeddings“ die meisten Links, „Hybride Suche“ liegt auf den meisten Wegen. Vergleiche die Modi Hubs und Brücken.
Beispiel: Hub und Brücke
- Seiten
- 11
- Links
- 16
- Waisen
- 0
- Ø Links pro Seite
- 1,5
Graphdatenbanken
Ladybug ist eine eingebettete Graphdatenbank ohne Server. Sie liest CSV-Dateien direkt mit COPY … FROM ein und beantwortet Abfragen in der Sprache Cypher. Ladybug führt das Projekt Kuzu, dessen Repository im Oktober 2025 archiviert wurde, unter neuem Namen weiter. Cypher-Abfragen über die eigenen Notizen machen nach unserer Einschätzung einen Abend lang echt Spaß. Neo4j ist die große Variante mit eigenem Server und lohnt sich nach unserer Einschätzung erst, wenn du etwas darauf aufbaust.
Mach dir klar, was das ist: eine Analyseschicht, die neben dem Vault steht. Das Markdown bleibt maßgeblich, die Datenbank ist ein Abzug, den du jederzeit neu bauen kannst. Sobald du Wissen schreibst, das nur in der Datenbank steht, verlierst du die Portabilität, für die du diesen Ansatz gewählt hast.
Gephi
Gephi ist zum Anschauen da. Lade die GraphML-Datei, starte das Layout ForceAtlas2, setze die Knotengröße nach Grad (Appearance → Nodes → Size → Ranking → Degree) und färbe nach type (Appearance → Nodes → Partition). Gephi zeichnet große Graphen so, wie Obsidian es nicht kann. Willst du einen Screenshot, der sich zeigen lässt, nimm Gephi.
Synchron halten
Der Export ist eine Momentaufnahme und ab der nächsten Änderung veraltet. Erzeuge ihn neu, wenn du ihn brauchst. Bearbeite nie den exportierten Graphen in der Erwartung, dass der Vault folgt.
Merksätze
- graph_export.py schreibt Kanten als CSV oder alle Seiten mit Typ als GraphML. Index und Log lässt es weg, doppelte Links fasst es zusammen, Links auf Aliase meldet es.
- Lade für die Analyse die GraphML-Datei, damit Seiten ohne Links nicht fehlen.
- Komponenten, PageRank und Eingangsgrad null zeigen Zersplitterung, Zentrum und Unerreichbares.
- Betweenness findet Brücken: wertvoll, weil sie Bereiche verbinden, und empfindlich, weil ein Fehler auf ihnen zwei Bereiche trennt.
- Graphdatenbank und Gephi sind Zusätze. Das Markdown bleibt maßgeblich, den Export erzeugst du neu.
Prüf dich selbst
Denkfrage
Warum lädt das Analyse-Skript die GraphML-Datei und baut den Graphen nicht aus edges.csv?
Die CSV-Datei enthält nur Kanten. Eine Seite ohne jeden Link kommt darin gar nicht vor und fehlt dann im Graphen. Genau diese Seiten sind aber die Waisen und die kleinsten Inseln, die du finden willst. Die GraphML-Datei listet jede Seite als Knoten.
Denkfrage
Eine Seite hat nur vier Links, aber die höchste Betweenness im Vault. Was bedeutet das, und was tust du?
Sie verbindet Bereiche, die sonst kaum zusammenhängen. Lies sie besonders gründlich gegen, weil ein Fehler auf ihr beide Bereiche betrifft. Bei einer Zusammenführung oder Löschung prüfst du vorher, welche Verbindungen sie trägt.
Prüf dich selbst
Quellen
- NetworkX: betweenness_centrality
Anteil der kürzesten Wege durch einen Knoten, standardmäßig normiert.
- NetworkX: read_graphml
- Ladybug
Eingebettete Graphdatenbank mit Cypher, früher Kuzu.
- Ladybug: Import aus CSV
COPY … FROM für CSV-Dateien.
- Kuzu (archiviert)
- Neo4j: Getting Started
Graphdatenbank mit Server, Abfragesprache Cypher.
- Gephi Quick Start
ForceAtlas2, Größe nach Grad über Ranking, Farbe über Partition.