Verificare la presenza di autoanelli nel grafo
Come ha spiegato Eric, NetworkX consente anche archi che iniziano e terminano sullo stesso nodo; sebbene ciò sia poco intuitivo per un grafo di un social network, è utile per modellare dati come le reti di spostamenti, in cui le persone partono da una località e arrivano in un’altra.
È utile verificarlo prima di procedere con ulteriori analisi, e NetworkX fornisce un metodo a questo scopo: nx.number_of_selfloops(G).
In questo esercizio, così come nei successivi, ti sarà utile l’istruzione assert. Un’asserzione (assert) controlla se l’espressione che la segue è True; in caso contrario, genera un AssertionError.
Per iniziare, richiama la funzione nx.number_of_selfloops() passando T nell’IPython Shell per ottenere il numero di archi che iniziano e finiscono sullo stesso nodo. Un certo numero di autoanelli è stato aggiunto sinteticamente al grafo. Il tuo compito in questo esercizio è scrivere una funzione che restituisca questi archi.
Questo esercizio fa parte del corso
Introduzione all'analisi delle reti in Python
Istruzioni dell'esercizio
- Definisci una funzione chiamata
find_selfloop_nodes()che accetta un argomento:G.- Usando un ciclo
for, itera su tutti gli archi inG(escludendo i metadati). - Se il nodo
uè uguale al nodov:- Aggiungi
ualla listanodes_in_selfloopsconappend(). - Restituisci la lista
nodes_in_selfloops.
- Aggiungi
- Usando un ciclo
- Verifica che il numero di autoanelli nel grafo sia uguale al numero di nodi che hanno autoanelli. Questo è già stato fatto per te, quindi fai clic su "Invia risposta" per vedere il risultato!
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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))