Vérifier la présence de boucles (self-loops) dans le graphe
Comme Eric l’a expliqué, NetworkX autorise également des arêtes qui commencent et se terminent sur le même nœud ; bien que cela soit peu intuitif pour un graphe de réseau social, c’est utile pour modéliser des données comme des réseaux de trajets, dans lesquels des personnes partent d’un lieu et arrivent à un autre.
Il est utile de vérifier cela avant de poursuivre les analyses, et NetworkX fournit une méthode à cet effet : nx.number_of_selfloops(G).
Dans cet exercice, comme dans les suivants, l’instruction assert vous sera utile. Une assertion (assert) vérifie que l’expression qui la suit s’évalue à True ; sinon, elle lève une AssertionError.
Pour commencer, appelez la fonction nx.number_of_selfloops(), en lui passant T, dans l’IPython Shell pour obtenir le nombre d’arêtes qui commencent et se terminent sur le même nœud. Plusieurs boucles ont été ajoutées artificiellement au graphe. Votre tâche dans cet exercice est d’écrire une fonction qui renvoie ces arêtes.
Cet exercice fait partie du cours
Introduction à l’analyse de réseaux en Python
Instructions
- Définissez une fonction appelée
find_selfloop_nodes()qui prend un argument :G.- À l’aide d’une boucle
for, itérez sur toutes les arêtes deG(en excluant les métadonnées). - Si le nœud
uest égal au nœudv:- Ajoutez
uà la listenodes_in_selfloopsavecappend(). - Retournez la liste
nodes_in_selfloops.
- Ajoutez
- À l’aide d’une boucle
- Vérifiez que le nombre de boucles dans le graphe est égal au nombre de nœuds impliqués dans des boucles. Cela a été fait pour vous, donc cliquez sur "Soumettre la réponse" pour voir le résultat !
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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))