Sdílené členství: transpozice
Jak sis možná všiml/a, při převodu grafu do řídké matice přijdeš o metadata. Teď se naučíš, jak tato metadata doplnit zpět, aby sis mohl/a zjistit více o sdíleném členství.
user_matrix vypočítaná v předchozím cvičení je přednahraná v tvém pracovním prostředí.
Hodí se ti zde funkce np.where(). Funguje takto: máš-li pole, například a = [1, 5, 9, 5], a chceš získat indexy, kde je hodnota rovna 5, použiješ idxs = np.where(a == 5). Vrátí ti pole zabalené v n-tici: (array([1, 3]),). Pro přístup k těmto indexům pak indexuješ do n-tice pomocí idxs[0].
Toto cvičení je součástí kurzu
Intermediate Network Analysis in Python
Pokyny k cvičení
- Zjisti jména lidí, kteří byli členy největšího počtu klubů.
- Nejprve vypočítej
diagpomocí metody.diagonal()nauser_matrix. - Poté pomocí
np.where()vyber indexy, kdediagse rovnádiag.max(). Výsledkem je n-tice: nezapomeň přistoupit k relevantním indexům pomocí indexování[0]. - Projdi
indicesv cyklu a vypiš každý indexizpeople_nodespomocí připravené funkceprint().
- Nejprve vypočítej
- Nastav diagonálu na nulu a převeď ji do formátu „coordinate matrix". Tento kód je už za tebe připravený v odpovědi.
- Najdi dvojice uživatelů, kteří sdíleli členství v největším počtu klubů.
- Pomocí
np.where()přistup k indexům, kdeusers_coo.datase rovnáusers_coo.data.max(). - Projdi
indices2v cyklu a pro každý indexidxvypiš příslušné záznamy zusers_coo.rowausers_coo.colpřespeople_nodes.
- Pomocí
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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[____.____[____]]))