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 Facebook et donne des informations sur ce réseau. Pour simplifier, nous ne considérons qu'un nombre réduit d'abonnés à ce réseau.
Alban, Béatrice, Cristelle, Déborah, Éric, Fabrice, Gladys, Hervé et Isabelle sont inscrits sur Facebook :
- Alban est ami avec Béatrice et Fabrice.
- Béatrice est amie avec Alban, Cristelle, Déborah, Éric, Fabrice et Gladys.
- Cristelle est amie avec Béatrice et Déborah.
- Déborah est amie avec Béatrice et Cristelle.
- Éric avec Béatrice, Gladys et Hervé.
- Fabrice avec Alban, Béatrice et Isabelle.
- Gladys avec Béatrice , Éric et Hervé.
- Hervé avec Éric, Gladys et Isabelle.
- Isabelle est amie avec Fabrice et Hervé
Le graphe non orienté représente les relations entre les personnes.
Notre réseau social de type Facebook - Graphe non 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é « rsFacebook » par exemple et on prépare des options pour le tracé :
rsFacebook = nx.Graph()
options = {'node_color': 'pink', 'node_size': 2000, 'width': 3}
On ajoute les sommets (nœuds) :
rsFacebook.add_node("Alban") …
et les arêtes :
rsFacebook.add_edge("Alban", "Béatrice") …
On affiche le graphe avec :
nx.draw(rsFacebook, with_labels=True, **options)
plt.draw()
On peut aussi afficher les sommets avecrsFacebook.edges()et leur nombre avecrsFacebook.number_of_edges().
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(rsFacebook), nx.diameter(rsFacebook)et nx.radius(rsFacebook)
Traitement des données avec Python
Pour modéliser un réseau social de type facebook, nous allons :
1. Copiez et complétez le programme suivant avec votre éditeur Python
import networkx as nx
import matplotlib.pyplot as plt
rsFacebook = nx.Graph()
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
'with_labels': True
}
title_font = {'size':'20', 'color':'black'}
plt.figure(figsize=(10,8)) #largeur et hauteur de la figure
plt.title("Graphe Réseau social type Facebook", **title_font)
rsFacebook.add_node("Alban")
# A compléter
rsFacebook.add_edge("Alban", "Béatrice")
# A compléter
nx.draw(rsFacebook, **options)
plt.show()
2. Ajoutez 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 de Fabrice