Kom igångKom igång gratis

Hitta gemensamt medlemskap: Transponering

Som du kanske har noterat förlorar du metadata från en graf när du övergår till en gles matrisrepresentation. Nu ska du lära dig hur du lägger tillbaka metadata så att du kan få ut mer information om gemensamt medlemskap.

user_matrix som du beräknade i föregående övning har förhandsladdats till din arbetsyta.

Här kommer funktionen np.where() att vara användbar. Så här fungerar den: givet en array, till exempel a = [1, 5, 9, 5], kan du använda idxs = np.where(a == 5) för att hämta de index där värdet är lika med 5. Det ger dig tillbaka en array i en tupel: (array([1, 3]),). För att komma åt dessa index indexerar du in i tupeln med idxs[0].

Den här övningen är en del av kursen

Nätverksanalys i Python – fortsättningskurs

Visa kurs

Övningsinstruktioner

  • Ta reda på namnen på de personer som var medlemmar i flest klubbar.
    • Beräkna först diag genom att använda metoden .diagonal()user_matrix.
    • Välj sedan med hjälp av np.where() de index där diag är lika med diag.max(). Detta returnerar en tupel: se till att du kommer åt de relevanta indexen genom att indexera in i tupeln med [0].
    • Iterera över indices och skriv ut varje index i i people_nodes med hjälp av den angivna funktionen print().
  • Sätt diagonalen till noll och konvertera den till ett "koordinatmatrisformat". Den här koden finns redan i svaret.
  • Hitta par av användare som delade medlemskap i flest klubbar.
    • Använd np.where() för att komma åt de index där users_coo.data är lika med users_coo.data.max().
    • Iterera över indices2 och skriv ut varje index idx i people_nodes users_coo.row och users_coo.col.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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[____.____[____]]))  
Redigera och kör kod