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
Övningsinstruktioner
- Ta reda på namnen på de personer som var medlemmar i flest klubbar.
- Beräkna först
diaggenom att använda metoden.diagonal()påuser_matrix. - Välj sedan med hjälp av
np.where()de index därdiagär lika meddiag.max(). Detta returnerar en tupel: se till att du kommer åt de relevanta indexen genom att indexera in i tupeln med[0]. - Iterera över
indicesoch skriv ut varje indexiipeople_nodesmed hjälp av den angivna funktionenprint().
- Beräkna först
- 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ärusers_coo.dataär lika medusers_coo.data.max(). - Iterera över
indices2och skriv ut varje indexidxipeople_nodesusers_coo.rowochusers_coo.col.
- Använd
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[____.____[____]]))