Trova appartenenze condivise: Trasposizione
Come avrai notato, passando a una rappresentazione a matrice sparsa si perdono i metadati del grafo. Ora imparerai a reinserire i metadati per poter analizzare meglio le appartenenze condivise.
La user_matrix che hai calcolato nell’esercizio precedente è già stata caricata nel tuo workspace.
Qui la funzione np.where() ti sarà utile. Ecco cosa fa: dato un array, per esempio a = [1, 5, 9, 5], se vuoi ottenere gli indici in cui il valore è uguale a 5, puoi usare idxs = np.where(a == 5). Questo restituisce un array in una tupla, (array([1, 3]),). Per accedere a quegli indici, devi indicizzare nella tupla con idxs[0].
Questo esercizio fa parte del corso
Analisi di reti intermedia in Python
Istruzioni dell'esercizio
- Scopri i nomi delle persone che sono state membri del maggior numero di club.
- Per farlo, calcola prima
diagusando il metodo.diagonal()suuser_matrix. - Poi, usando
np.where(), seleziona quegli indici in cuidiagè uguale adiag.max(). Questo restituisce una tupla: assicurati di accedere agli indici rilevanti indicizzando la tupla con[0]. - Itera su
indicese stampa ciascun indiceidipeople_nodesusando la funzioneprint()fornita.
- Per farlo, calcola prima
- Imposta la diagonale a zero e converti la matrice nel "coordinate matrix format". Questo codice è già fornito nella risposta.
- Trova le coppie di utenti che hanno condiviso l’appartenenza al maggior numero di club.
- Usando
np.where(), accedi agli indici in cuiusers_coo.dataè uguale ausers_coo.data.max(). - Itera su
indices2e stampa ciascun indiceidxdiusers_coo.roweusers_coo.coldipeople_node.
- Usando
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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[____.____[____]]))