Objectifs de ce TP :
Le réseau social étudié se compose :
Les relations d'amitié du réseau social peuvent se définir en Python avec une liste à deux dimensions. Exemple :
arete=[['Paul', 'Liza'], ['Paul', 'Marc'], ... ]
Ou, présenté différemment :
arete=[] arete.append(['Paul', 'Liza']) arete.append(['Paul', 'Marc']) ...
Testez et étudiez le code ci-dessous :
# Définition des relations d'amitié arete=[['Paul', 'Liza'], ['Sara', 'Marc'], ['Jade', 'Luc']] print(arete[1], arete[1][0], arete[1][1]) print("Boucle sur chaque élément de la liste :") for i in range(len(arete)): print(arete[i], arete[i][0], arete[i][1]) print("Variante produisant le même résultat :") for i in arete: print(i, i[0], i[1])
Testez et étudiez les trois fonctions du code ci-dessous :
# Définition des relations d'amitié arete=[['Paul', 'Liza'], ['Paul', 'Marc'], ['Paul', 'Sara'], ['Sara', 'Marc']] def nb_aretes(l): return len(l) def liste_sommets(l): n=[] for i in l: n.append(i[0]) n.append(i[1]) return list(set(n)) # enlève les doublons def nb_sommets(l): return len(liste_sommets(l)) print(nb_aretes(arete)) print(liste_sommets(arete)) print(nb_sommets(arete))
Testez et étudiez le code ci-dessous :
import matplotlib.pyplot as plt # Définition de la relation d'amitié arete=[['Paul', 'Liza']] # Positions des sommets x=[0,1] y=[0,1] # Dessin de l'arête et des cercles plt.plot(x, y, linewidth=2, color='#00aa00', marker='o', markersize=24, markerfacecolor='#ffbbbb', markeredgecolor='#bb8888') # Ecritures sur les cercles for i in range(2): plt.text(x[i], y[i], arete[0][i], size='15', color='#442200', horizontalalignment='center', verticalalignment='center') plt.axis('off') plt.show()
Tableau explicatif :
Méthode | Paramètre | Description |
---|---|---|
plt.plot() | linewidth=2 | Largeur du segment en pixels |
color='#00aa00' | Couleur du segment | |
markersize=24 | Diamètre du marqueur en pixels | |
markerfacecolor='#ffbbbb' | Couleur du marqueur | |
markeredgecolor='#bb8888' | Couleur de la bordure du marqueur | |
plt.text() | size='15' | Hauteur du texte en pixels |
color='#442200' | Couleur du texte | |
horizontalalignment='center' | Alignement horizontal par rapport au point d'insersion | |
verticalalignment='center' | Alignement vertical par rapport au point d'insersion |
Résultat :
Complétez la fonction nb_amis() qui retourne le nombre d'amis pour une personne du réseau social.
# Définition des relations d'amitié arete=[['Paul', 'Liza'], ['Paul', 'Marc'], ['Paul', 'Sara'], ['Sara', 'Marc']] def nb_amis(nom): ... return ... print(nb_amis('Paul')) print(nb_amis('Sara'))
Complétez le code ci-dessous :
import matplotlib.pyplot as plt # Définition des relations d'amitié arete=[['Paul', 'Liza'], ['Paul', 'Marc'], ['Paul', 'Sara'], ['Sara', 'Marc']] def liste_sommets(l): n=[] for i in l: n.append(i[0]) n.append(i[1]) return list(set(n)) # enlève les doublons sommet=liste_sommets(arete) # Positions des sommets (limités à 8) x=[0,0,1,1,2,2,3,3] y=[0,1,0,1,0,1,0,1] # Dessin des arêtes et des sommets for i in arete: u=[] v=[] for j in range(len(sommet)): ... plt.plot(u, v, linewidth=2, color='#00aa00', marker='o', markersize=24, markerfacecolor='#ffbbbb', markeredgecolor='#bb8888') # Ecritures for i in range( ... ): ... plt.axis('off') plt.show()
Résultat :
Tester le programme précédent avec le réseau social ci-dessous.
... # Définition des relations d'amitié arete=[] arete.append(['Marc', 'Sara']) arete.append(['Marc', 'Liza']) arete.append(['Marc', 'Jade']) arete.append(['Paul', 'Liza']) arete.append(['Sara', 'Liza']) arete.append(['Jade', 'Paul']) arete.append(['Luc', 'Paul']) ...
Utiliser les fonctions trigonométriques ci-dessous pour positionner les sommets en cercle.
... # Positionnement des sommets from math import * angle=2*pi/len(sommet) x=[] y=[] for i in range(len(sommet)): x.append(cos(i*angle)) y.append(sin(i*angle)) ...
Résultat :
Utiliser une bibliothèque permet de programmer plus vite, mais en restant limité par les caractéristiques de cette dernière.
from networkx import nx,diameter,radius,center import matplotlib.pyplot as plt # Définition des relations d'amitié reseau_social=nx.Graph() reseau_social.add_edge('Marc', 'Sara') reseau_social.add_edge('Marc', 'Liza') reseau_social.add_edge('Marc', 'Jade') reseau_social.add_edge('Paul', 'Liza') reseau_social.add_edge('Sara', 'Liza') reseau_social.add_edge('Jade', 'Paul') reseau_social.add_edge('Luc', 'Paul') nx.draw(reseau_social, with_labels=True) plt.draw() plt.show() print("nombre de sommets=",reseau_social.number_of_nodes()) print("nombre de arêtes=",reseau_social.number_of_edges()) print("Diamètre=",diameter(reseau_social)) print("Rayon=",radius(reseau_social)) print("Centre=",center(reseau_social))
Résultat :
nombre de sommets= 6 nombre de arêtes= 7 Diamètre= 3 Rayon= 2 Centre= ['Paul', 'Liza', 'Jade']