ПочатиПочніть безкоштовно

Знайдіть спільне членство: транспонування

Як ви могли помітити, під час переходу до розрідженого матричного подання ви втрачаєте метадані графа. Тепер ви навчитеся повертати ці метадані, щоб краще досліджувати спільне членство.

user_matrix, яку ви обчислили в попередній вправі, уже завантажено у ваш робочий простір.

Тут стане у пригоді функція np.where(). Ось що вона робить: маючи масив, наприклад, a = [1, 5, 9, 5], якщо потрібно отримати індекси, де значення дорівнює 5, ви можете використати idxs = np.where(a == 5). Це поверне масив у корежі, (array([1, 3]),). Щоб дістати ці індекси, зверніться до кортежу як idxs[0].

Ця вправа є частиною курсу

Середній рівень Network Analysis у Python

Переглянути курс

Інструкції до вправи

  • Знайдіть імена людей, які були членами найбільшої кількості клубів.
    • Для цього спершу обчисліть diag, застосувавши метод .diagonal() до user_matrix.
    • Далі, використовуючи np.where(), виберіть ті індекси, де diag дорівнює diag.max(). Повертається кортеж: обовʼязково зверніться до потрібних індексів, індексуючи кортеж через [0].
    • Ітеруйте indices і виведіть кожен індекс i з people_nodes, скориставшись наданою функцією print().
  • Обнуліть діагональ і перетворіть матрицю на «координатний формат». Цей код уже наведено у відповіді.
  • Знайдіть пари користувачів, які мали спільне членство в найбільшій кількості клубів.
    • Використовуючи np.where(), отримайте індекси, де users_coo.data дорівнює users_coo.data.max().
    • Ітеруйте indices2 і виведіть для кожного індексу idx елементи users_coo.row та users_coo.col у people_node.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

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[____.____[____]]))  
Редагувати та запускати код