【Python】NetworkXを使って簡単なネットワークを可視化してみよう!

  • 2020年5月15日
  • 2020年5月15日
  • Python

こんにちは!

皆さんはネットワークを可視化しようと思ったことはありませんか?

ネットワークを可視化することで、経路問題や、混雑状況などを考えやすくなります。

Python初心者
見てみないと分からなかったことっていっぱいあるよね!

ネットワークの可視化は「NetworkX」というライブラリを使用することで簡単にできますよ。

今回の記事では、以下の内容について紹介します。

  • ネットワークの可視化について
  • NetworkXライブラリについて
  • 簡単なネットワークの可視化
  • 経路の重みづけ

ネットワークの可視化

ネットワークの可視化とは?

ネットワークの可視化とは、ネットワークの状況、例えば、ネットワークの経路や、混雑状況などを可視化することです。

ネットワークというのは、単にインターネットの通信のことだけでなく、運送情報や、道路の交通状況などにも当てはまります。

そのため、ネットワークの可視化は様々なところで使用されます。

ネットワークの可視化の利点

ネットワークを可視化することで、より最適な経路を見つけることができたり、混雑状況に合わせて経路の変更を考えることができるようになります。

また、リアルタイムで可視化することによって障害の発生状況などを可視化することができるため、障害の対応にも役立ちます。

このようなネットワークの可視化をPythonで行うには、「NetworkX」ライブラリを使用します。

予備知識

以下の2つの言葉は覚えておきましょう。

  • ノード:ネットワークの頂点
  • エッジ:ネットワークの

NetworkXライブラリ

NetworkXライブラリとは

「NetworkX」ライブラリは、グラフ理論などに用いられるPythonライブラリです。

NetworkXライブラリのインストール方法

NetworkXライブラリをインストールするには、以下のコマンドを入力しましょう。

pip install networkx

ネットワークを可視化してみよう!

簡単なネットワークの可視化

まずは、2つのノードでできた簡単なネットワークを可視化してみましょう。

ネットワークを可視化する簡単な流れを説明します。

  1. NetworkXでネットワーク図を作成する
  2. ノード、エッジ、ノードの座標を指定する
  3. 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 = nx.Graph()
グラフオブジェクトを作成します。
G.add_node(“A”)
G.add_node(“B”)
作成したグラフオブジェクトに、ノードA、Bを追加します。
G.add_edge(“A”, “B”)
追加したノードA、Bの間にエッジを追加します。
pos = {}
pos[“A”] = (0, 0)
pos[“B”] = (1, 0)
ノードA、Bの座標を指定します。
nx.draw(G, pos, with_labels=True)
この部分で、作成したネットワーク図を描きます。
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()

解説

edge_weight = (1, 10)
エッジの重みを指定します。
順番は、「G.add_edges_from(E)」でエッジを追加した順番です。
今回の場合では、AB間のエッジが1、AC間のエッジが10の重みになります。
nx.draw(G, pos, with_labels=True, width=edge_weight)
widthに重みを指定することで、エッジの線を太くします。

実行結果

重みが大きく設定されているAC間のエッジが太く表示されました。

まとめ

今回の記事では、以下の内容を紹介しました。

  • ネットワークの可視化について
     →可視化することでネットワークの状況を把握可能
  • NetworkXライブラリについて
     →グラフ理論などに用いられるライブラリ
  • 簡単なネットワークの可視化
     →ノード、エッジ、ノードの座標を指定
  • 経路の重みづけ
     →「width」を指定
Python初心者
これで簡単なネットワークなら可視化できるようになったね!
先パイ
ネットワーク情報がデータ化されていれば、複雑なネットワークでも可視化可能じゃよ

ネットワークの可視化を行なって、見てみないと分からないことをたくさん発見できるようになりましょう!