Abfragen in einem Graphen
Nachdem du nun einige grundlegende Eigenschaften des Graphen kennst und mit den Zeichenfunktionen von NetworkX geübt hast, Teile davon zu visualisieren, ist es Zeit zu erkunden, wie du Knoten und Kanten abfragen kannst. Konkret suchst du nach „interessanten Knoten“ und „interessanten Kanten“. Dafür nutzt du die Methoden .nodes() und .edges(), die Eric im Video gezeigt hat. Die Methode .nodes() gibt einen iterierbaren Node View zurück, während .edges() einen iterierbaren Edge View liefert, in dem jedes Tupel die Knoten der jeweiligen Kante enthält. Denk daran: Wenn du das Schlüsselwortargument data=True übergibst, erhältst du außerdem die zugehörigen Metadaten der Knoten und Kanten.
Du schreibst List Comprehensions, um diese Abfragen kompakt in einer Zeile zu formulieren. Wenn du eine Auffrischung zu List Comprehensions brauchst, sieh dir Teil 2 des DataCamp-Kurses „Python Data Science Toolbox“ an. Hier ist das „Rezept“ für eine List Comprehension:
[ Ausdruck for Iteratorvariable in Iterable if Bedingung ].
Du musst das _Iterable_ und die _Bedingung_ ausfüllen. Probiere deine Lösung gern in der IPython Shell am Graphen aus, bevor du sie einreichst.
Diese Übung ist Teil des Kurses
Einstieg in die Netzwerkanalyse mit Python
Anleitung zur Übung
- Verwende eine List Comprehension, um eine Liste von Knoten aus dem Graphen
Tzu erhalten, die das Label'occupation'mit dem Wert'scientist'haben.- Der Ausdruck
nist bereits vorgegeben, ebenso die Iteratorvariablennundd. Deine Aufgabe ist es, das Iterable und die Bedingung zu vervollständigen. - Verwende die Methode
.nodes()vonT, um auf die Knoten zuzugreifen, und gibdata=Truean, um die Metadaten der Knoten zu erhalten. - Die Iteratorvariable
dist ein Dictionary. Der relevante Schlüssel ist'occupation', der relevante Wert ist'scientist'.
- Der Ausdruck
- Verwende eine List Comprehension, um eine Liste von Kanten aus dem Graphen
Tzu erhalten, die seit mindestens 6 Jahren bestehen, d. h. von vor dem 1. Jan. 2010.- Auch hier sollst du das Iterable und die Bedingung vervollständigen.
- Verwende die Methode
.edges()vonT, um auf die Kanten zuzugreifen. Achte darauf, auch hier die Metadaten zu erhalten. - Die Daten sind als
datetime.date-Objekte im Metadaten-Dictionarydunter dem Schlüssel'date'gespeichert. Um beispielsweise auf den 1. Jan. 2009 zuzugreifen, wäre der Dictionary-Wertdate(2009, 1, 1).
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Use a list comprehension to get the nodes of interest: noi
noi = [n for n, d in ____ if d['____'] == '____']
# Use a list comprehension to get the edges of interest: eoi
eoi = [(u, v) for u, v, d in ____ if ____ < ____]