Files
graphes-l3/Seance_1_TP.ipynb
T

4.8 KiB

Séance 1 TP — Rappels & prise en main de NetworkX

Objectifs pédagogiques

  • Réviser les définitions : nœuds, arêtes, graphes dirigés / non-dirigés / pondérés.
  • Prendre en main networkx pour créer un graphe et le visualiser.
  • Explorer des propriétés simples (degré, nombre de sommets et d'arêtes).
  • Introduire graphes dirigés et pondérés.

Contexte sociologique

Les graphes servent à modéliser les relations sociales :

  • Graphe non dirigé : relations symétriques (amitié, collaboration).
  • Graphe dirigé : relations asymétriques (qui suit qui sur Twitter).
  • Graphe pondéré : intensité des relations (fréquence de contact).
In [ ]:
# %pip install networkx matplotlib

import networkx as nx
import matplotlib.pyplot as plt

Exercice 1 : Créer un graphe non dirigé

In [ ]:
# Construisons un mini-réseau social
G = nx.Graph()
G.add_edges_from([
    ("Alice", "Bob"),
    ("Bob", "Claire"),
    ("Alice", "David"),
    ("Claire", "David"),
])

print("Nœuds :", list(G.nodes()))
print("Arêtes:", list(G.edges()))

plt.figure()
nx.draw(G, with_labels=True, node_color="lightblue", node_size=1000)
plt.show()

Questions :

  1. Qui a le plus de voisins / voisines (ami-e-s) ?
  2. Quelles sont les relations réciproques ?

Exercice 2 : Explorer les propriétés du graphe

In [ ]:
print("Nombre de sommets :", G.number_of_nodes())
print("Nombre d'arêtes :", G.number_of_edges())
print("Degrés de chaque sommet :", dict(G.degree()))
print("Degré moyen :", sum(dict(G.degree()).values())/G.number_of_nodes())

Question : Quel est le degré moyen et comment l’interpréter sociologiquement ?

Exercice 3 : Graphe dirigé

In [ ]:
DG = nx.DiGraph()
DG.add_edges_from([
    ("Alice", "Bob"),
    ("Bob", "Claire"),
    ("Claire", "Alice")
])

plt.figure()
nx.draw(DG, with_labels=True, node_color="lightgreen", node_size=1000, arrows=True)
plt.show()

print("Degré sortant :", dict(DG.out_degree()))
print("Degré entrant :", dict(DG.in_degree()))

Questions :

  1. Quelle différence avec le graphe non dirigé ?
  2. Que représentent les degrés entrants et sortants sociologiquement (ex : followers) ?

Exercice 4 : Graphe pondéré

In [ ]:
WG = nx.Graph()
WG.add_edge("Alice", "Bob", weight=5)   # forte relation
WG.add_edge("Alice", "Claire", weight=1) # relation faible

print("Arêtes avec poids :", WG.edges(data=True))

# Dessin avec poids visibles
pos = nx.spring_layout(WG)
nx.draw(WG, pos, with_labels=True, node_color="lightcoral", node_size=1000)
labels = nx.get_edge_attributes(WG, "weight")
nx.draw_networkx_edge_labels(WG, pos, edge_labels=labels)
plt.show()

Questions :

  1. Comment interpréter le poids d’une relation en sociologie ?
  2. Donnez un exemple concret (fréquence de discussions, intensité d’une amitié).