23 KiB
23 KiB
In [ ]:
import networkx as nx
import numpy as np
import matplotlib.pyplot as pltIn [ ]:
G = nx.Graph()
G.add_edges_from([
("Alice","Bob"),
("Bob","Claire"),
("Alice","David"),
("Bob","Emma")
])
# Obtenir la matrice d'adjacence
A = nx.to_numpy_array(G, nodelist=G.nodes())
print(list(G.nodes()))
print(A.astype(int))In [ ]:
plt.figure()
nx.draw(G, with_labels=True, node_color="lightblue", node_size=1000)
plt.show()In [ ]:
# Degré de chaque sommet
print("Degré de chaque individu :", dict(G.degree()))
# Densité du réseau (rapport entre liens existants et liens possibles)
print("Densité du réseau :", round(nx.density(G), 2))In [ ]:
A2 = np.linalg.matrix_power(A, 2)
print("A² =\n", A2.astype(int))In [ ]:
# NetworkX construit directement la liste d'adjacence à partir du graphe G
liste_adjacence = nx.to_dict_of_lists(G)
for personne, amis in liste_adjacence.items():
print(f"{personne} → {amis}")In [ ]:
# Construction manuelle de la matrice d'incidence avec numpy
# (une colonne par arête, deux 1 par colonne : les deux extrémités)
liste_aretes = list(G.edges())
sommets = list(G.nodes())
B = np.zeros((len(sommets), len(liste_aretes)), dtype=int)
for colonne, (u, v) in enumerate(liste_aretes):
B[sommets.index(u), colonne] = 1
B[sommets.index(v), colonne] = 1
print("Arêtes (colonnes) :", liste_aretes)
print(sommets)
print(B)In [ ]:
# La liste d'incidence : pour chaque arête, ses deux extrémités
for i, (u, v) in enumerate(G.edges()):
print(f"Arête {i} : {u} — {v}")In [ ]:
personnes = ["Alice", "Bob", "Claire", "David", "Emma"]
evenements = ["Réunion A", "Atelier B", "Sortie C", "Conseil D"]
participations = {
"Alice": ["Réunion A", "Atelier B"],
"Bob": ["Réunion A", "Conseil D"],
"Claire": ["Atelier B", "Sortie C", "Conseil D"],
"David": ["Atelier B", "Sortie C", "Conseil D"],
"Emma": ["Sortie C"],
}
B = np.zeros((len(personnes), len(evenements)), dtype=int)
for i, personne in enumerate(personnes):
for evenement in participations[personne]:
B[i, evenements.index(evenement)] = 1
print("Colonnes :", evenements)
print(personnes)
print(B)
print()
print("Nombre de 1 par colonne :", B.sum(axis=0))In [ ]:
C = B @ B.T # individus × individus
D = B.T @ B # événements × événements
print("C = B @ B.T (individus × individus)")
print(personnes)
print(C)
print()
print("Nombre d'événements par personne (diagonale de C) :")
for i, personne in enumerate(personnes):
print(f" {personne} : {C[i, i]}")
print()
print("Co-participations (hors diagonale) :")
for i in range(len(personnes)):
for j in range(i + 1, len(personnes)):
if C[i, j] > 0:
print(f" {personnes[i]} et {personnes[j]} : {C[i, j]} événement(s) en commun")In [ ]:
print("D = B.T @ B (événements × événements)")
print(evenements)
print(D)
print()
print("Nombre de participants par événement (diagonale de D) :")
for e, evenement in enumerate(evenements):
print(f" {evenement} : {D[e, e]}")