Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Definieer een functie find_selfloop_nodes() met één argument: G.
    • Gebruik een for-lus om over alle randen in G te itereren (zonder de metadata).
    • Als knoop u gelijk is aan knoop v:
      • Voeg u toe aan de lijst nodes_in_selfloops.
      • Retourneer de lijst nodes_in_selfloops.
  • 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))
Code bewerken en uitvoeren