Prérequis : maîtriser les bases de la programmation Python (variables, boucles, entrées/sorties)
Contexte de la mise en œuvre de l'activité : en classe, en présence de l'enseignant
Ressources, matériel, documents nécessaires : bibliothèques Python (networkx, matplotlib.pyplot)
Présentation
Nous allons réaliser un programme qui construit le graphe d'un réseau social de type X (anciennement Twitter) puis calcule et fournit des informations sur ce réseau (rayon, diamètre, etc.).
Dans ce type de réseau, Éric peut être un « follower » de Déborah sans que la réciproque soit nécessairement vraie. Dans ce cas, la relation est dite orientée. Elle est alors représentée par une flèche qui est généralement appelée "arc".
- Alban suit Béatrice, Cristelle et Déborah
- Béatrice suit Alban
- Cristelle suit Béatrice
- Déborah suit Alban, Fabrice et Hervé
- Éric suit Alban et Déborah
- Fabrice suit Éric
- Gladys suit Déborah
- Isabelle suit Hervé
- Hervé suit Isabelle et Gladys
Le graphe orienté représente les relations entre les personnes.
Notre réseau social de type Twitter - Graphe orienté
Préparation
Pour tracer des graphes, on utilise la bibliothèque dédiée « networkx » ainsi que la bibliothèque « matplotlib.pyplot ».
Import networkx as nx
import matplotlib.pyplot as plt
On fabrique un objet graphe nommé « rsTwitter » par exemple et on prépare des options pour le tracé :
rsTwitter= nx.DiGraph()
options = {'node_color': 'pink', 'node_size': 2000, 'width': 3}
On ajoute les sommets (nœuds) :
rsTwitter.add_node("Alban") …
et les arêtes :
rsTwitter.add_edge("Alban", "Béatrice") …
On affiche le graphe avec :
nx.draw(rsTwitter, with_labels=True, **options)
plt.draw()
On peut aussi afficher les sommets avecrsTwitter.edges()et leur nombre avecrsTwitter.number_of_edges().
On affiche les arêtes et leur nombre en utilisantnodes()etnumber_of_nodes().
On peut également afficher le(s) centre(s), le diamètre et le rayon du graphe avec les fonctionsnx.center(rsTwitter), nx.diameter(rsTwitter)et nx.radius(rsTwitter)
Traitement des données avec Python
Pour modéliser le réseau social de type twitter, vous allez :
1. Copier et compléter le programme suivant avec votre éditeur Python
import networkx as nx
import matplotlib.pyplot as plt
rsTwitter = nx.DiGraph()
options = {
'node_color': ['skyblue', 'red', 'green', 'orange', 'magenta', 'pink', 'cyan', 'yellow', 'brown'],
"edgecolors": "black", #couleur ligne autour des sommets
'node_size': 3000, #diamètre des sommets
"linewidths": 2, #largeur ligne autour des sommets
"font_size" : 10, "font_weight" : "bold", "font_color": "black",
"edge_color" : "red", #couleur segments
'width': 3 #largeur segments
}
title_font = {'size':'20', 'color':'black'}
plt.figure(figsize=(10,8)) #largeur et hauteur de la figure
plt.title("Graphe Réseau social type Twitter", **title_font)
rsTwitter.add_node("Alban")
# A compléter
rsTwitter.add_edge("Alban", "Béatrice")
# A compléter
nx.draw(rsTwitter, with_labels=True, **options)
plt.show()
plt.savefig("graphe.pdf")
2. Ajouter les lignes de code qui permettent d'afficher dans la console :
- Le nombre de sommets et leurs noms
- Le nombre d'arêtes et pour chacune, les sommets qui sont liés
- Le(s) centre(s) du graphe
- Le diamètre du graphe
- Le rayon du graphe :
- Les voisins d'Eric