igraphの使い方1 ~ グラフの作成 ~




前回のigraphの紹介に引き続き、今回は、igraphの基本的な使い方について、説明する。ここでは、Python 3.xを前提に説明するが、Python 2.xでも使い方は変わらない。

まず、igraphをPythonで使うには、igraphをimportしなければならない。そのための作業は、Pythonのコードの冒頭に、以下のコードを加えるだけ。

from igraph import *

グラフ作成の基本


次に、ノード数、リンク数共に0の、空のグラフを作成してみる。

g = Graph()

これで、gに空のグラフが入った。この時、gは、無向辺グラフである。グラフが有向辺グラフなのか、無向辺グラフを調べるのであれば、以下のコードを試せば良い。

g.is_directed()

Trueが返ってきたら有向辺グラフ、Falseなら無向辺グラフである。

では有向辺グラフを作成するには、どうすれば良いか。

g = Graph(directed=True)

これだけで良い。

他にも、Graph()の引数には何を指定できるのか。Graphクラスのコンストラクターの引数はこのようになっている。

__init__(n=None,
         edges=None,
         directed=None,
         graph_attrs=None,
         vertex_attrs=None,
         edge_attrs=None)
  • n - ノード数。省略するとノード数0のグラフが作成される。
  • edges - リンクのリスト。一つのリンクは、integer型のタプルとして表現する。もし、n-1以上の値のノードを指定した場合、グラフのノード数nが適切に修正される。
  • directed - グラフが有向辺グラフか無向辺グラフかを指定する。
  • graph_attrs - グラフの"アトリビュート"を辞書型で設定する。アトリビュートについては、後で解説する。
  • vertex_attrs - ノードのアトリビュートを設定する。
  • edge_attrs - リンクのアトリビュートを設定する。
アトリビュートというのは、付加情報のことだ。例えば、ノードに、名前"name"を付加するためには、以下のようにすれば良い。

g = Graph(n=2, vertex_attrs={"name":["NodeA","NodeB"]})

これで、グラフのノードは"name"というアトリビュートを持ち、一つ目のノードの"name"アトリビュートの値が"NodeA"、二つ目のノードの"name"アトリビュートの値が"NodeB"になった。リンクに対しても同じようにアトリビュートを設定することが出来る。

自分でグラフを作成する場合の処理は、このくらいを知っておけば十分だと思う。

有名なグラフの生成

igraphには、一般的に有名なモデルグラフを生成するメソッドも、多数用意されている。以下はその一例だ。
他にも、ツリー型グラフ、格子状グラフ、フルメッシュグラフ(完全グラフ)などを生成するメソッドがある。正直、自分も聞いたことないグラフモデルも用意されている。(igraphのマニュアルを見るだけで勉強になる。)

それぞれのメソッドの引数は、igraphのマニュアルを参考にしてほしい。丁寧に解説されている。
python-igraph manual -Class GraphBase

グラフの確認

作成したグラフを確認する方法は様々あるが、一番手っ取り早いのは、ノードとリンクを、標準出力してみることだ。

print(g)

これで、ノード数と、リンクの一覧を見ることが出来る。他にも、

for n in g.vs():
    print(n)
for l in g.es():
    print(l.tuple)

これでも、ノードの一覧と、リンクの一覧を表示することができる。

他にも実際にグラフを描画してしまうのも、一つの手だ。Pythonで描画させたり、一度グラフをファイル出力して、GephiやCytoscapeなどで表示させてみたらいいだろう。Pythonで描画する方法は、いずれまとめようと思う。



次回は、ノードやリンクの追加、編集、削除、参照などの方法などについてまとめるつもり。

コメント