Aan de slagBegin gratis

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

Bekijk cursus

Oefeninstructies

  • Zoek de namen van mensen die lid waren van de meeste clubs.
    • Bereken hiervoor eerst diag met de methode .diagonal() op user_matrix.
    • Gebruik daarna np.where() om die indexen te selecteren waar diag gelijk is aan diag.max(). Dit levert een tuple op: zorg dat je de relevante indexen pakt door met [0] in de tuple te indexeren.
    • Loop over indices en print elke index i van people_nodes met de meegegeven print()-functie.
  • 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 waar users_coo.data gelijk is aan users_coo.data.max().
    • Loop over indices2 en print voor elke index idx de elementen van people_node op users_coo.row en users_coo.col.

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[____.____[____]]))  
Code bewerken en uitvoeren