Zacznij terazZacznij za darmo

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

Zobacz kurs

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() na user_matrix.
    • Następnie, korzystając z np.where(), wybierz indeksy tam, gdzie diag jest równe diag.max(). Wynikiem jest krotka – upewnij się, że odwołujesz się do odpowiednich indeksów, indeksując krotkę za pomocą [0].
    • Iteruj po indices i wypisz każdy indeks i z people_nodes, korzystając z dostarczonej funkcji print().
  • 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, gdzie users_coo.data jest równe users_coo.data.max().
    • Iteruj po indices2 i wypisz każdy indeks idx z users_coo.row oraz users_coo.col należących do people_nodes.

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[____.____[____]]))  
Edytuj i uruchom kod