射影の計算
二部グラフを、その片方のパーティションのノードに射影してみましょう。これは、二部グラフとその単部グラフへの射影を相互に変換する練習になります。動画で学んだとおり、グラフを一方のパーティションに「射影」するとは、もう一方のパーティションへの接続に基づいて、そのパーティション内のノード同士のつながり(連結性)を表すことです。より具体的には、「共通の購入に基づく顧客同士のつながり」をイメージするとわかりやすいです。
最初の一歩として、リスト内包表記に関するヒントです。リスト内包表記には条件を含められるので、特定のタイプのノードでグラフをフィルタしたい場合は、次のように書けます: [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 の射影を計算し、結果をそれぞれpeopleGとclubsGに保存してください。- この関数は2つの引数を取ります: グラフ
Gとノードリストです。
- この関数は2つの引数を取ります: グラフ
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# 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 = ____