Trouver des adhésions partagées : transposition
Comme vous avez pu le constater, on perd les métadonnées d’un graphe lorsqu’on passe à une représentation en matrice creuse. Vous allez maintenant apprendre à reconstituer ces métadonnées afin d’en savoir plus sur les adhésions partagées.
La matrice user_matrix que vous avez calculée dans l’exercice précédent a été préchargée dans votre espace de travail.
Ici, la fonction np.where() sera utile. Voici ce qu’elle fait : étant donné un tableau, par exemple a = [1, 5, 9, 5], si vous souhaitez obtenir les indices où la valeur est égale à 5, vous pouvez utiliser idxs = np.where(a == 5). Cela renvoie un tableau dans un tuple, (array([1, 3]),). Pour accéder à ces indices, vous devez indexer dans le tuple avec idxs[0].
Cet exercice fait partie du cours
Analyse de réseaux intermédiaire en Python
Instructions
- Trouvez les noms des personnes qui étaient membres du plus grand nombre de clubs.
- Pour cela, calculez d’abord
diagà l’aide de la méthode.diagonal()suruser_matrix. - Ensuite, avec
np.where(), sélectionnez les indices oùdiagest égal àdiag.max(). Cela renvoie un tuple : veillez à accéder aux indices pertinents en indexant le tuple avec[0]. - Itérez sur
indiceset affichez chaque indiceidepeople_nodesen utilisant la fonctionprint()fournie.
- Pour cela, calculez d’abord
- Mettez la diagonale à zéro et convertissez-la au « format matrice de coordonnées ». Ce code vous est fourni dans la réponse.
- Trouvez les paires d’utilisateurs qui ont partagé le plus grand nombre de clubs.
- En utilisant
np.where(), accédez aux indices oùusers_coo.dataest égal àusers_coo.data.max(). - Itérez sur
indices2et affichez, pour chaque indiceidx, les éléments correspondants deusers_coo.rowetusers_coo.coldanspeople_node.
- En utilisant
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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[____.____[____]]))