Controleren of er self-loops in de graaf zitten
Zoals Eric besprak, laat NetworkX ook randen toe die op dezelfde knoop beginnen en eindigen; dat is misschien niet intuïtief voor een sociale netwerkgraaf, maar het is wel handig om data te modelleren zoals reisnetwerken, waarin iemand op één locatie start en op een andere eindigt.
Het is handig om dit te controleren voordat je verdergaat met analyses, en NetworkX biedt hiervoor een methode: nx.number_of_selfloops(G).
In deze oefening en ook later zul je de assert-instructie nuttig vinden. Een assert controleert of de uitdrukking erna True oplevert; zo niet, dan wordt een AssertionError opgegooid.
Begin met het aanroepen van de functie nx.number_of_selfloops(), met T als argument, in de IPython Shell om het aantal randen te krijgen die op dezelfde knoop beginnen en eindigen. Er zijn synthetisch een aantal self-loops aan de graaf toegevoegd. Jouw taak in deze oefening is om een functie te schrijven die deze randen teruggeeft.
Deze oefening maakt deel uit van de cursus
Introductie tot netwerkanalyse in Python
Oefeninstructies
- Definieer een functie
find_selfloop_nodes()met één argument:G.- Gebruik een
for-lus om over alle randen inGte itereren (zonder de metadata). - Als knoop
ugelijk is aan knoopv:- Voeg
utoe aan de lijstnodes_in_selfloops. - Retourneer de lijst
nodes_in_selfloops.
- Voeg
- Gebruik een
- Controleer dat het aantal self-loops in de graaf gelijk is aan het aantal knopen in self-loops. Dit is al voor je gedaan, dus klik op 'Antwoord verzenden' om het resultaat te zien!
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# Define find_selfloop_nodes()
def ____:
"""
Finds all nodes that have self-loops in the graph G.
"""
nodes_in_selfloops = []
# Iterate over all the edges of G
for u, v in ____:
# Check if node u and node v are the same
if ____:
# Append node u to nodes_in_selfloops
____
return nodes_in_selfloops
# Check whether number of self loops equals the number of nodes in self loops
assert nx.number_of_selfloops(T) == len(find_selfloop_nodes(T))