隣接行列から最小全域木を作成する

このプログラムは、Pythonのモジュールであるmatplotlib.pyplot、pandas、networkx、mpld3、google.colabの機能を利用して、CSVファイルからネットワークグラフを作成し、最小全域木を計算して可視化するものです。それぞれの行について、以下で解説していきます。

import matplotlib.pyplot as plt
import pandas as pd
import networkx as nx
import mpld3
from google.colab import files
from matplotlib.font_manager import FontProperties

必要なモジュールをインポートしています。


# 日本語フォントを指定する
font_path = '/usr/share/fonts/truetype/fonts-japanese-gothic.ttf'
font = FontProperties(fname=font_path, size=12)

日本語を扱うために、フォントを指定しています。ここでは、日本語フォントのパスを指定し、FontPropertiesを使って、sizeでフォントサイズを指定しています。


# CSVファイルからデータを読み込む
uploaded = files.upload()

google.colabを使って、CSVファイルをアップロードします。

# アップロードしたファイル名を指定してCSVファイルを読み込む
df = pd.read_csv(list(uploaded.keys())[0], index_col=0)

アップロードされたファイル名を指定して、CSVファイルを読み込みます。pd.read_csv()を使って、CSVファイルを読み込み、データをdfに格納しています。また、index_col=0を指定して、最初の列をインデックスとして使用します。

# ネットワークを作成する
graph = nx.from_numpy_array(df.values)

ネットワークを作成するために、networkx.from_numpy_array()を使って、CSVファイルからNumPy配列を作成し、それをネットワークグラフに変換しています。グラフは、ノードとエッジの組み合わせで表されます。

# ノード名を取得する
labels = df.columns.tolist()

ノードのラベルを取得します。CSVファイルの列名を取得して、リストとしてlabelsに格納します。

# 最小全域木を作成する
mst = nx.minimum_spanning_tree(graph)

最小全域木を計算します。networkx.minimum_spanning_tree()を使って、ネットワークグラフの最小全域木を計算し、mstに格納します。

# グラフを描画する
pos = nx.spring_layout(mst)
fig, ax = plt.subplots(figsize=(20, 20))
nx.draw_networkx_nodes(mst, pos=pos,node_size=10, node_color='r')
nx.draw_networkx_edges(mst, pos=pos)

`networkx.spring_layout()`を使って、最小全域木のノードの位置を計算し、`pos`に格納します。次に、`matplotlib.pyplot.subplots()`を使って、`fig`と`ax`を定義します。`figsize`で、図の大きさを設定しています。そして、`networkx.draw_networkx_nodes()`を使って、最小全域木のノードを描画し、`node_size`でノードのサイズを設定しています。また、`node_color`でノードの色を赤に設定しています。さらに、`networkx.draw_networkx_edges()`を使って、最小全域木のエッジを描画します。

ラベルを描画する

for idx, (x, y) in pos.items():
ax.text(x, y, labels[idx], fontproperties=font, ha='center', va='center')

各ノードのラベルを描画します。`matplotlib.axes.Axes.text()`を使って、各ノードのラベルを描画します。`pos.items()`で、各ノードの位置を取得し、`labels[idx]`で、各ノードのラベルを取得しています。また、`ha='center', va='center'`で、ラベルを中央揃えにしています。

plt.axis('off')
plt.savefig('graph.png', dpi=300)
plt.show()

最後に、軸を非表示にして、グラフを保存して表示します。`matplotlib.pyplot.axis()`を使って、軸を非表示にしています。次に、`matplotlib.pyplot.savefig()`を使って、グラフをPNG画像として保存します。また、`dpi`で、画像の解像度を設定しています。最後に、`matplotlib.pyplot.show()`を使って、グラフを表示します。


東京都内ブックオフ店舗の最小全域木

この記事が気に入ったらサポートをしてみませんか?