Topic 21
ネットワーク分析の入門:空手クラブデータ × igraph × ggraph
Beginner network analysis in R with Zachary's karate club data
R でネットワーク分析を最短距離で体験したい人向けの入門ページです。追加データを用意しなくても、公開データセットの Zachary の空手クラブネットワークを使って、読み込み → 中心性の計算 → 可視化 → 書き方まで一気通貫で試せます。
ネットワーク分析では、対象をノード(点)、つながりをエッジ(線)として表し、どこにハブがあるか、どの部分にまとまりがあるかを見ます。このページでは、最初の指標として『次数中心性(degree centrality)』を使います。
扱うのは、ネットワーク分析の教科書的な例として広く使われる Zachary の空手クラブデータです。まずはこの1ページで、graph object を tidygraph へ変換し、ggraph で図にする流れを手で動かせるようになることを目標にします。
テキスト分析にも興味がある人は、姉妹ページ『テキスト分析の入門』から、公開テキストの取得・トークン化・単語頻度集計までを続けて試せます。
このページのゴール
- ノード・エッジ・中心性というネットワーク分析の最低限の用語を理解する
- igraphdata の karate データを読み込み、tidygraph へ変換できるようになる
- centrality_degree() で次数中心性を計算し、ハブ候補を確認できるようになる
- ggraph(layout = 'fr') でネットワーク図を描き、保存する流れを再現できる
- 探索的ネットワーク図を、レポートや授業課題でどう書くかの型をつかむ
Learn the idea
まず押さえるポイント
ネットワーク分析は、誰と誰がつながっているか、どこにハブがあるか、どこにまとまりがあるかを扱う分析です。初学者は、まず「ノード」「エッジ」「中心性」の3語が分かれば十分です。
人、組織、単語、Webページなど、関係の主体になる点です。
友人関係、共起、リンク、引用など、ノード間のつながりを表す線です。
どのノードが重要そうかを数量化する指標です。最初は次数中心性から入ると理解しやすくなります。
大きさ・色・位置を使って、ハブやグループの雰囲気を探索的に眺めます。
Basics
このページの分析の考え方
今回のゴールは、高度な推定よりも「R でネットワークを読めるようになること」です。そのため、まずは igraphdata の karate を読み込み、centrality_degree() で次数中心性を計算し、ggraph() でネットワーク図にします。
なぜ karate データなのか
空手クラブのメンバー間の関係を記録した古典的データで、ノード数が多すぎず、ハブや2つのまとまりが見えやすいため、環境テストにも学習にも向いています。
最初に degree を使う理由
次数中心性は「何本の線がついているか」を数える最も基本的な指標です。ハブ候補を直感的に理解しやすく、図のノードサイズとも対応づけやすいのが利点です。
このページで扱う分析の流れ
data(karate)で公開データを読み込むas_tbl_graph()で tidygraph オブジェクトへ変換するactivate(nodes)+mutate(deg = centrality_degree())で次数中心性を追加するggraph(layout = 'fr')で力学的レイアウトのネットワーク図を描く- 上位ノード、橋渡しっぽいノード、まとまりの見え方を言葉にする
Interpretation checks
読むときの注意点
ネットワーク図は便利ですが、図の見た目だけで強く言いすぎないことが大切です。とくに初学者は、レイアウトと中心性の意味を分けて読む習慣をつけると安定します。
レイアウトの座標は実測値ではない
力学的レイアウトの x, y 座標は、関係構造を見やすく配置した結果です。地図の緯度経度のような意味は持ちません。
中心性は指標ごとに意味が違う
degree が高いことは「つながりが多い」ことを表しますが、必ずしも媒介役・権威・影響力そのものを意味するわけではありません。
探索結果は因果効果ではない
ネットワークの見え方は記述的・探索的な出発点です。原因や影響の方向まで主張したい場合は、設計やモデル化が別途必要です。
Data structure
データ構造
表データの分析に慣れていると、graph object は少し特殊に見えます。ですが、tidygraph では「ノード表」と「エッジ表」を切り替える感覚で扱えるので、dplyr を知っていれば入りやすいです。
ノードに入るもの
各メンバーの名前や所属、中心性、コミュニティ番号など、点ごとの情報です。今回のページでは、ここに deg を追加します。
| name | deg | 意味 |
|---|---|---|
| 34 | 17 | もっとも多くのつながりを持つハブ候補 |
| 1 | 16 | もう1つの主要ハブ候補 |
| 33 | 12 | 高い次数を持つノード |
| 3 | 10 | 比較的多くのメンバーと接続 |
エッジに入るもの
どのノードどうしがつながっているか、必要なら重みや方向などの属性です。karate データでは、メンバー間の関係が無向グラフとして表現されています。
- 無向ネットワーク:A と B のつながりに向きがない
- エッジ数:78 本
- ノード数:34 人
- 最初の学習では、重みなし・方向なしの理解で十分
Code
Rコード
下のコードはそのままコピーボタンで持っていき、RStudio へ貼れば動く形にしてあります。まずは 1 本目を実行して、ノード表に deg 列が増えるところを確認してください。
install.packages(c("tidyverse", "igraph", "igraphdata", "tidygraph", "ggraph"))
library(tidyverse)
library(igraph)
library(igraphdata)
library(tidygraph)
library(ggraph)
# 1) データ読み込み
# Zachary の空手クラブネットワーク
data(karate)
karate
# 2) tidygraph で次数中心性(degree)を計算
tg <- as_tbl_graph(karate)
nodes_deg <- tg %>%
activate(nodes) %>%
mutate(deg = centrality_degree()) %>%
as_tibble()
nodes_deg %>%
arrange(desc(deg)) %>%
select(name, deg) %>%
slice_head(n = 10)
set.seed(123)
p <- ggraph(tg, layout = "fr") +
geom_edge_link(alpha = 0.5) +
geom_node_point(aes(size = deg, color = deg)) +
geom_node_text(aes(label = name), repel = TRUE, size = 3) +
scale_color_viridis_c() +
theme_graph()
print(p)
ggsave("karate_plot.png", plot = p, width = 7, height = 5)
コードの最小ポイント
as_tbl_graph()で igraph を tidygraph へ橋渡しします。activate(nodes)を入れると、ノード表に対してmutate()をかけられます。layout = "fr"は、ノード同士の反発と引力を使った見やすい配置のひとつです。set.seed(123)を先に置くと、レイアウトの再現性を保ちやすくなります。
Output
出力の読み方
最初に見るべき出力は、次数中心性つきのノード表です。ここで上位ノードを確認してから図を見ると、何が目立っているのかを言語化しやすくなります。
上位ノードの例
| 順位 | name | degree | 読み方 |
|---|---|---|---|
| 1 | 34 | 17 | 最も多くの接続を持つハブ候補 |
| 2 | 1 | 16 | もう一方の主要ハブ候補 |
| 3 | 33 | 12 | 高い接続性を持つノード |
| 4 | 3 | 10 | 比較的中心に位置しやすいノード |
| 5 | 2 | 9 | つながりの多いサブハブ候補 |
図でも大きく濃く表示されやすいので、最初に注目するノードになります。
34 と並んで目立つノードで、ネットワークが一極集中ではないことが分かります。
上位ノードが複数あるので、局所的なまとまりや橋渡しの候補を次に見ていけます。
有意差検定ではなく、「どの構造が見えているか」を整理する段階と考えると扱いやすくなります。
Figure reading
ネットワーク図をどう読むか
この図では、ノードの大きさと色で degree を表しています。位置そのものよりも、どのノードが大きいか、どのあたりにまとまりがあるか、まとまり同士をつなぐノードがどこかを見ると読みやすくなります。
図1 空手クラブネットワークの可視化(ノードサイズと色は次数中心性を表す)
Figure 1. Network visualization of the karate club graph, where node size and color indicate degree centrality.
大きいノードはハブ候補
34 と 1 は次数が高く、図でも強く目立ちます。まずはこの 2 つを中心に構造を読むと把握しやすくなります。
近さは概形として読む
近くに配置されたノードは関係の強いまとまりとして描かれやすいですが、レイアウトの乱数や設定で位置は多少変わります。
まとまりの境目に注目
2つの塊の間に位置するノードは、橋渡しや境界の候補として次の分析で詳しく見たくなります。
ラベルの出しすぎに注意
課題提出用の図では、全ラベルではなく上位ノードだけに絞ると読みやすさが上がります。
Writing template
レポート文例
ネットワーク分析の最初のレポートでは、「どのデータを使ったか」「どの中心性を見たか」「図から何が読み取れたか」を簡潔に述べる書き方が安全です。
日本語
Zachary の空手クラブネットワーク(34ノード、78エッジ)を用いて、次数中心性にもとづく探索的ネットワーク分析を行った。次数中心性の高いノードは 34(degree = 17)と 1(degree = 16)であり、いずれもネットワーク内で多くの成員と接続していた。Fruchterman-Reingold 型のレイアウトによる可視化では、2つの比較的密なまとまりと、その間をつなぐ少数のノードが観察された。図1は、ノードサイズと色が次数中心性に対応しており、ハブ候補の位置づけを直感的に確認しやすい。
図1 空手クラブネットワークの可視化(ノードサイズと色は次数中心性を表す)
English
An exploratory network analysis was conducted using Zachary's karate club graph (34 nodes, 78 edges). Degree centrality identified nodes 34 (degree = 17) and 1 (degree = 16) as the most highly connected hubs in the network. A Fruchterman-Reingold style layout suggested two relatively dense substructures connected by a small number of boundary nodes. In Figure 1, node size and color represent degree centrality, making the most connected actors easy to identify.
Figure 1. Visualization of the karate club network, where node size and color indicate degree centrality.
Common mistakes
よくあるミス
layout を固定しない
set.seed() を入れないと、毎回図の配置が変わることがあります。教材やレポートでは再現性のために seed を固定しておくと安心です。
見た目の近さをそのまま解釈する
図上で近いからといって、必ずしも「心理的距離が近い」「強く影響し合う」とまでは言えません。
中心性を1種類だけで断定する
degree は入口として優れていますが、橋渡し役を見るなら betweenness、重要な隣人につながる強さを見るなら eigenvector なども検討します。
FAQ
FAQ
なぜ data(karate) だけで使えるのですか?
igraphdata は igraph 用のデータセット集で、karate もその中に含まれています。公開データなので、追加ファイルなしで練習を始められます。
自分の CSV からも同じことはできますか?
できます。まずは from 列と to 列を持つエッジリストから igraph::graph_from_data_frame() を作り、その後 as_tbl_graph() へ渡す流れが分かりやすいです。
ラベルが重なって見づらいです。
上位ノードだけラベルを出す、ノード名を短くする、図を大きめに保存する、といった調整が有効です。
text analysis はどこから始めればいいですか?
このページの参考資料に tidytext・quanteda・stm の入口をまとめています。まずは unnest_tokens() と stopword 除去を体験するところから始めると入りやすいです。
代替手法
代替手法・次の一歩
degree を入口にしたあと、研究質問に応じて次の指標や枠組みに進むと、ネットワーク分析の見通しがよくなります。あわせて、文章データを扱うテキスト分析へ横展開する道筋もここで押さえておくと便利です。
betweenness / eigenvector centrality
橋渡し役に注目したいときは betweenness、影響力のあるノードとつながっている強さを見たいときは eigenvector centrality が候補になります。
コミュニティ検出
図で見える「塊」をもう少し定量化したいときは、Louvain などのコミュニティ検出を試すと、まとまりの境界を整理しやすくなります。
statnet / ERGM
探索的可視化の先で、ネットワーク生成の仕組みや仮説検証に踏み込みたいときは statnet 系のモデルへ進みます。
テキスト分析へ進む
単語の共起や頻度、トピックを扱いたい場合は、テキスト分析ページ を入口に、tidytext でトークン化、quanteda で DFM、stm でトピックモデルという流れへ進むのが定番です。
テキストの共起ネットワーク
語どうしのつながりを扱う場合は、共起ネットワークの発展ページ へ進むと、pairwise_count() と ggraph の流れがつながります。
参考資料
参考資料
このページは、実装の入口を優先して、公式ドキュメントと一次資料に近いページを中心に並べています。まずは igraph / tidygraph / ggraph の3本を押さえ、その後に tidytext や quanteda へ進むと流れがつながります。
ネットワーク分析の基本
tidygraph はネットワークをノード表・エッジ表のように扱う tidy API を提供しており、中心性計算を mutate() に組み込みやすいのが学習上の利点です。
可視化とレイアウト
レイアウトは図を見やすく配置するアルゴリズムです。座標そのものを実測値のように読まず、構造の概形を掴むために使います。
テキスト分析の次の一歩
text を one-token-per-row へ変換する tidytext と、tokens → dfm の高速前処理に強い quanteda は、ネットワーク分析と並んで計算社会科学の入口として相性の良い組み合わせです。
データ操作の復習
activate(nodes) のあとに mutate() / filter() を使う場面では、dplyr の基本操作がそのまま役に立ちます。
運営と利用上の注意
このページの位置づけ
本サイトのトピックページは、Rによるデータ分析の学習支援とレポート作成の補助を目的としたオリジナル解説です。サンプルデータとコードは再現練習用に作成しているため、実データを扱う際には研究計画・前提条件・欠測・外れ値・尺度水準をあらためて確認してください。
編集方針
ページ本文は、標準的な統計手法、Rの公式ドキュメント、一次資料に近い参考文献を優先して整理しています。更新や訂正の方針は編集方針ページで公開しています。