開始使用免費開始

找出相似的使用者

接下來你要在前面所學的基礎上,撰寫一個名為 most_similar_users() 的函式,用來找出與指定使用者最相似的其他使用者。

這個函式的開頭部分已幫你寫好。一個節點清單 user_nodes 已經建立完成,裡面包含傳入函式的指定使用者「以外」的所有使用者。你的任務是完成這個函式,找出與該指定使用者最相似的使用者。你會使用上一個練習中寫的 user_similarity() 函式來協助完成。

我們也替你準備了一個名為 similarities 的字典,鍵是分數,值是節點的清單。如果你以前沒看過 defaultdict,別擔心──你會在第 3 章學到更多!它與一般的 Python 字典運作方式相同。

本練習屬於課程

Python 網路分析進階

檢視課程

練習說明

  • 走訪 user_nodes,使用你的 user_similarity() 函式計算 user 與每個 user_noden)之間的相似度。將結果存為 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(____)
編輯並執行程式碼