Hitta liknande användare
Nu ska du bygga vidare på det du lärt dig och skriva en funktion kallad most_similar_users(), som hittar de användare som liknar en given användare mest.
Början av den här funktionen är redan skriven åt dig. En lista med noder, user_nodes, har skapats – den innehåller alla användare utom den angivna användaren som skickats in i funktionen. Din uppgift är att slutföra funktionen så att den hittar de användare som liknar den givna användaren mest. Du kommer att använda din user_similarity()-funktion från föregående övning som hjälp.
En ordbok kallad similarities har skapats, där nycklarna är poängen och listan med värden är noderna. Om du aldrig sett en defaultdict tidigare är det lugnt – du lär dig mer om den i kapitel 3! Den fungerar precis som en vanlig Python-ordbok.
Den här övningen är en del av kursen
Nätverksanalys i Python – fortsättningskurs
Övningsinstruktioner
- Iterera över
user_nodesoch beräkna likheten mellanuseroch varjeuser_node(n) med hjälp av dinuser_similarity()-funktion. Spara resultatet somsimilarity. - Lägg till poängen och noden i ordboken
similarities. Nyckeln är poängen –similarity– och värdet är noden –n. - Beräkna det högsta likhetsvärdet. Hämta först nycklarna (som innehåller poängen) i
similaritiesmed metoden.keys()och använd sedan funktionenmax(). Spara resultatet sommax_similarity. - Returnera listan med användare som delar den högsta likheten. Den listan är värdet för nyckeln
max_similarityisimilarities. - Använd din
most_similar_users()-funktion för att skriva ut listan med användare som liknar användaren'u4560'mest.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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(____)