找出相似的使用者
接下來你要在前面所學的基礎上,撰寫一個名為 most_similar_users() 的函式,用來找出與指定使用者最相似的其他使用者。
這個函式的開頭部分已幫你寫好。一個節點清單 user_nodes 已經建立完成,裡面包含傳入函式的指定使用者「以外」的所有使用者。你的任務是完成這個函式,找出與該指定使用者最相似的使用者。你會使用上一個練習中寫的 user_similarity() 函式來協助完成。
我們也替你準備了一個名為 similarities 的字典,鍵是分數,值是節點的清單。如果你以前沒看過 defaultdict,別擔心──你會在第 3 章學到更多!它與一般的 Python 字典運作方式相同。
本練習屬於課程
Python 網路分析進階
練習說明
- 走訪
user_nodes,使用你的user_similarity()函式計算user與每個user_node(n)之間的相似度。將結果存為similarity。 - 把分數與節點加入
similarities字典。鍵為分數(similarity),值為節點(n)。 - 計算最大相似度分數。先用
.keys()取得similarities的鍵(即分數),再用max()取最大值。將結果存為max_similarity。 - 回傳具有最大相似度的使用者清單。這個清單就是
similarities中鍵為max_similarity的值。 - 使用你的
most_similar_users()函式,印出與使用者'u4560'最相似的使用者清單。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
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(____)