Revenir
Revenir

Modéliser un réseau social de type Facebook

Prérequis : maîtriser les bases de la programmation Python (variables, boucles, entrées/sorties)

Sommaire

Avant de commencerPrésentationNotre réseau social de type Facebook - Graphe non orientéPréparationTraitement des données avec PythonVers le notebook Capytale - Site

Avant de commencer

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

Vers le notebook Capytale - Site