NetworkXの使い方と使い道まとめ|Pythonでグラフ分析を始めよう

NetworkXは、Pythonでネットワークやグラフ構造を扱うための強力なライブラリです。データ分析やネットワーク理論、SNSの友達関係解析、物流経路の最適化など、幅広い分野で活用されています。この記事では、NetworkXの使い方や具体的な使い道、初心者でもすぐに始められる基本操作をわかりやすくまとめます。


NetworkXとは

NetworkXは、Pythonでグラフやネットワークを作成・操作・分析するためのライブラリです。ノード(頂点)とエッジ(辺)で構成されるグラフを簡単に扱えるのが特徴で、最短経路探索やコミュニティ検出、ネットワークの可視化など、さまざまな分析が可能です。


NetworkXのインストール方法

まずはNetworkXをインストールしましょう。Python環境が整っていれば、コマンドプロンプトやターミナルで以下のコマンドを実行します。

pip install networkx

Matplotlibも一緒にインストールしておくと、グラフの可視化が簡単にできます。


NetworkXの基本的な使い方

グラフオブジェクトの作成

NetworkXでは、無向グラフと有向グラフの2種類が扱えます。

import networkx as nx

G = nx.Graph()      # 無向グラフ
DG = nx.DiGraph()   # 有向グラフ

ノードとエッジの追加

ノードやエッジは簡単に追加できます。エッジを追加すると、存在しないノードも自動で追加されます。

G.add_node(1)
G.add_nodes_from([2, 3])
G.add_edge(1, 2)
G.add_edges_from([(2, 3), (3, 1)])

グラフの可視化

NetworkXはMatplotlibと連携して、グラフを画像として表示できます。

import matplotlib.pyplot as plt

nx.draw(G, with_labels=True)
plt.show()

無向グラフと有向グラフのサンプル

最後に、無向グラフと有向グラフの両方を同時に作成し、それぞれを並べて可視化するサンプルを紹介します。

import networkx as nx
import matplotlib.pyplot as plt

# 無向グラフの作成
G = nx.Graph()
G.add_nodes_from([1, 2, 3])
G.add_edges_from([(1, 2), (2, 3), (3, 1)])

# 有向グラフの作成
DG = nx.DiGraph()
DG.add_nodes_from(['A', 'B', 'C'])
DG.add_edges_from([('A', 'B'), ('B', 'C'), ('C', 'A')])

# 両グラフを並べて描画
plt.figure(figsize=(12, 5))

plt.subplot(121)
nx.draw(G, with_labels=True, node_color='lightblue', edge_color='gray')
plt.title('Undirected Graph')

plt.subplot(122)
nx.draw(DG, with_labels=True, node_color='lightgreen', edge_color='gray', arrows=True)
plt.title('Directed Graph')

plt.show()

実行結果

このサンプルでは、左に無向グラフ、右に有向グラフが表示されます。ノードやエッジの追加、可視化方法の違いも一目で分かります。


NetworkXの使い道

ネットワーク分析

SNSの友達関係や企業間の取引ネットワークなど、現実世界のネットワークを分析できます。たとえば、Zacharyの空手クラブネットワークを分析する例があります。

最短経路探索

ダイクストラ法や幅優先探索など、複雑なアルゴリズムも簡単に利用できます。

import networkx as nx

G = nx.Graph()
G.add_edges_from([("S","A",{'weight':4}), ("S","B",{'weight':3}), ("A","G",{'weight':6}),("B","G",{'weight':4}),("A","B",{'weight':4})])

print(nx.dijkstra_path(G, "S", "G"))  # 最短経路
print(nx.dijkstra_path_length(G, "S", "G"))  # 最短距離

コミュニティ検出

ネットワーク内のグループ(コミュニティ)を見つけることもできます。

グラフの保存・読み込み

作ったグラフはGML形式などで保存・読み込みが可能です。

nx.write_gml(G, 'graph.gml')
G = nx.read_gml('graph.gml')

NetworkXの便利な機能

  • サブグラフの作成:指定したノードだけのサブグラフを作成
  • 隣接ノードの取得:特定ノードの隣接ノードを取得
  • パスの長さの計算:2ノード間の最短距離を計算
  • グラフの重み付け:エッジに重みを付けてネットワークを表現

NetworkXを使うメリット

  • 簡単にグラフを扱える:自分でグラフ構造を実装する必要がなく、効率的にデータ分析ができます。
  • 豊富なアルゴリズム:最短経路探索やコミュニティ検出など、多くのアルゴリズムが用意されています。
  • 可視化が簡単:MatplotlibやPyGraphvizと連携して、グラフを視覚的に分析できます。

まとめ

NetworkXは、Pythonでグラフやネットワーク分析を始めたい方に最適なライブラリです。インストールも簡単で、基本的な操作から高度な分析まで幅広くカバーしています。SNSの友達関係分析や物流経路の最適化、コミュニティ検出など,ビジネスや研究の現場で役立つ場面がたくさんあります。

これからグラフ分析を始めたい方は、ぜひNetworkXを使ってみてください!

にいやん

出身 : 関西 居住区 : 関西 職業 : 組み込み機器エンジニア (エンジニア歴13年) 年齢 : 38歳(2022年11月現在) 最近 業務の効率化で噂もありPython言語に興味を持ち勉強しています。 そこで学んだことを記事にして皆さんとシェアさせていただければと思いブログをはじめました!! 興味ある記事があれば皆さん見ていってください!! にほんブログ村