Gedeeld lidmaatschap vinden: Transpositie
Zoals je misschien hebt gemerkt, verlies je de metadata van een graaf wanneer je overstapt naar een sparse matrix-representatie. Je gaat nu leren hoe je de metadata weer kunt imputeren, zodat je meer te weten komt over gedeeld lidmaatschap.
De user_matrix die je in de vorige oefening hebt berekend, is alvast in je werkruimte geladen.
Hierbij komt de functie np.where() van pas. Dit is wat die doet: gegeven een array, bijvoorbeeld a = [1, 5, 9, 5], als je de indexen wilt krijgen waar de waarde gelijk is aan 5, kun je idxs = np.where(a == 5) gebruiken. Dit geeft een array in een tuple terug, (array([1, 3]),). Om die indexen te benaderen, indexeer je in de tuple met idxs[0].
Deze oefening maakt deel uit van de cursus
Gemiddelde netwerkanalyse in Python
Oefeninstructies
- Zoek de namen van mensen die lid waren van de meeste clubs.
- Bereken hiervoor eerst
diagmet de methode.diagonal()opuser_matrix. - Gebruik daarna
np.where()om die indexen te selecteren waardiaggelijk is aandiag.max(). Dit levert een tuple op: zorg dat je de relevante indexen pakt door met[0]in de tuple te indexeren. - Loop over
indicesen print elke indexivanpeople_nodesmet de meegegevenprint()-functie.
- Bereken hiervoor eerst
- Zet de diagonaal op nul en converteer deze naar een "coordinate matrix format". Deze code is voor je voorzien in het antwoord.
- Zoek paren gebruikers die samen lid waren van de meeste clubs.
- Gebruik
np.where()om de indexen te pakken waarusers_coo.datagelijk is aanusers_coo.data.max(). - Loop over
indices2en print voor elke indexidxde elementen vanpeople_nodeopusers_coo.rowenusers_coo.col.
- Gebruik
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
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[____.____[____]]))