Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

  • Iteruj po user_nodes i oblicz podobieństwo między user a każdym węzłem user_node (n) za pomocą funkcji user_similarity(). Zapisz wynik jako similarity.
  • 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 similarities za pomocą metody .keys(), a następnie użyj funkcji max(). Zapisz wynik jako max_similarity.
  • Zwróć listę użytkowników o maksymalnym podobieństwie. Jest to wartość przypisana do klucza max_similarity w słowniku similarities.
  • 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(____)
Edytuj i uruchom kod