1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita100万記事感謝祭!記事投稿キャンペーン開催のお知らせ

NetworkX で始めるネットワーク分析入門:Google Colab でハンズオン

Last updated at Posted at 2025-01-13

はじめに

ネットワーク分析に興味がある人向けに、Python のライブラリ「NetworkX」を使ったグラフ構築や可視化を体験できるハンズオン記事です。今回は、Google Colab 上で実行可能なコードを用いて、初歩的なネットワーク分析の流れを見ていきます。


1. NetworkX とは何か?

  • NetworkX は、Python でネットワーク(グラフ)を扱うためのライブラリ
  • ネットワーク分析用のアルゴリズム(ページランク・最短経路探索・中心性指標など)が豊富に実装されている
  • グラフの構築、操作、描画を手軽に行える
  • 有向グラフ・無向グラフ・多重グラフなどさまざまな種類のグラフに対応

image.png


2. ネットワーク分析と「グラフ」とは?

  • ネットワーク分析
    • ノード(頂点)とエッジ(辺)の集合で表されるネットワーク構造を扱う手法
    • SNS の友達関係やインターネット上のリンク構造、物流ネットワークなど、多岐にわたる分野で応用される
  • グラフ
    • 「点(ノード)」と「線(エッジ)」の集合で表現される構造
    • ノードどうしがどのように繋がっているか、その「つながり」を分析・可視化することで、ネットワーク構造の特徴を調べる

image.png


3. この記事でできること

  • Google Colab 上で NetworkX をインストール・読み込みする
  • 簡単なグラフを作成して可視化する
  • 代表的なネットワーク指標(中心性など)を計算する流れを体験する

4. Google Colab での環境構築・インストール方法

Google Colab では、通常 Python の多くのライブラリがあらかじめインストールされていますが、最新バージョンを利用したい場合や、Colab ランタイムで未インストールのものは以下のように %pip コマンドなどでインストールできます。

# Colab 上で NetworkX をインストール(Colabには標準でインストール済みの場合が多い)
%pip install networkx
  • インストール後の確認
    import networkx as nx
    print(nx.__version__)
    
    バージョン番号が表示されればインストール成功です。

5. NetworkX を使ったハンズオン

以下のコードを Google Colab のセルにコピー&ペーストして実行してください。

5.1 まずは単純なグラフを作成してみる

import networkx as nx
import matplotlib.pyplot as plt

# 無向グラフの作成
G = nx.Graph()

# ノードの追加
G.add_node("A")  # ノード A
G.add_node("B")  # ノード B
G.add_node("C")  # ノード C

# エッジの追加
G.add_edge("A", "B")
G.add_edge("B", "C")
G.add_edge("C", "A")

# ノード数、エッジ数の確認
print("ノード数:", G.number_of_nodes())
print("エッジ数:", G.number_of_edges())

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

image.png

5.2 サンプルデータセットを用いた分析

import networkx as nx
import matplotlib.pyplot as plt

# ランダムな空間グラフを生成
# n=ノード数, radius=近傍ノードを結ぶ半径
G = nx.random_geometric_graph(n=30, radius=0.3, seed=42)

# 座標を取得
pos = nx.get_node_attributes(G, 'pos')

# 可視化
nx.draw(G, pos, node_size=100, with_labels=False)
plt.show()

image.png

5.3 ネットワーク指標を計算してみる

import networkx as nx

# 次数中心性 (degree centrality) の計算
degree_centrality = nx.degree_centrality(G)

# 上位5ノードの表示
sorted_centrality = sorted(degree_centrality.items(), key=lambda x: x[1], reverse=True)
for node, cent in sorted_centrality[:5]:
    print(f"ノード: {node}, 次数中心性: {cent:.3f}")

image.png


6. まとめと応用

  • まとめ

    • NetworkX はネットワーク分析に必要な基本機能やアルゴリズムが一通り揃っており、シンプルなコードで試せる
    • Google Colab を使うことで環境構築が手軽にでき、ブラウザ上で可視化も確認できる
  • 応用例

    • SNS 上のユーザ間関係のネットワーク可視化・中心人物分析
    • 物流・交通ネットワークの最適経路・ボトルネック検出
    • Web 上のハイパーリンク構造分析(ページランクなど)

以上が「NetworkX」を使ったネットワーク分析の第一歩です。

実装例:Notebook
{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# NetworkX \u30cf\u30f3\u30ba\u30aa\u30f3\n", "Google Colab \u4e0a\u3067 NetworkX \u3092\u4f7f\u7528\u3057\u3066\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5206\u6790\u306e\u57fa\u672c\u3092\u5b66\u3076\u305f\u3081\u306e\u30ce\u30fc\u30c8\u30d6\u30c3\u30af\u3067\u3059\u3002"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# NetworkX \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n", "%pip install networkx"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# \u30a4\u30f3\u30dd\u30fc\u30c8\u3068\u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\n", "import networkx as nx\n", "print(nx.__version__)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## \u30b0\u30e9\u30d5\u3092\u4f5c\u6210\u3057\u3066\u53ef\u8996\u5316"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["import networkx as nx\n", "import matplotlib.pyplot as plt\n", "\n", "# \u7121\u5411\u30b0\u30e9\u30d5\u306e\u4f5c\u6210\n", "G = nx.Graph()\n", "\n", "# \u30ce\u30fc\u30c9\u3068\u30a8\u30c3\u30b8\u306e\u8ffd\u52a0\n", "G.add_edges_from([(\"A\", \"B\"), (\"B\", \"C\"), (\"C\", \"A\")])\n", "\n", "# \u30b0\u30e9\u30d5\u306e\u60c5\u5831\u3092\u8868\u793a\n", "print(\"\u30ce\u30fc\u30c9\u6570\uff1a\", G.number_of_nodes())\n", "print(\"\u30a8\u30c3\u30b8\u6570\uff1a\", G.number_of_edges())\n", "\n", "# \u63cf\u753b\n", "nx.draw(G, with_labels=True)\n", "plt.show()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## \u30b5\u30f3\u30d7\u30eb\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u4f7f\u3063\u305f\u5206\u6790"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["import networkx as nx\n", "import matplotlib.pyplot as plt\n", "\n", "# \u30e9\u30f3\u30c0\u30e0\u306a\u7a7a\u9593\u30b0\u30e9\u30d5\u3092\u751f\u6210\n", "G = nx.random_geometric_graph(n=30, radius=0.3, seed=42)\n", "\n", "# \u5ea7\u6a19\u306e\u53d6\u5f97\u3068\u63cf\u753b\n", "pos = nx.get_node_attributes(G, 'pos')\n", "nx.draw(G, pos, node_size=100, with_labels=False)\n", "plt.show()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## \u4e2d\u5fc3\u6027\u306e\u8a08\u7b97"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# \u6b21\u6570\u4e2d\u5fc3\u6027\u306e\u8a08\u7b97\n", "degree_centrality = nx.degree_centrality(G)\n", "\n", "# \u4e0a\u4f4d5\u30ce\u30fc\u30c9\u306e\u8868\u793a\n", "sorted_centrality = sorted(degree_centrality.items(), key=lambda x: x[1], reverse=True)\n", "for node, cent in sorted_centrality[:5]:\n", "    print(f\"\u30ce\u30fc\u30c9: {node}, \u6b21\u6570\u4e2d\u5fc3\u6027: {cent:.3f}\")"]}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10"}}, "nbformat": 4, "nbformat_minor": 5}
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?