Apartenența comună: transpunerea matricei
Probabil ai observat deja că, atunci când treci la o reprezentare prin matrice rară, pierzi metadatele grafului. Acum vei învăța cum să recuperezi aceste metadate, astfel încât să poți afla mai multe informații despre apartenența comună.
user_matrix calculată în exercițiul anterior a fost preîncărcată în spațiul tău de lucru.
Aici îți va fi utilă funcția np.where(). Iată ce face: primind un array, de exemplu a = [1, 5, 9, 5], dacă vrei să obții indicii unde valoarea este egală cu 5, poți folosi idxs = np.where(a == 5). Aceasta returnează un array într-un tuplu: (array([1, 3]),). Pentru a accesa acești indici, indexează tuplul folosind idxs[0].
Acest exercițiu face parte din cursul
Analiză intermediară a rețelelor în Python
Instrucțiuni pentru exercițiu
- Află numele persoanelor care au fost membre în cel mai mare număr de cluburi.
- Pentru aceasta, calculează mai întâi
diagaplicând metoda.diagonal()peuser_matrix. - Apoi, folosind
np.where(), selectează indicii undediageste egal cudiag.max(). Aceasta returnează un tuplu: asigură-te că accesezi indicii relevanți indexând tuplul cu[0]. - Iterează peste
indicesși afișează fiecare indexidinpeople_nodesfolosind funcțiaprint()furnizată.
- Pentru aceasta, calculează mai întâi
- Setează diagonala la zero și convertește matricea în „formatul coordonat de matrice rară". Acest cod îți este deja furnizat în răspuns.
- Găsește perechile de utilizatori care au împărțit apartenența în cel mai mare număr de cluburi.
- Folosind
np.where(), accesează indicii undeusers_coo.dataeste egal cuusers_coo.data.max(). - Iterează peste
indices2și afișează fiecare indexidxdinusers_coo.rowșiusers_coo.colale luipeople_nodes.
- Folosind
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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[____.____[____]]))