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
Istruzioni dell'esercizio
- Itera su
user_nodese calcola la similarità trausere ciascunuser_node(n) usando la tua funzioneuser_similarity(). Salva il risultato insimilarity. - 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
similaritiesusando il metodo.keys()e poi usa la funzionemax(). Salva il risultato inmax_similarity. - Restituisci la lista degli utenti che condividono la similarità massima. Questa lista è il valore della chiave
max_similaritydisimilarities. - 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(____)