Comprobar si hay bucles (self-loops) en el grafo
Como comentó Eric, NetworkX también permite aristas que empiezan y terminan en el mismo nodo; aunque esto no sería intuitivo en un grafo de redes sociales, es útil para modelar datos como redes de trayectos, en las que las personas empiezan en un lugar y terminan en otro.
Conviene comprobar esto antes de continuar con más análisis, y NetworkX proporciona un método para este propósito: nx.number_of_selfloops(G).
En este ejercicio y en los siguientes, te resultará útil la sentencia assert. Una aserción (assert) comprueba si la expresión que va a continuación se evalúa como True; de lo contrario, lanzará un AssertionError.
Para empezar, llama a la función nx.number_of_selfloops(), pasando T, en la consola de IPython para obtener el número de aristas que empiezan y terminan en el mismo nodo. Se han añadido sintéticamente varios bucles al grafo. Tu tarea en este ejercicio es escribir una función que devuelva estas aristas.
Este ejercicio forma parte del curso
Introducción al análisis de redes en Python
Instrucciones del ejercicio
- Define una función llamada
find_selfloop_nodes()que reciba un argumento:G.- Usando un bucle
for, itera sobre todas las aristas deG(excluyendo los metadatos). - Si el nodo
ues igual al nodov:- Añade
ua la listanodes_in_selfloops. - Devuelve la lista
nodes_in_selfloops.
- Añade
- Usando un bucle
- Comprueba que el número de bucles del grafo es igual al número de nodos en bucles. Esto ya está hecho por ti, así que pulsa "Submit Answer" para ver el resultado.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# 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))