読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Python】python-igraphをインストールしました でもグラフのプロットだけできない

今までネットワークを扱う際に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

 

ちなみに公式のはこちら。

python-igraph 0.6.5

 

というわけで無事にインストール完了!ですがネットワークのプロットで問題がエラーが発生しました。

 

このサイトにある以下のコードを試してみたんですが、最後の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でも同じ)を多用しそうなので、主にその速度について調べるつもりです。