😀

Juliaでネットワーク解析する場合の第一歩

2021/07/06に公開

ネットワーク解析をする際,PythonではNetworkXが用意されているように,Juliaでもネットワーク解析用のモジュールが用意されています.

ググってみたところ,Juliaで複雑ネットワークの解析(可視化)について既にまとめてくださっていた方がいらっしゃったので,それを参考にさせていただきました.
LightGraphsとGraphPlotを用いて,簡単なグラフを自作し表示するまでが今回のゴールです.

https://qiita.com/Keyskey/items/6d910130a733b1c42833




Juliaのバージョンは1.5.1です.
Jupyterlab上で動かしています.

さっそくモジュールを読み込みます.

using LightGraphs
using GraphPlot

ワッツストロガッツ

LightGraphsとGraphPlotを使えば,有名どころであるワッツストロガッツモデルを簡単に作れます.

# ノード数=100,度数=4,繋ぎ変える確率=0.5
g = LightGraphs.watts_strogatz(100,4,0.5)

gplot(g)

これはスモールワールドネットワークの1例ですが,スケールフリーネットワークのバラバシアルバートモデルも用意されているようですし,ランダム正則グラフや完全グラフも用意されてるみたいです.


自作する場合

本題です.
実際に解析する際,データから自分でグラフを作ることもあると思います.
僕の場合,時系列データの情報をグラフに落とし込む手法を実装するために自作する必要があり,上述の複雑ネットワーク解析をしてくださった方は可視化方法をまとめることに焦点を絞っておられていたので,グラフの自作方法については軽く調べました.
調べたといってもドキュメントからすぐに見つかったので大した話ではなかったです.

さっそくグラフを作ってみます.
例としてノードが11個で「ノード1とノード2」,「ノード3とノード4」がつながっている無向グラフを描きます.
特にこのノード数やエッジの位置に意味はないです.

g = SimpleGraph(11)
add_edge(g,1,2)
add_edge(g,3,4)

gplot(g)


次数分布(ヒストグラム)を簡単に作成できる関数も用意されているようなので,もう少し調べてみようと思いました.

もっとうまい方法がある,ネットワーク解析,複雑ネットワークについての知識等々で誤っていることがあったらご指摘いただきたいです.

GitHubで編集を提案

Discussion