НачатьНачать бесплатно

Поиск совместного членства: транспонирование

Как вы, возможно, заметили, при переходе к разреженному матричному представлению метаданные графа теряются. Сейчас вы научитесь восстанавливать эти метаданные, чтобы получить больше информации о совместном членстве.

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