Знайдіть спільне членство: транспонування
Як ви могли помітити, під час переходу до розрідженого матричного подання ви втрачаєте метадані графа. Тепер ви навчитеся повертати ці метадані, щоб краще досліджувати спільне членство.
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[____.____[____]]))