Vergelijkbare gebruikers vinden
Je gaat nu voortbouwen op wat je tot nu toe hebt geleerd en een functie schrijven genaamd most_similar_users() die de gebruikers vindt die het meest lijken op een opgegeven gebruiker.
Het begin van deze functie is alvast voor je geschreven. Er is een lijst met knopen, user_nodes, aangemaakt die alle gebruikers bevat, behalve de opgegeven gebruiker die aan de functie is doorgegeven. Het is jouw taak de functie af te maken zodat deze de gebruikers vindt die het meest lijken op deze opgegeven gebruiker. Daarbij maak je gebruik van je user_similarity()-functie uit de vorige oefening.
Er is een dictionary similarities opgezet, waarin de keys de scores zijn en de waarden lijsten met knopen. Heb je nog nooit een defaultdict gezien? Geen zorgen — in Hoofdstuk 3 leer je er meer over! Hij werkt precies zoals een gewone Python-dictionary.
Deze oefening maakt deel uit van de cursus
Gemiddelde netwerkanalyse in Python
Oefeninstructies
- Itereer over
user_nodesen bereken de gelijkenis tussenuseren elkeuser_node(n) met je functieuser_similarity(). Sla het resultaat op alssimilarity. - Voeg de score en knoop toe aan de dictionary
similarities. De key is de score —similarity— en de value is de knoop —n. - Bereken de maximale gelijkenisscore. Toegang eerst de keys (die de scores bevatten) van
similaritiesmet de methode.keys()en gebruik daarna de functiemax(). Sla het resultaat op alsmax_similarity. - Retourneer de lijst met gebruikers die de maximale gelijkenis delen. Deze lijst is de value van de key
max_similarityinsimilarities. - Gebruik je functie
most_similar_users()om de lijst te printen met gebruikers die het meest lijken op de gebruiker'u4560'.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
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(____)