Поиск совместного членства: транспонирование
Как вы, возможно, заметили, при переходе к разреженному матричному представлению метаданные графа теряются. Сейчас вы научитесь восстанавливать эти метаданные, чтобы получить больше информации о совместном членстве.
Матрица user_matrix, вычисленная в предыдущем упражнении, уже загружена в ваше рабочее пространство.
В этом упражнении вам пригодится функция np.where(). Вот как она работает: для массива, например a = [1, 5, 9, 5], чтобы получить индексы элементов, равных 5, используйте idxs = np.where(a == 5). Результат — массив внутри кортежа: (array([1, 3]),). Чтобы обратиться к этим индексам, нужно выполнить индексирование по кортежу: idxs[0].
Это упражнение является частью курса
Средний уровень сетевого анализа на 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_nodes.
- С помощью
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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[____.____[____]]))