fc2ブログ
networkxとmatplotlib
複雑ネットワークを解析するプログラムをPythonで書きたいと思っていて、Java言うyFilesのように、グラフとしてのネットワークの特性を扱うライブラリが無かったら、自分で書こうと思っていたけど、ものすごくいいのがありました。それが、networkXで、もしかしたらyFilesより高機能かも。しかも、フリー。yFilesはアカデミアでも20万くらいとるから、Pythonやっぱり万歳か?

利用環境はPython2.4.3で、Windowsのバイナリなら、installはいたって簡単。最新版である0.32を入れました。networkx-0.32.win32.exe
これだけで、ネットワークを扱うプログラムはすぐに書けるようになりますが、描画できる方がいいかと思い、matplotlibも導入。matplotlib-0.87.6.win32-py2.4.exe

>>> import pylab
Traceback (most recent call last):
File "", line 1, in ?
File "C:\Python24\Lib\site-packages\pylab.py", line 1, in ?
from matplotlib.pylab import *
File "C:\Python24\Lib\site-packages\matplotlib\pylab.py", line 197, in ?
import cm
File "C:\Python24\Lib\site-packages\matplotlib\cm.py", line 5, in ?
import colors
File "C:\Python24\Lib\site-packages\matplotlib\colors.py", line 33, in ?
from numerix import array, arange, take, put, Float, Int, where, \
File "C:\Python24\Lib\site-packages\matplotlib\numerix\__init__.py", line 73,
in ?
import numpy
ImportError: No module named numpy

数学ライブラリがが必要なよう。matplotlibのサイトに、

For standard python installations, you will also need to install either Numeric or numarray in addition to the matplotlib installer. matplotlib provides installers for Numeric and numarray users. matplotlib has a numerix setting in the matplotlib rc file (which by default resides in c:\python23\share\matplotlitb\matplotlibrc) and you should make sure this setting corresponds to your preferred array package.

と、書いてるので、先日Rとの連携で入れたNumericをそのまま使うことに。Python界の流れ的には、numarrayが主流になりつつあるようで、matplotlibのデフォルトもそれを使うようになっていますが、
C:\Python24\Lib\site-packages\matplotlib\mpl-data
の、matplotlibrcを編集。
numerix : numpy # numpy, Numeric or numarray
となっているところをコメントアウトし、
numerix : Numeric
に変更することで、無事importできるようになります。

networkxのエライところの1つに、何でもnodeにできるところがあります。
たとえば、以下のようにtupleをnodeにできる。そのまま描画するとわかりやすくていいです。

>>> import networkx as nx
>>> import pylab
>>> g = nx.Graph()
>>> g.add_edge( ('node1',3) , ('node2', 8))
>>> g.add_edge( ('node2',8) , ('node3', 9))
>>> g.add_edge( ('node2',8) , ('node4', 5))
>>> nx.draw( g )
>>> pylab.savefig('net.png')

簡単なネットワークの図

スポンサーサイト



【2006/10/16 15:52】 | Python | トラックバック(0) | コメント(0) | page top↑
<<psycoで高速化 | ホーム | PythonからRを呼ぶ>>
コメント
コメントの投稿














管理者にだけ表示を許可する

トラックバック
トラックバックURL
→http://tanopy.blog79.fc2.com/tb.php/2-5c1ac5e2
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |