NetworkX : cartographie tes données en graphes et calcule le PageRank de ton réseau

De quoi avez-vous besoin

Version de Python

3.x

Packages

  • {"nom":"networkx","version":"3.x"}
  • {"nom":"matplotlib","version":"3.x"}
  • {"nom":"scipy","version":"1.x"}

Difficulté

Débutant

Les données ne sont pas toujours des tableaux bien rangés. Parfois, la vraie information se cache dans les liens : qui connaît qui sur un réseau social, quel site pointe vers quel autre, quelle gare relie quelle ville, quel module importe quel autre. Pour modéliser ces relations, on utilise des graphes. Et en Python, la référence absolue s'appelle NetworkX.

NetworkX est la bibliothèque de graphes la plus utilisée de l'écosystème Python, adoptée aussi bien par des universités que par des labos et des entreprises. Elle embarque des centaines d'algorithmes prêts à l'emploi : plus court chemin, détection de communautés, mesures de centralité, et même le PageRank, l'algorithme qui a fait la fortune de Google. Dans ce tutoriel, tu vas construire un petit réseau social, mesurer l'influence de chacun de ses membres et visualiser le résultat en quelques lignes de code.

Les graphes sont partout derrière l'intelligence artificielle moderne. Les graphes de connaissances structurent ce que les modèles savent, les systèmes de recommandation cartographient les goûts de leurs utilisateurs, et la détection de fraude repère les comportements anormaux dans un réseau de transactions. Savoir les manipuler, c'est comprendre une bonne partie de la mécanique cachée sous le capot.

Prérequis et installation

Commence par installer trois paquets. NetworkX pour les graphes, Matplotlib pour l'affichage, et SciPy que NetworkX utilise en interne pour accélérer certains calculs comme le PageRank.

bash
pip install networkx matplotlib scipy

Étape 1 — Créer ton graphe

Un graphe, ce sont des nœuds (les personnes, les pages, les villes) reliés par des arêtes (les relations). NetworkX propose plusieurs types de graphes : Graph pour des relations symétriques, puisque l'amitié est réciproque, et DiGraph pour des relations orientées, comme un site qui pointe vers un autre sans que l'inverse soit vrai. Pour commencer, on modélise un groupe d'amis : chaque tuple représente une amitié entre deux personnes.

python
import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
amis = [
    ("Alice", "Bob"), ("Alice", "Claire"), ("Alice", "David"),
    ("Bob", "Claire"), ("Claire", "David"), ("David", "Emma"),
    ("Emma", "Fabien"), ("Fabien", "Claire"), ("Bob", "Emma"),
]
G.add_edges_from(amis)

print("Nœuds :", G.number_of_nodes())
print("Arêtes :", G.number_of_edges())

Résultat : 6 nœuds et 9 arêtes. Le graphe vit maintenant en mémoire. On peut l'interroger, le transformer, et lui faire cracher des réponses que tu ne devinerais pas à l'œil nu.

Étape 2 — Explorer la structure

Avant de lancer des algorithmes sophistiqués, regarde la forme du réseau. Le degré d'un nœud, c'est son nombre de connexions. Ses voisins, ce sont les nœuds directement reliés.

python
print("Degré d'Alice :", G.degree["Alice"])
print("Voisins d'Alice :", list(G.neighbors("Alice")))
print("Le graphe est-il connexe ?", nx.is_connected(G))

Alice a 3 amis directs, et le graphe est connexe : tout le monde est joignable depuis n'importe qui. Une info utile avant d'aller plus loin.

Étape 3 — Mesurer l'influence avec le PageRank

C'est la partie amusante. Le PageRank, inventé par Larry Page et Sergey Brin en 1998, évalue l'importance d'un nœud selon qui le cite. L'idée est simple : un lien venant d'un nœud important vaut plus qu'un lien venant d'un nœud isolé. C'est exactement ce principe qui classe les résultats de Google. Ici, il nous dit qui est la personne la plus centrale du groupe.

python
pagerank = nx.pagerank(G)
top = sorted(pagerank.items(), key=lambda x: x[1], reverse=True)[:3]
for nom, score in top:
    print(f"{nom} : {score:.3f}")

Claire ressort en tête. Ce n'est pas un hasard : elle sert de pont entre plusieurs sous-groupes. Sans elle, le réseau se couperait en deux. C'est précisément ce genre d'intuition que les graphes rendent mesurable.

Étape 4 — Trouver le plus court chemin

Autre classique : relier deux points en passant par le moins d'intermédiaires possible. NetworkX implémente l'algorithme de Dijkstra et ses variantes. Pratique pour un GPS, un plan de métro, ou pour mesurer la distance sociale entre deux personnes.

python
chemin = nx.shortest_path(G, "Alice", "Fabien")
print("Chemin Alice -> Fabien :", chemin)
print("Longueur :", nx.shortest_path_length(G, "Alice", "Fabien"))

Alice et Fabien ne se connaissent pas directement, mais deux sauts suffisent pour les relier. Sur un vrai réseau social de millions de personnes, ce calcul reste instantané.

Étape 5 — Visualiser le réseau

Un graphe se comprend mieux quand on le voit. NetworkX calcule des positions automatiques : spring_layout imite un système de ressorts qui rapproche les nœuds connectés et écarte les autres. Matplotlib se charge ensuite du dessin.

python
pos = nx.spring_layout(G, seed=42)
nx.draw(G, pos, with_labels=True, node_color="#4f8cff",
        edge_color="#b0b0b0", node_size=2000, font_size=9, font_color="white")
plt.show()

Étape 6 — Détecter des communautés

Dernier bonus avant de conclure : repérer des groupes cohérents à l'intérieur du réseau. C'est le principe de la détection de communautés, utile pour segmenter des clients, regrouper des articles similaires ou débusquer des clans dans un réseau social.

python
from networkx.algorithms import community

groupes = community.greedy_modularity_communities(G)
for i, groupe in enumerate(groupes, 1):
    print(f"Communauté {i} :", sorted(groupe))

L'algorithme découpe le graphe en groupes dont les membres sont plus connectés entre eux qu'avec le reste. Sur notre petit réseau, tu verras émerger deux communautés naturelles.

Pour aller plus loin

En six étapes, tu as construit un graphe, mesuré l'influence de ses membres, détecté des communautés et visualisé le résultat. Ce genre d'outil s'applique partout : détection de fraudes, en repérant des comptes qui forment une clique suspecte ; systèmes de recommandation, avec les amis de tes amis ; analyse de dépendances dans du code ; ou cartographie de communautés sur les réseaux sociaux.

NetworkX gère aussi des graphes de millions de nœuds, la lecture et l'écriture de formats standards comme GraphML ou GEXF, et des algorithmes plus poussés tels que la détection de communautés ou l'analyse de flux. Le point de départ reste toujours le même : des nœuds, des arêtes, et les algorithmes qui travaillent pour toi.