Поиск похожих пользователей
Опираясь на то, что вы уже изучили, напишите функцию most_similar_users(), которая находит пользователей, наиболее похожих на заданного.
Начало этой функции уже написано за вас. Создан список узлов user_nodes, содержащий всех пользователей кроме того, который передан в функцию. Ваша задача — дополнить функцию так, чтобы она находила пользователей, наиболее похожих на заданного. Для этого воспользуйтесь функцией user_similarity() из предыдущего упражнения.
Также подготовлен словарь similarities, в котором ключами служат оценки схожести, а значениями — списки узлов. Если вы никогда не работали с defaultdict — не беспокойтесь: подробнее вы познакомитесь с ним в главе 3! Он работает точно так же, как обычный словарь Python.
Это упражнение является частью курса
Средний уровень сетевого анализа на Python
Инструкции к упражнению
- Пройдитесь по
user_nodesи вычислите сходство междуuserи каждым узломuser_node(n) с помощью функцииuser_similarity(). Сохраните результат в переменнуюsimilarity. - Добавьте оценку и узел в словарь
similarities. Ключ — это оценка (similarity), значение — узел (n). - Вычислите максимальную оценку сходства: сначала получите ключи словаря
similaritiesс помощью метода.keys(), затем примените функциюmax(). Сохраните результат в переменнуюmax_similarity. - Верните список пользователей с максимальным сходством — это значение, соответствующее ключу
max_similarityв словареsimilarities. - Используйте функцию
most_similar_users(), чтобы вывести список пользователей, наиболее похожих на пользователя'u4560'.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
from collections import defaultdict
def most_similar_users(G, user, user_nodes, proj_nodes):
# Data checks
assert G.nodes[user]['bipartite'] == 'users'
# Get other nodes from user partition
user_nodes = set(user_nodes)
user_nodes.remove(user)
# Create the dictionary: similarities
similarities = defaultdict(list)
for n in ____:
similarity = ____(____, ____, ____, ____)
____[____].____
# Compute maximum similarity score: max_similarity
max_similarity = ____
# Return list of users that share maximal similarity
return ____[____]
user_nodes = get_nodes_from_partition(G, 'users')
project_nodes = get_nodes_from_partition(G, 'projects')
print(____)