こんにちは!
皆さんはネットワークを可視化しようと思ったことはありませんか?
ネットワークを可視化することで、経路問題や、混雑状況などを考えやすくなります。
ネットワークの可視化は「NetworkX」というライブラリを使用することで簡単にできますよ。
今回の記事では、以下の内容について紹介します。
- ネットワークの可視化について
- NetworkXライブラリについて
- 簡単なネットワークの可視化
- 経路の重みづけ
ネットワークの可視化
ネットワークの可視化とは?
ネットワークの可視化とは、ネットワークの状況、例えば、ネットワークの経路や、混雑状況などを可視化することです。
ネットワークというのは、単にインターネットの通信のことだけでなく、運送情報や、道路の交通状況などにも当てはまります。
そのため、ネットワークの可視化は様々なところで使用されます。
ネットワークの可視化の利点
ネットワークを可視化することで、より最適な経路を見つけることができたり、混雑状況に合わせて経路の変更を考えることができるようになります。
また、リアルタイムで可視化することによって障害の発生状況などを可視化することができるため、障害の対応にも役立ちます。
このようなネットワークの可視化をPythonで行うには、「NetworkX」ライブラリを使用します。
予備知識
以下の2つの言葉は覚えておきましょう。
- ノード:ネットワークの頂点
- エッジ:ネットワークの辺
NetworkXライブラリ
NetworkXライブラリとは
「NetworkX」ライブラリは、グラフ理論などに用いられるPythonライブラリです。
NetworkXライブラリのインストール方法
NetworkXライブラリをインストールするには、以下のコマンドを入力しましょう。
pip install networkx
ネットワークを可視化してみよう!
簡単なネットワークの可視化
まずは、2つのノードでできた簡単なネットワークを可視化してみましょう。
ネットワークを可視化する簡単な流れを説明します。
- NetworkXでネットワーク図を作成する
- ノード、エッジ、ノードの座標を指定する
- Matplotlibで作成した図を可視化する
Matplotlibのインストールも忘れずに行っておきましょう。
では早速プログラムを見ていきましょう。
以下のプログラムは、ノードAとノードBをつないで表示するプログラムです。
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_node("A")
G.add_node("B")
G.add_edge("A", "B")
pos = {}
pos["A"] = (0, 0)
pos["B"] = (1, 0)
nx.draw(G, pos, with_labels=True)
plt.show()
解説
G.add_node(“B”)
pos[“A”] = (0, 0)
pos[“B”] = (1, 0)
with_labels=Trueとすることで、ノード名を表示します。
実行結果
エッジに重みをつけてみよう
エッジに重みをつけることで、経路を太く表示することができます。
エッジに重みをつけると、どの経路がよく使用されているかがわかるようになりますね。
以下のプログラムは、エッジに重みをつけて表示するプログラムです。
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
N=["A", "B", "C"]
E= [("A", "B"),("A", "C")]
G.add_nodes_from(N)
G.add_edges_from(E)
pos = {}
pos["A"] = (0, 0)
pos["B"] = (1, 0)
pos["C"] = (1, 1)
edge_weight = (1, 10)
nx.draw(G, pos, with_labels=True, width=edge_weight)
plt.show()
解説
順番は、「G.add_edges_from(E)」でエッジを追加した順番です。
今回の場合では、AB間のエッジが1、AC間のエッジが10の重みになります。
実行結果
重みが大きく設定されているAC間のエッジが太く表示されました。
まとめ
今回の記事では、以下の内容を紹介しました。
- ネットワークの可視化について
→可視化することでネットワークの状況を把握可能 - NetworkXライブラリについて
→グラフ理論などに用いられるライブラリ - 簡単なネットワークの可視化
→ノード、エッジ、ノードの座標を指定 - 経路の重みづけ
→「width」を指定
ネットワークの可視化を行なって、見てみないと分からないことをたくさん発見できるようになりましょう!