始める無料で始める

類似ユーザーを見つける

ここまで学んだことを活かして、指定したユーザーに最も似ているユーザーを見つける関数 most_similar_users() を作成します。

この関数の骨組みは用意してあります。ノードのリスト user_nodes は、関数に渡された対象ユーザー「以外」のすべてのユーザーを含みます。あなたのタスクは、この対象ユーザーに最も似ているユーザーを見つけるように関数を完成させることです。前の演習で作成した user_similarity() 関数を活用します。

similarities という辞書が用意されており、キーがスコア、値のリストがノードになっています。defaultdict を見たことがなくても心配いりません——Chapter 3 で詳しく学びます! 挙動は通常の Python の辞書とまったく同じです。

この演習はコースの一部です

Python 中級ネットワーク解析

コースを見る

演習の手順

  • user_nodes を反復処理し、user_similarity() 関数を使って、user と各 user_noden)の類似度を計算します。結果を similarity として保存します。
  • スコアとノードを similarities 辞書に追加します。キーはスコア(similarity)、値はノード(n)です。
  • 最大の類似度スコアを計算します。まず .keys() メソッドで similarities のキー(スコア)にアクセスし、max() 関数を使います。結果を max_similarity として保存します。
  • 最大類似度を共有するユーザーのリストを返します。このユーザーのリストは、similaritiesmax_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(____)
コードを編集して実行