Tutorialに学ぶNetworkXの使い方①|Pythonによる可視化入門 #13

f:id:lib-arts:20191228172252p:plain
#1〜#4まではMatplotlibに関して、#5〜#8まではseabornについて、#9〜#12ではPillowについてまとめました。

Matplotlibの使い方①(plt.plot、plt.scatter、plt.hist)|Pythonによる可視化入門 #1 - lib-arts’s diary

Tutorialに学ぶseabornの使い方①(概要&Visualizing statistical relationships)|Pythonによる可視化入門 #5 - lib-arts’s diary

Tutorialに学ぶPillowの使い方①(Visualizing linear relationships)|Pythonによる可視化入門 #9 - lib-arts’s diary

#13からはPython環境でグラフ(グラフ理論のグラフで、ノードとエッジから構成されます)を描画するツールである、NetworkXについて取り扱います。
#13ではNetworkXの概要と、チュートリアルの"Drawing graphs"よりグラフの描画について取り扱います。

Tutorial — NetworkX 2.4 documentation

以下、目次になります。
1. NetworkXの概要
2. Drawing graphs
3. まとめ


1. NetworkXの概要
1節ではNetworkXの概要について確認します。

f:id:lib-arts:20191228173313p:plain

NetworkX - Wikipedia
まずはWikipediaの内容を確認していきます。冒頭部の記述としては、「NetworkXはグラフやネットワークに関するPythonのライブラリである」と説明されています。

f:id:lib-arts:20191228173602p:plain

また、特徴としては上記のようにまとめられていますが、英語で記載されているので下記で和訳します。

◆ 機能
・無向グラフ(デフォルト)や有向グラフなどのクラス
・グラフのフォーマットの変換を行う機能
・無作為のグラフ構築や、随時ノードやエッジを追加してのグラフの構築ができる機能
・サブグラフやクリーク、k-coresを見つけるための機能
・adjacency, degree, diameter, radius, center, betweennessらを探索する機能
・2Dや3Dでのネットワークの描画機能

Wikipediaについては概ね確認できたので、次にNetworkXのドキュメントを確認します。

f:id:lib-arts:20191228174515p:plain

Overview of NetworkX — NetworkX 2.4 documentation

以下、冒頭部の記述を要約します。

◆ 要約
NetworkXは、複雑系ネットワークの構造(structure)や動作(dynamics)などの生成、操作、研究を行うためのPythonパッケージである。

NetworkXは多くの応用において用いることができる標準的なプログラミングのインターフェースとグラフの実装を提供し、迅速な開発ができる環境を提供している。

NetworkXを用いることでデータフォーマットの形式でネットワークを保存したり読み込んだりできるようになっている。また、無作為のグラフの生成や従来よりある有名な(classic)ネットワークなど、様々なグラフが生成できるようになっている。

また、NetworkXのドキュメントには下記のようにチュートリアルがついているので、こちらについては2節や#14以降で確認していきます。

f:id:lib-arts:20191228175406p:plain

Tutorial — NetworkX 2.4 documentation

ここまでの内容でNetworkXの概要については一通りつかめたと思うので1節はここまでとします。


2. Drawing graphs
2節ではチュートリアルより、"Drawing graphs"について確認していきます。NetworkXのチュートリアルは可視化の項目が後ろの方にあるのですが、全体的に可視化できる方が見やすいので先に取り扱うものとします。

f:id:lib-arts:20191228175934p:plain

Tutorial — NetworkX 2.4 documentation
冒頭部では、「NetworkX本体は描画の機能を保持していないものの、Matplotlibを使うことで基本的な描画を行うことができる」と記載されています。以下具体的に実装を元に確認していきます。

import matplotlib.pyplot as plt
import networkx as nx

G = nx.petersen_graph()
plt.subplot(121)
nx.draw(G, with_labels=True, font_weight='bold')
plt.subplot(122)
nx.draw_shell(G, nlist=[range(5, 10), range(5)], with_labels=True, font_weight='bold')

plt.show()

上記の実行結果は下記のようになります。

f:id:lib-arts:20191228182217p:plain

二つのpetersen graphを生成していることが確認でき、それぞれグラフの描画をnx.drawやnx.draw_shellを用いて行なっていることが確認できます。もう一例確認できればということで、Dodecahedral Graphについても描画してみます。

G = nx.dodecahedral_graph()
shells = [[2, 3, 4, 5, 6], [8, 1, 0, 19, 18, 17, 16, 15, 14, 7], [9, 10, 11, 12, 13]]
nx.draw_shell(G, nlist=shells)

plt.show()

上記の実行結果は下記のようになります。

f:id:lib-arts:20191228182709p:plain

Matplotlibを用いたグラフの描画について大体のイメージがつかめたので、2節はここまでとします。


3. まとめ
#13ではNetworkXの概要とチュートリアルより"Drawing graphs"について取り扱いました。
#14ではチュートリアルの最初から確認していくにあたって、"Creating a graph"から取り扱います。