CommencerCommencer gratuitement

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

Afficher le cours

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 de G (en excluant les métadonnées).
    • Si le nœud u est égal au nœud v :
      • Ajoutez u à la liste nodes_in_selfloops avec append().
      • Retournez la liste nodes_in_selfloops.
  • 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))
Modifier et exécuter le code