類似ユーザーを見つける
ここまで学んだことを活かして、指定したユーザーに最も似ているユーザーを見つける関数 most_similar_users() を作成します。
この関数の骨組みは用意してあります。ノードのリスト user_nodes は、関数に渡された対象ユーザー「以外」のすべてのユーザーを含みます。あなたのタスクは、この対象ユーザーに最も似ているユーザーを見つけるように関数を完成させることです。前の演習で作成した user_similarity() 関数を活用します。
similarities という辞書が用意されており、キーがスコア、値のリストがノードになっています。defaultdict を見たことがなくても心配いりません——Chapter 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(____)