networkxを使って、2部グラフのネットワーク解析をしてみたい
手軽に読み込めるデータセットがあったので、まずは可視化からやってみる
環境
- python: 3.6.8
- networkx: 2.4
やってること
関数を使えばたいていの解析はできるが、何をしているかわからないと解釈できないので、簡単ではあるが用語の説明も入れていく
2部グラフとその射影
2部グラフはノードU, VエッジEとするとのように表記する。すなわち、ノードが2種類あるグラフ構造のことを指す
例えばUを論文、Vを著者とすると共著関係を表すネットワークになる
どちらかのノードについて注目する時、射影(projection)というものを取って解析していく
Uの射影グラフを考えてみる。ノードはUのみになる。エッジは、あるVのノードvを介してつながるUのノードu1,u2の間にリンクを生成する。要はVを介してつながるUをつなげたものになる。Uの射影をなどと表記する
実装
使っているデータセットは
Davis Southern Club Women
非公式な社交行事(informal social events)に出席した女性を紐づけている。各女性同士のつながりがどこで生じたかを通じて、社会運動がどう生じていったかを調べるためのデータらしい
ネットワーク構造自体は各ノードが女性、イベント名を表す2部グラフ
18人の女性(ノード数18)と14のイベント(ノード数14)からなる
ここでは女性に関する射影グラフを見ていくことにする
次数なんか見ると、割と高い(最低11)ので密なネットワークを形成している
#Friends(degree), Member
17 Evelyn Jefferson
15 Laura Mandeville
17 Theresa Anderson
15 Brenda Rogers
11 Charlotte McDowd
15 Frances Anderson
15 Eleanor Nye
16 Pearl Oglethorpe
17 Ruth DeSand
17 Verne Sanderson
16 Myra Liddel
16 Katherina Rogers
17 Sylvia Avondale
17 Nora Fayette
17 Helen Lloyd
16 Dorothy Murchison
12 Olivia Carleton
12 Flora Price
ネットワーク図を描いてみると、実際そんな感じになっている
エッジの太さは、イベントで会った回数(エッジの共起回数)を用いている。太いほど、一緒のイベントに出ている
赤いノードに対してつながっているノードのみ抽出したネットワーク。一番次数が少ないノードに対して描画しているが、結構密につながっていることがわかる
実装はgistにしてある
gist:uni-3/a3071d16a62f4468ac2f0905ce54ba5b
参考
-
Pythonで学ぶネットワーク分析: ColaboratoryとNetworkXを使った実践入門
-
https://www.ieice.org/~netsci/wp-content/uploads/2012/01/NetSci201201_Akutsu.pdf 「二部グラフからの射影により得られた ネットワークの次数分布について」 pdfファイル
-
https://networkx.github.io/documentation/stable/auto_examples/algorithms/plot_davis_club.html