CommencezCommencez gratuitement

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

Voir le cours

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() sur user_matrix.
    • Ensuite, à l'aide de np.where(), sélectionnez les indices où diag est égal à diag.max(). Cela retourne un tuple : assurez‑vous d'accéder aux indices pertinents en indexant le tuple avec [0].
    • Parcourez indices et affichez chaque index i de people_nodes en utilisant la fonction print() fournie.
  • 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.data est égal à users_coo.data.max().
    • Parcourez indices2 et affichez pour chaque index idx les éléments correspondants de users_coo.row et users_coo.col de people_node.

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