前回の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 - リンクのアトリビュートを設定する。
g = Graph(n=2, vertex_attrs={"name":["NodeA","NodeB"]})
これで、グラフのノードは"name"というアトリビュートを持ち、一つ目のノードの"name"アトリビュートの値が"NodeA"、二つ目のノードの"name"アトリビュートの値が"NodeB"になった。リンクに対しても同じようにアトリビュートを設定することが出来る。
自分でグラフを作成する場合の処理は、このくらいを知っておけば十分だと思う。
有名なグラフの生成
igraphには、一般的に有名なモデルグラフを生成するメソッドも、多数用意されている。以下はその一例だ。- BAモデル
- Graph.Barabasi()
- 参考:Weblio BAモデル
- De Bruijnモデル
- Graph.De_Bruijn()
- 参考:ほくそ笑む - de Bruijn Graph を使った de novo アセンブリの発想がすごい件
- ランダムグラフ(ERグラフ)
- Graph.Erdos_Renyi()
- 参考:Bioinformaticsのお勉強 - 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で描画する方法は、いずれまとめようと思う。
次回は、ノードやリンクの追加、編集、削除、参照などの方法などについてまとめるつもり。
コメント
コメントを投稿