SNSのつながり、仕事の人間関係、単語の結びつきなど、複雑な関係性を目に見える形にしたいと考えたことはないだろうか。
そんな時、R言語で最も頼りになるのがigraphパッケージである。この記事では、Rを使い始めたばかりの読者に向けて、igraphの基本から、少し高度な「グループ分け」や「重要度の可視化」までをステップバイステップで解説する。
igraphとは?
igraphは、ネットワーク(グラフ)を扱うための世界的に有名なライブラリである。RだけでなくPythonやC言語でも利用されており、以下のような特徴を持つ。
- 高速: 数万件のデータも一瞬で処理が可能。
- 多機能: 単なる描画にとどまらず、統計的な分析メニューが極めて豊富。
- 標準的: ネットワーク分析の論文やビジネスレポートで最も広く使われているツールの一つである。
ネットワーク図の基本:点(ノード)と線(エッジ)
ネットワーク図は、主に2つの要素で構成される。
- ノード(Node / Vertex): 分析したい対象(人、モノ、場所など)。
- エッジ(Edge): 対象同士のつながり(友人関係、取引、リンクなど)。
データの準備:どんな形にすればいい?
igraphで図を描くには、「誰と誰がつながっているか」という2列のリスト(エッジリスト)を用意するのが最も効率的である。
# パッケージの読み込み
if (!require(igraph)) install.packages("igraph")
library(igraph)
# 例:AさんとBさんがつながっている、というリスト
edges <- data.frame(
from = c("A", "A", "B", "C", "D", "E", "F"),
to = c("B", "C", "C", "D", "E", "A", "A")
)
基本の描画:まずは描いてみる
用意したデータを、igraph専用のオブジェクト形式に変換してプロットする。
# 1. データフレームをグラフ形式に変換
g <- graph_from_data_frame(edges, directed = FALSE)
# 2. 描画
plot(g)

これだけでも図は出力されるが、デフォルトのままでは視覚的な情報が乏しい。ここからが分析の醍醐味である。
【応用】グループ(コミュニティ)を見分ける
ネットワークの中には、「仲良しグループ」のようなまとまりが存在することがある。これを自動で見つける手法をコミュニティ検出と呼ぶ。
グループはどうやって決まる?
アルゴリズムが、「内側のつながりが濃く、外側へのつながりが薄い」部分を特定する。これにより、膨大なデータの中から、現実のサークルや部署に相当する集団を浮き彫りにできる。
# コミュニティ検出(Walktrap法)を実行
community <- cluster_walktrap(g)
# グループごとに色を割り当て
V(g)$color <- community$membership
plot(g, main = "グループごとに色分けした図")

【応用】重要人物(ハブ)を大きくする
ネットワーク内で「影響力が強いノード」を特定することも重要である。これには中心性(Centrality)という指標を用いる。
- 次数中心性: どれだけ多くの線が集まっているか(=顔が広いか)を示す指標。
# つながりの数(次数中心性)を計算
centrality <- degree(g)
# つながりが多いほどノードを大きくして描画
plot(g, vertex.size = centrality * 10, main = "重要度でサイズを変更した図")

igraphの利点・限界・使い所
| 項目 | 特徴 |
| 利点 | 処理が非常に高速。コミュニティ検出や中心性計算のアルゴリズムが充実している。 |
| 限界 | 標準の図は「静止画」である。マウス操作で動かせる図を作りたい場合はnetworkD3などが適している。 |
| 使い所 | データの構造を学術的・論理的に分析したい時や、出版・報告用の高品質な図を作成したい時。 |
まとめ
Rのigraphを使えば、一見バラバラに見えるデータから「隠れたグループ」や「キーマン」を可視化することが可能である。
- エッジリスト(ペアの表)を作成する
graph_from_data_frameでオブジェクトに変換する- コミュニティ検出や中心性を用いて見た目を整える
この3ステップをマスターするだけで、ネットワーク分析の第一歩を踏み出せる。まずは身近なデータから試してみてほしい。
おすすめ書籍
誰も教えてくれなかった 医療統計の使い分け〜迷いやすい解析手法の選び方が,Rで実感しながらわかる!




コメント