Vragen op een graaf
Nu je enkele basiseigenschappen van de graaf kent en hebt geoefend met de tekenfuncties van NetworkX om onderdelen te visualiseren, is het tijd om te verkennen hoe je de graaf kunt bevragen op knopen en randen. Je gaat specifiek op zoek naar "knopen van interesse" en "randen van interesse". Hiervoor maak je gebruik van de methoden .nodes() en .edges() die Eric in de video besprak. De methode .nodes() geeft een Node view-iterable terug, terwijl .edges() een Edge view-iterable teruggeeft, waarin elke tuple de knopen toont die op die rand aanwezig zijn. Denk eraan dat het meegeven van het keywordargument data=True bij deze methoden ook de bijbehorende metadata van de knopen en randen ophaalt.
Je schrijft list comprehensions om deze queries effectief in één regel op te bouwen. Voor een opfrissing over list comprehensions kun je terecht bij Deel 2 van DataCamps Python Data Science Toolbox-cursus. Dit is het recept voor een list comprehension:
[ output expressie for iteratorvariabele in iterable if predicate-expressie ].
Je moet de _iterable_ en de _predicate-expressie_ invullen. Voel je vrij om je antwoord eerst te prototypen door de graaf te verkennen in de IPython Shell voordat je je oplossing indient.
Deze oefening maakt deel uit van de cursus
Introductie tot netwerkanalyse in Python
Oefeninstructies
- Gebruik een list comprehension om een lijst met knopen uit de graaf
Tte krijgen die het label'occupation'met waarde'scientist'hebben.- De output expressie
nis al voor je opgegeven, evenals de iteratorvariabelennend. Jij vult de iterable en de voorwaardelijke expressie in. - Gebruik de methode
.nodes()vanTom de knopen te benaderen, en geefdata=Truemee om de metadata van de knopen op te halen. - De iteratorvariabele
dis een dictionary. De sleutel die hier van belang is, is'occupation'en de bijbehorende waarde is'scientist'.
- De output expressie
- Gebruik een list comprehension om een lijst met randen uit de graaf
Tte krijgen die al minstens 6 jaar bestonden, dus van vóór 1 jan 2010.- Ook hier vul je de iterable en de voorwaardelijke expressie in.
- Gebruik de methode
.edges()vanTom de randen te benaderen. Zorg ervoor dat je ook de metadata van de randen ophaalt. - De datums zijn opgeslagen als
datetime.date-objecten in de metadatadictionaryd, onder de sleutel'date'. Om bijvoorbeeld de datum 1 jan 2009 aan te maken, gebruik jedate(2009, 1, 1).
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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 ____ < ____]