2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NetworkXによるネットワークの作成と可視化

Last updated at Posted at 2021-06-29

動画解説

この記事の内容は私のチャンネルの以下の動画で解説していますので,よろしければ併せてご覧ください.もし今後とも役に立ちそうであればチャンネル登録もよろしくお願いします.

世の中いろいろネットワーク

人間関係(リアルなつながり,バーチャルなつながりのどちらも),コンピュータネットワーク,インターネットなど世の中にある様々なものはネットワークで表現できます.
image.pngimage.png

ネットワークグラフとも呼ばれます)は**頂点(ノード)辺(エッジ,リンク)**で結ばれたものです.
図1.png

NetworkXでネットワーク分析

NetworkXでネットワークを分析します.NetworkXはPythonベースのネットワークの分析のツールです.ネットワークでつながりを抽象化して表現することで科学的な分析が可能となります.友人関係のネットワークを分析することで,多くの人とつながっている人物を特定することが感染症の制御につながるかもしれません.NetworkXを使ったプログラムを作ることで,このようなネットワークの分析を行ってみましょう!

ネットワークの作成と可視化

今回は手始めにネットワークの作成と可視化を行っていきましょう.以降でプログラムを順に書いていきますが,プログラム全体を書いたJupyterのファイルはここからダウンロードできるようにしています.

ネットワーク(グラフ)の生成

image.png

まずはこのような,ノードが3つ,リンクが3本のネットワークを作成して可視化します.これを作るには以下のように書きます.1行目の%matplotlib inlineはJupyter上で画像を表示するためのものです(最近は書かなくても表示してくれるようになりました).import networkx as nxはNetworkXをインポートしてnxという名前で使えるようにしています.次がネットワーク(グラフ)を生成している部分です.G = nx.Graph()と書くと空のネットワークを生成してくれますが,ここではG = nx.Graph([(1, 2), (2, 3), (3, 1)])と書いてノード1と2,ノード2と3,ノード3と1をリンクでつなげたネットワークを生成します.nx.draw()関数にネットワークのオブジェクトGを渡すとネットワークを可視化してくれます.オプションでwith_labels=Trueをつけてノード上に番号が表示されるようにします.

%matplotlib inline
import networkx as nx # NetworkXをインポート

# ネットワーク生成
G = nx.Graph([(1, 2), (2, 3), (3, 1)])
# G = nx.Graph() # 空のグラフを作成する場合
nx.draw(G, with_labels=True) # ラベルをTrueにして番号の可視化

ノードの追加

次にこのネットワークにノードを追加するには以下のように書きます.

G.add_node(4)
nx.draw(G, with_labels=True)

image.png

これでノード4が追加されましたが,まだどことも繋げていないので,孤立ノードとなっています.

リンクの追加

このノード4をノード1と繋げるには以下のように書きます.

# リンクの追加
G.add_edge(1,4)
nx.draw(G, with_labels=True)

image.png

複数のノードとリンクの追加

次に複数のノードやリンクを一気に追加してみましょう.以下のように書きます.

# 複数ノードの追加
n = [5, 6, 7]
G.add_nodes_from(n)

# 複数リンクの追加
e = [(5,6), (3,7), (4,6)]
G.add_edges_from(e)

nx.draw(G, with_labels=True)

image.png

G.add_nodes_from()関数にリスト[5, 6, 7]を渡すことでノード5, 6, 7の3つが追加されました.次に複数リンクを追加するにはどのノードとどのノードを繋げるかということをタプル(例:(5, 6))で書き,タプルのリストをG.add_edges_from()関数に渡すことで複数のリンクが追加されます.この例ではノード5と6,ノード3と7,ノード4と6の間にそれぞれリンクが追加されます.

ノードとリンクの削除

最後に,ノードとリンクの削除を行います.以下のコードを実行するとノード4が削除されます.ノード4はノード1とノード6を橋渡ししているノードだったので,これが削除されることによって,ネットワークが2つの部分ネットワークに分断しました.

# ノードの削除
G.remove_node(4)
nx.draw(G, with_labels=True)

image.png

次に以下のコードを実行することでノード1と2,ノード2と3を繋げていたリンクがそれぞれ削除されます.

# 複数リンクの削除
G.remove_edges_from([(1,2), (2,3)])
nx.draw(G, with_labels=True)

image.png

まとめ

ネットワーク分析ができるPythonパッケージのNetworkXを用いて,今回は,ネットワークの生成と可視化を行ってみました.次の記事では,モデルからネットワークを生成する方法を解説しています.

私のYouTubeチャンネルでは研究で使うPythonシリーズを公開していますので,そちらも是非ご確認ください.

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?