IniziaInizia gratis

Trova utenti simili

Ora farai un passo avanti rispetto a quanto hai imparato finora per scrivere una funzione chiamata most_similar_users() che trova gli utenti più simili a un dato utente.

L’inizio della funzione è già stato scritto per te. È stata creata una lista di nodi, user_nodes, che contiene tutti gli utenti tranne quello passato alla funzione. Il tuo compito è completare la funzione in modo che trovi gli utenti più simili a questo utente dato. Per farlo, userai la tua funzione user_similarity() dell’esercizio precedente.

È stato configurato un dizionario chiamato similarities, in cui le chiavi sono i punteggi e i valori sono le liste di nodi. Se non hai mai visto un defaultdict, non preoccuparti: ne parleremo nel Capitolo 3! Si comporta esattamente come un normale dizionario Python.

Questo esercizio fa parte del corso

Analisi di reti intermedia in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Itera su user_nodes e calcola la similarità tra user e ciascun user_node (n) usando la tua funzione user_similarity(). Salva il risultato in similarity.
  • Aggiungi il punteggio e il nodo al dizionario similarities. La chiave è il punteggio — similarity — e il valore è il nodo — n.
  • Calcola il punteggio di similarità massimo. Per farlo, accedi prima alle chiavi (che contengono i punteggi) di similarities usando il metodo .keys() e poi usa la funzione max(). Salva il risultato in max_similarity.
  • Restituisci la lista degli utenti che condividono la similarità massima. Questa lista è il valore della chiave max_similarity di similarities.
  • Usa la tua funzione most_similar_users() per stampare la lista degli utenti più simili all’utente 'u4560'.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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(____)
Modifica ed esegui il codice