Znajdź podobnych użytkowników
Czas wykorzystać zdobytą dotychczas wiedzę i napisać funkcję most_similar_users(), która wyszukuje użytkowników najbardziej podobnych do wskazanego użytkownika.
Początek tej funkcji jest już napisany. Przygotowana została lista węzłów user_nodes, zawierająca wszystkich użytkowników z wyjątkiem tego, który został przekazany do funkcji. Twoim zadaniem jest dokończenie funkcji tak, aby znajdowała użytkowników najbardziej podobnych do podanego użytkownika. Skorzystaj przy tym z funkcji user_similarity() z poprzedniego ćwiczenia.
Przygotowany został słownik similarities, w którym klucze to wyniki podobieństwa, a wartości to listy węzłów. Jeśli nie zetknąłeś się wcześniej z defaultdict, nie martw się – więcej na jego temat dowiesz się w rozdziale 3! Działa on dokładnie jak zwykły słownik Pythona.
To ćwiczenie jest częścią kursu
Analiza sieci w Pythonie – poziom średniozaawansowany
Instrukcje do ćwiczenia
- Iteruj po
user_nodesi oblicz podobieństwo międzyusera każdym węzłemuser_node(n) za pomocą funkcjiuser_similarity(). Zapisz wynik jakosimilarity. - Dodaj wynik i węzeł do słownika
similarities. Kluczem jest wynik –similarity– a wartością węzeł –n. - Oblicz maksymalny wynik podobieństwa. Najpierw pobierz klucze (zawierające wyniki) słownika
similaritiesza pomocą metody.keys(), a następnie użyj funkcjimax(). Zapisz wynik jakomax_similarity. - Zwróć listę użytkowników o maksymalnym podobieństwie. Jest to wartość przypisana do klucza
max_similarityw słownikusimilarities. - Użyj funkcji
most_similar_users(), aby wyświetlić listę użytkowników najbardziej podobnych do użytkownika'u4560'.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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(____)