ÎncepețiÎncepe gratuit

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

Vezi cursul

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 diag aplicând metoda .diagonal() pe user_matrix.
    • Apoi, folosind np.where(), selectează indicii unde diag este egal cu diag.max(). Aceasta returnează un tuplu: asigură-te că accesezi indicii relevanți indexând tuplul cu [0].
    • Iterează peste indices și afișează fiecare index i din people_nodes folosind funcția print() furnizată.
  • 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 unde users_coo.data este egal cu users_coo.data.max().
    • Iterează peste indices2 și afișează fiecare index idx din users_coo.row și users_coo.col ale lui people_nodes.

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[____.____[____]]))  
Editează și rulează codul