トップページ | ひとつ上のページ | 目次ページ | このサイトについて | ENGLISH

データサイエンス教室

ネットワークの書き方と描き方

ネットワーク の理論は、いわゆる「ネットワーク」のようなものでなくても、当てはまります。

それぞれの分野には、特有の分析方法がありますが、比較的共通しているのが、 ネットワークを数字で表現する方法(書き方)と、絵で表現する方法(描き方)になります。 特に、絵については、これだけでネットワークの特徴がわかるので、 ネットワーク分析 の初歩であるだけでなく、とても重要なツールです。

数字による表現は、いろいろな視点での集計をする時に使います。

ネットワークの2つのタイプ

一番簡単なタイプ

ネットワークの一番簡単なタイプは、辺と頂点の組み合わせだけで描かれています。

辺の長さや太さ、頂点の大きさに意味を持たせる場合もありますが、 それよりも、辺と頂点の結び付き方が注目される場合が多いようです。

例の場合は、AとB、BとCの間には、つながりがあります。 A、B、Cを頂点で表し、つながりを「辺」で表しています。

A、B、Cのネットワークを、数値で表現すると、下記の行列(表)の形になります。 この数値と絵は、見た目は違いますが、同じことを表現しています。
ネットワークの絵 ネットワークの数値表現

ちなみに、行列の対角線上の数値は、AからA、BからB、CからCのつながりを表しますが、例の場合は、つながりはないので、「0」になっています。 一般的に、対角線上が1になるネットワークは少ないですが、 例えば、コンピュータのハブの場合、一本のケーブルの両端を同じハブに接続すると、 「AからA」のような事が実際にできます。

方向のあるタイプ

簡単なモデルでは、例えば、AからBと、BからAには、違いを考えていません。 しかし、現実には、方向に意味がある事があります。 そのような場合は、矢印で表現します。 向きに意味があるグラフは、「有向グラフ」と呼ばれます。 意味がないグラフ(矢印を使わないグラフ)は、「無向グラフ」と呼ばれます。

また、数値の表現も、行列で0の場所が増えます。
ネットワークの絵 ネットワークの数値表現

有向グラフは、 連関図ベイジアンネットワーク など、 因果関係 の分析(原因分析)でよく使います。

Rのigraphの使用例

ネットワークの絵を描けるフリーソフトは、いろいろあるようです。 ここでは、応用がいろいろできそうなigraphについて。

前提条件

※ フォルダの場所や、ファイル名等は、一例です。
(1) パソコンに、R、をダウンロードして、インストールする。
(2) igraphをダウンロードして、Rのモジュールとして使えるようにしておく。
(3) Cドライブに「Rtest」というフォルダを作る。
(4) 1行目と1列目に、頂点の名前が書いてある数値データを、「NetSample.csv」というcsvファイルにして、「Rtest」フォルダに置く。

下記の例は、 サンプルファイル をRtestフォルダにおいて、実行しています。

シンプルグラフ

library(igraph) # igraphを読み込み
setwd("C:/Rtest") # 作業用ディレクトリを変更
DM <- read.table("NetSample.csv", header=T, row.names=1, sep=",") # データを読み込み。拡張子は、列名、行名の読み込みと、カンマ区切りの指定。
DM.mat = as.matrix(DM) # データフレームを行列として読み込み
DM.g<-graph.adjacency(DM.mat,weighted=T, mode = "undirected") # グラフ用のデータを作る
plot(DM.g) # プロットする

グラフの例

重み付きグラフ

最後の行を下記にすると、データの数値で太さが変わります。 行列の対角成分の値が違う場合、大きい方の太さになります。

plot(DM.g, edge.width=E(DM.g)$weight) # プロットする

グラフの例
データの数値をそのまま太さの情報に使うので、 負の数は使えませんし、正の数だとしても、0から1の範囲になっていると、数値の違いを太さの違いとして見えるようにできません。 例えば、 多変量データの相関分析 のページのグラフでは、データを絶対値にした後に10倍することで、 -1から1の範囲にあるデータを、0から10の範囲にあるデータに変換してから、グラフにしています。

重み付き有向グラフ

最後の2行を下記にすると、矢印付きのグラフになります。 下の例では、片方しか向きのない矢印が1本あり、他は両方に向きがある様子がわかります。

DM.g<-graph.adjacency(DM.mat,weighted=T, mode = "directed") # グラフ用のデータを作る
plot(DM.g, edge.width=E(DM.g)$weight) # プロットする

グラフの例



多変量データの相関分析

参考文献

ネットワーク分析 Rで学ぶデータサイエンス 8」 鈴木努 著 共立出版 2009
ネットワークのグラフの描き方について、Rのsnaやigraphを使った計算方法が書いてあります。


テキストデータの統計科学入門 」 金明哲 著 岩波書店 2009
テキストマイニング の本です。第6章がネットワーク分析になっています。
この章の内容は、 https://www1.doshisha.ac.jp/~mjin/R/61/61.html (著者ご本人のホームページ)に、ほぼ同じ内容があります。 igraphの初歩的な使い方が、丁寧にまとまっています。



順路 次は データリテラシー

Tweet