Jung使ってみる

Jungを使おうと思ってダウンロードページを見てみる。
http://jung.sourceforge.net/download.html

三つのライブラリが必要とのこと。

・JDK5以上
Collections-Generic
Cern Colt

三つのライブラリをEclipseプロジェクトに置いてビルドパスを通しておく。
そして、Sourceforgeから Jung2.0.1を持ってくる。

jung-samples-2.0.1.jarの中なんとかDemoクラスのmainメソッドを実行すると
デモを見ることができる。個人的にはClusteringDemoが面白かった。









↑媒介性の高い辺を順に取り去っていってクラスタリングできる

さて、以下1からコードを書いてみる。

Jung 2からは Graphクラスは Graph<V, E>てな感じでVertexとEdgeのクラスを
指定できるようだ。VとかEにInterfaceはいらんのですね。
とりあえずGraph<String, String>で進めてみる。


Graph g = new DirectedSparseGraph();
g.addVertex("v1");
g.addEdge("e1", "v1", "v2");
...



のような感じでGraphを作成して、以下のようにViewerをJframeにaddすればOK


JFrame window = new JFrame("Graph");
Layout layout = new FRLayout(g);
VisualizationViewer viewer = new VisualizationViewer(layout);
window.add(viewer);
window.setSize(600, 600);
window.setLocationRelativeTo(null);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);



結果:グラフが表示された。


Vertexにラベルを表示するには?
PluggableRendererはなくなった?→なくなったようだ。
代わりにToStringLabellerをVertexLabelTransformerとしてsetする。
サンプルのコードを参照すれば何でも出来そう。


Renderer renderer = new BasicRenderer();
VisualizationViewer viewer = new VisualizationViewer(layout);
viewer.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
viewer.setRenderer(renderer);



結果:ラベルが表示された。




今日はここまで。


(追記)Jung2を使って測定できる指標について調べ中。

BetweennessCentrality を使うと、媒介中心性を計算してくれる。
Betweenness centrality (媒介中心性)は以前調べていた。

・ある点の媒介中心性は他のすべての点同士の測地線にその点が
 含まれる割合。
 (最短のパスで通ろうとすると、その点を遠ってしまうペアの割合)
 あるネットワークの媒介性の集中度は、その大きさのネットワークが
 持ちうる最大の最大の媒介中心性の分散(スター型)で実際の分散を割ったもの。



KStepMarkovを使うとkステップでのページランクを計算してくれそう。

MarkovCentralityでマルコフ中心性を計算してくれそう。

RandomWalkBetweennessはランダムウオークで情報が伝わる際にどのくらい媒介するかしらべてくれそう。