IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Scopri i nomi delle persone che sono state membri del maggior numero di club.
    • Per farlo, calcola prima diag usando il metodo .diagonal() su user_matrix.
    • Poi, usando np.where(), seleziona quegli indici in cui diag è uguale a diag.max(). Questo restituisce una tupla: assicurati di accedere agli indici rilevanti indicizzando la tupla con [0].
    • Itera su indices e stampa ciascun indice i di people_nodes usando la funzione print() fornita.
  • 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 cui users_coo.data è uguale a users_coo.data.max().
    • Itera su indices2 e stampa ciascun indice idx di users_coo.row e users_coo.col di people_node.

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[____.____[____]]))  
Modifica ed esegui il codice