Wspólne członkostwo: transpozycja
Jak zapewne zauważono, podczas przejścia do reprezentacji rzadkiej macierzy metadane grafu zostają utracone. Teraz nauczysz się, jak je odtworzyć, by dowiedzieć się więcej o wspólnym członkostwie.
user_matrix obliczona w poprzednim ćwiczeniu została wstępnie załadowana do twojego środowiska.
Przydatna okaże się tutaj funkcja np.where(). Działa ona następująco: dla tablicy, powiedzmy a = [1, 5, 9, 5], jeśli chcesz uzyskać indeksy, gdzie wartość wynosi 5, możesz użyć idxs = np.where(a == 5). Zwraca ona tablicę w krotce: (array([1, 3]),). Aby uzyskać dostęp do tych indeksów, należy odwołać się do krotki za pomocą idxs[0].
To ćwiczenie jest częścią kursu
Analiza sieci w Pythonie – poziom średniozaawansowany
Instrukcje do ćwiczenia
- Znajdź nazwiska osób, które należały do największej liczby klubów.
- W tym celu oblicz
diag, używając metody.diagonal()nauser_matrix. - Następnie, korzystając z
np.where(), wybierz indeksy tam, gdziediagjest równediag.max(). Wynikiem jest krotka – upewnij się, że odwołujesz się do odpowiednich indeksów, indeksując krotkę za pomocą[0]. - Iteruj po
indicesi wypisz każdy indeksizpeople_nodes, korzystając z dostarczonej funkcjiprint().
- W tym celu oblicz
- Ustaw przekątną na zero i przekształć macierz do formatu „coordinate matrix format". Ten fragment kodu jest już dostarczony w odpowiedzi.
- Znajdź pary użytkowników, którzy należeli wspólnie do największej liczby klubów.
- Używając
np.where(), uzyskaj indeksy, gdzieusers_coo.datajest równeusers_coo.data.max(). - Iteruj po
indices2i wypisz każdy indeksidxzusers_coo.roworazusers_coo.colnależących dopeople_nodes.
- Używając
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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[____.____[____]]))