始める無料で始める

射影の計算

二部グラフを、その片方のパーティションのノードに射影してみましょう。これは、二部グラフとその単部グラフへの射影を相互に変換する練習になります。動画で学んだとおり、グラフを一方のパーティションに「射影」するとは、もう一方のパーティションへの接続に基づいて、そのパーティション内のノード同士のつながり(連結性)を表すことです。より具体的には、「共通の購入に基づく顧客同士のつながり」をイメージするとわかりやすいです。

最初の一歩として、リスト内包表記に関するヒントです。リスト内包表記には条件を含められるので、特定のタイプのノードでグラフをフィルタしたい場合は、次のように書けます: [n for n, d in G.nodes(data=True) if d['key'] == 'some_value']

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

Python 中級ネットワーク解析

コースを見る

演習の手順

  • リスト内包表記を使って people のノードリストを用意してください。G のノード n'bipartite' キーが 'people' と等しければ、そのノードをノードリストに含めます。
  • メタデータを「含めて」G のノードを反復し、clubs のノードリストを用意してください。ここでは、メタデータ辞書 d'bipartite' キーが 'clubs' と等しいかを確認します。注: これはノードリストを作る別のやり方です。メタデータを反復せず、people のノードリストと同じ方法で 'clubs' をチェックしても構いません。ここでは両方の方法に慣れるため、あえて別のやり方を練習します。
  • nx.bipartite.projected_graph() を使って、people と clubs の射影を計算し、結果をそれぞれ peopleGclubsG に保存してください。
    • この関数は2つの引数を取ります: グラフ G とノードリストです。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Prepare the nodelists needed for computing projections: people, clubs
# This exercise shows you two ways to do it, one with `data=True` and one without.
people = [n for n in G.nodes() if G.nodes[____]['____'] == '____']
clubs = [n for n, d in G.nodes(data=True) if d['____'] == '____']

# Compute the people and clubs projections: peopleG, clubsG
peopleG = ____
clubsG = ____
コードを編集して実行