Začněte nyníZačněte zdarma

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

Zobrazit kurz

Pokyny k cvičení

  • Zjisti jména lidí, kteří byli členy největšího počtu klubů.
    • Nejprve vypočítej diag pomocí metody .diagonal() na user_matrix.
    • Poté pomocí np.where() vyber indexy, kde diag se rovná diag.max(). Výsledkem je n-tice: nezapomeň přistoupit k relevantním indexům pomocí indexování [0].
    • Projdi indices v cyklu a vypiš každý index i z people_nodes pomocí připravené funkce print().
  • 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, kde users_coo.data se rovná users_coo.data.max().
    • Projdi indices2 v cyklu a pro každý index idx vypiš příslušné záznamy z users_coo.row a users_coo.col přes people_nodes.

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[____.____[____]]))  
Upravit a spustit kód