今までネットワークを扱う際にPythonのnetworkxを使っていましたが、igraphがCを使ったパッケージだと聞いて、計算早いんじゃないかと期待してインストールしてみました。
networkxを遅いと感じたことはありませんが、ネットワークシミュレーションもやってみたい、その時Pythonのパッケージを使って楽に早くやりたいのでいろいろ試してみています。ところで、なぜかRではigraphを、pythonではnetworkxを使っている方が多いですね。
以下のサイトを参考にインストール…と思ったのですがこの人はlinuxを使ってました。
Pythonでigraph その1 - インストール編 - since 2010
公式には64bitのWindowsのインストーラーが無いみたいで、pip installもeasy_installも使えませんでした。というわけで以下から非公式のインストーラーを使用。私はpython2.7で64bitなので「python-igraph-0.6.5.win-amd64-py2.7.exe」のインストーラーを使いました。
Python Extension Packages for Windows - Christoph Gohlke
ちなみに公式のはこちら。
というわけで無事にインストール完了!ですがネットワークのプロットで問題がエラーが発生しました。
このサイトにある以下のコードを試してみたんですが、最後のigraph.plot()が"plotting not available"というエラーを吐きます。どうやら依存するパッケージがインストールできてないみたいです。
import igraph
g=igraph.Graph([(0,1),(1,2)])
g.degree()
layout = g.layout("kk")
igraph.plot(g, layout=layout)
今↓のサイトを参考にして依存するパッケージについて調べています。どうやらCairoというパッケージ(python2系ではpy2cairo)みたいなんですが、これをインストールしてもまだ動かない。何か他のモジュールが必要そうですがよくわかりません。
Installing igraph — python-igraph 0.7 documentation
python + igraph "plotting not available" - Stack Overflow
シミュレーションするだけならグラフのプロットは必要無さそうなので、とりあえず放置しています。他の部分では問題なくすんなり使えました。細かい部分では、networkxではネットワークの枝を
import networkx as nx
G = nx.Graph()
G.add_edge(0,1)
でノード2個と枝1本が追加できるのに対して、igraphは最初にノード数を指定する必要があるようです。
import igraph
G = igraph.Graph(2)
G.add_edge(0,1)
networkxとigraphの比較についてはいろいろと記事があります。
Python/NetworkXで簡単ネットワーク分析 - あんちべ!
Comparison between igraph and networkx - Google Groups
ライブラリの速度の比較もいずれやってみたいです。シミュレーションではグラフGのノードnの隣接点のリストを取得する"G.neighbors(n)"(これはnetworkxでもigraphでも同じ)を多用しそうなので、主にその速度について調べるつもりです。