CommencerCommencer gratuitement

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

Afficher le cours

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() sur user_matrix.
    • Ensuite, avec np.where(), sélectionnez les indices diag est égal à diag.max(). Cela renvoie un tuple : veillez à accéder aux indices pertinents en indexant le tuple avec [0].
    • Itérez sur indices et affichez chaque indice i de people_nodes en utilisant la fonction print() fournie.
  • 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.data est égal à users_coo.data.max().
    • Itérez sur indices2 et affichez, pour chaque indice idx, les éléments correspondants de users_coo.row et users_coo.col dans people_node.

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[____.____[____]]))  
Modifier et exécuter le code