Găsește utilizatori similari
Acum vei construi pe baza a ceea ce ai învățat până acum și vei scrie o funcție numită most_similar_users(), care găsește utilizatorii cei mai similari cu un utilizator dat.
Începutul acestei funcții a fost deja scris pentru tine. A fost creată o listă de noduri, user_nodes, care conține toți utilizatorii cu excepția utilizatorului transmis ca argument funcției. Sarcina ta este să completezi funcția astfel încât să găsească utilizatorii cei mai similari cu acest utilizator dat. Vei folosi funcția user_similarity() din exercițiul anterior pentru a realiza acest lucru.
A fost configurat un dicționar numit similarities, în care cheile sunt scorurile, iar valorile sunt liste de noduri. Dacă nu ai mai întâlnit un defaultdict până acum, nu îți face griji – vei afla mai multe despre el în Capitolul 3! Funcționează exact ca un dicționar Python obișnuit.
Acest exercițiu face parte din cursul
Analiză intermediară a rețelelor în Python
Instrucțiuni pentru exercițiu
- Iterează peste
user_nodesși calculează similaritatea dintreuserși fiecareuser_node(n) folosind funcțiauser_similarity(). Stochează rezultatul casimilarity. - Adaugă scorul și nodul în dicționarul
similarities. Cheia este scorul –similarity– iar valoarea este nodul –n. - Calculează scorul maxim de similaritate. Pentru aceasta, accesează mai întâi cheile (care conțin scorurile) din
similaritiesfolosind metoda.keys(), apoi aplică funcțiamax(). Stochează rezultatul camax_similarity. - Returnează lista utilizatorilor care au similaritate maximă. Această listă reprezintă valoarea cheii
max_similaritydinsimilarities. - Folosește funcția
most_similar_users()pentru a afișa lista utilizatorilor cei mai similari cu utilizatorul'u4560'.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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(____)