Знайдіть схожих користувачів
Тепер ви розвинете те, що вже вивчили, і напишете функцію most_similar_users(), яка знаходить користувачів, найбільш схожих на заданого користувача.
Початок цієї функції вже підготовлено. Створено список вузлів user_nodes, який містить усіх користувачів, окрім заданого користувача, переданого у функцію. Ваше завдання — доповнити функцію так, щоб вона знаходила користувачів, найбільш схожих на цього користувача. Для цього ви скористаєтеся своєю функцією user_similarity() з попередньої вправи.
Підготовлено словник similarities, у якому ключами є бали, а списками значень — вузли. Якщо ви раніше не бачили defaultdict, не хвилюйтеся — більше про нього буде в Розділі 3! Він працює так само, як звичайний словник Python.
Ця вправа є частиною курсу
Середній рівень Network Analysis у 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(____)