オープンソースで学ぶ
社会ネットワーク分析
 2章グラフ理論スピード入門

社会ネットワーク分析勉強会
   @teruu (てる)
    2012/07/05
目次
•   1章   イントロダクション
•   2章   グラフ理論スピード入門
•   3章   中心性、権力、ボトルネック
•   4章   クリーク、クラスタ、コンポーネント
•   5章   2モードネットワーク
•   6章   バイラルへ!―情報の拡散
•   7章   現実のグラフデータ
グラフ理論スピード入門
•   グラフとは何か
•   グラフのトラバーサルと距離
•   グラフの距離
•   なぜこれが重要なのか
•   6次の隔たりは神話に過ぎない
•   スモールワールドネットワーク

グラフ理論とPythonの話題が混在
→ 初心者には難しい
自己紹介
• お仕事
 – 元DBエンジニア
 – 現在、データマイニング専業のベンチャー所属
 – 派遣先で、ソーシャルネットワークの分析に携わ
   る
• 大学院で修士課程を修了(2011年3月卒)
 – 修論テーマ:小売業の購買履歴分析
 – (グラフ理論の視点からとらえ直すと)二部グラフ
   のクラスタリング問題
グラフ理論スピード入門
•   グラフとは何か
•   グラフのトラバーサルと距離
•   グラフの距離
•   なぜこれが重要なのか
•   6次の隔たりは神話に過ぎない
•   スモールワールドネットワーク
グラフとは何か
    ダイアド(2者関係、diad)
    ノード(頂点、node)
    エッジ(辺、関係、edge)


                       E1
               N1     好き    N2
                     (動詞)
              アリス            ボブ
              (名詞)          (名詞)




6
グラフとは何か

    グラフの種類
    – 向き:無向⇔有向
    – 重み:重みなし⇔重みつき
    – モード:1モードグラフ(一部グラフ、unipartite)
          2モードグラフ(二部グラフ、bipartite) →5章
          マルチモードグラフ(?部グラフ、multipartite) →6章




7
グラフの向き:無向⇔有向




(A)無向・重みなし・一部グラフ   (B)有向・重みなし・一部グラフ
グラフの重み:重みなし⇔重みつき




 (A)有向・重みなし・一部グラフ   (B)有向・重みつき・一部グラフ
グラフのモード:
   一部グラフ⇔二部グラフ




(A)無向・重みなし・一部グラフ   (B)無向・重みなし・二部グラフ
隣接行列、エッジリスト、隣接リスト


                            グラフ2:無向、重み無し、二部グラフ
グラフ1:有向、重み付き、(一部)グラフ                    (bipartite)
             (unipartite)




     グラフ




隣接行列




11
隣接行列、エッジリスト、隣接リスト
                 from to value
                    AB2
                    AD5
                    AE5
                    BA2
                    BD1
   ABCDE            CD3
  A02055                         from    edges
                    CE4
                                   A    (B 2),(D   5),(E 5)
  B20010            DA5
                                   B    (A 2),(D   1)
  C00034            DB1
                                   C    (D 3),(E   4)
  D51300            DC3
                                   D    (A 5),(B   1),(C 3)
  E50400            EA5
                                   E    (A 5),(C   4)
                    EC4

(A)隣接行列        (B)エッジリスト         (C)隣接リスト

デメリット:メモリの無駄   メリット:メモリ効率的       メリット:メモリ効率的
               デメリット:高速サーチ不可           高速サーチ可能
                                 デメリット:パース処理面倒
グラフとは何か
• 隣接行列
• エッジリストと隣接リスト
• ケーニヒスベルクの7つの橋
グラフのトラバーサルと距離
• 深さ優先探索
 – 実装
 – NetworkXによるDFS
• 幅優先探索
 – アルゴリズム
 – NetworkXによるBFS
• 単純路と通路
• ダイクストラのアルゴリズム
グラフのトラバーサルと距離
• 深さ優先探索(DFS)
  0→1 →3 →2 →5 →6 →4 →7 →8 →9




                  (1)何らかのノードnからスタートする。
                  (2)nに訪問済みのマークを付ける。
                  (3)nに隣接する未訪問の個々のniについて、
                  以下の処理を繰り返す。
                       (4)再帰的にノードniにDFSを適用する。
• 幅優先探索(BFS)
  0→1 →2 →3 →5 →4 →6 →7 →8 →9




               (1)ノードnからスタートする。
               (2)待ち行列Qを作る。
               (3)nに訪問済みのマークを付ける。
               (4)nをQにエンキューする。
               (5)Qが空でない間、以下の処理を繰り返す。
                     (6-1)Qからnをデキューする。
                    (6-2)nに隣接する未訪問の個々のniについて、
                     以下の処理を繰り返す。
                          (7-1)niに訪問済みのマークを付ける。
                            (7-2)niをQにエンキューする。
単純路と通路
• 単純路:各ノードを1度だけ通るパス(通路)
 – 開いた/閉じた
 – 閉路(閉じた単純路)

• ダイクストラのアルゴリズム(1959年)
 – もっともコストの低い単純路を見つける
• Networkx:2つの最短単純路アルゴリズム
 – dijkstra_path
 – shortest_path
グラフの距離
• 指標が複数ある
 – 最短単純路
  • ノードAからBまでのエッジの数
 – コストに基づく最短単純路
  • 重みつきグラフ
 – ユークリッド距離
  • 隣接行列から計算
グラフの直径
• あるノードから別のノードへ移動
 – 通過するノード数の最大値
なぜこれが重要なのか
• グラフの距離
 – グラフを量的に分析する手段
 – ネットワーク参加者の影響力を評価
6次の隔たりは神話に過ぎない
• ミルグラムのスモールワールド実験(1969年)
 – 6次の隔たり


• 神話?
スモールワールドネットワーク




            (格子)

    直径=5                   直径=3


17本のエッジのうち5本をランダムに置き換える
→グラフの形は大きく変わらないが、直径が5→3に
複雑ネットワークの歴史
• 1736年 オイラーがケーニヒスベル
  グの七つの橋の問題をグラフを用い
  て解決
   (一筆書きが不可能であることを証明)
   → グラフ理論の誕生

• 1967年 ミルグラムのスモールワー
  ルド実験
• 1998年 ワッツとストロガッツのス
  モールワールド・ネットワーク
• 1999年 バラバシとアルバートのス
  ケールフリー・ネットワーク
Python/Networkx
• 後ほど演習にて

• Networkx (http://networkx.lanl.gov/)

• Ipython問題?

2章グラフ理論スピード入門