Trouver les adhésions partagées : transposition
Comme vous l'avez peut‑être remarqué, on perd les métadonnées d'un graphe lorsqu'on passe à une représentation en matrice creuse. Vous allez maintenant apprendre à réattribuer ces métadonnées pour mieux analyser les adhésions partagées.
La matrice user_matrix que vous avez calculée dans l'exercice précédent est déjà chargée dans votre espace de travail.
Ici, la fonction np.where() sera utile. Son fonctionnement : étant donné un tableau, par exemple a = [1, 5, 9, 5], si vous voulez obtenir les indices où la valeur est égale à 5, vous pouvez utiliser idxs = np.where(a == 5). Cela vous retourne un tableau dans un tuple, (array([1, 3]),). Pour accéder à ces indices, vous devez indexer dans le tuple avec idxs[0].
Cette activité fait partie du cours
Analyse de réseaux intermédiaire en Python
Instructions de l’exercice
- Trouvez le nom des personnes qui étaient membres du plus grand nombre de clubs.
- Pour ce faire, calculez d'abord
diagà l'aide de la méthode.diagonal()suruser_matrix. - Ensuite, à l'aide de
np.where(), sélectionnez les indices oùdiagest égal àdiag.max(). Cela retourne un tuple : assurez‑vous d'accéder aux indices pertinents en indexant le tuple avec[0]. - Parcourez
indiceset affichez chaque indexidepeople_nodesen utilisant la fonctionprint()fournie.
- Pour ce faire, calculez d'abord
- Mettez la diagonale à zéro et convertissez la matrice au « format de coordonnées ». Ce code vous est fourni dans la réponse.
- Trouvez les paires d'utilisateurs qui ont partagé l'adhésion au plus grand nombre de clubs.
- À l'aide de
np.where(), accédez aux indices oùusers_coo.dataest égal àusers_coo.data.max(). - Parcourez
indices2et affichez pour chaque indexidxles éléments correspondants deusers_coo.rowetusers_coo.coldepeople_node.
- À l'aide de
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
import numpy as np
# Find out the names of people who were members of the most number of clubs
diag = ____
indices = np.where(____ == ____)[0]
print('Number of clubs: {0}'.format(diag.max()))
print('People with the most number of memberships:')
for i in indices:
print('- {0}'.format(____))
# Set the diagonal to zero and convert it to a coordinate matrix format
user_matrix.setdiag(0)
users_coo = user_matrix.tocoo()
# Find pairs of users who shared membership in the most number of clubs
indices2 = np.where(____ == ____)[0]
print('People with most number of shared memberships:')
for idx in indices2:
print('- {0}, {1}'.format(people_nodes[____.____[____]], people_nodes[____.____[____]]))