3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

地図上に大学間のネットワーク図を書く

Last updated at Posted at 2020-01-26

#1 はじめに
以前の記事で書いた緯度・経度を反映したネットワーク図の描画について、少しずつ方法が分かってきたのでメモしておきます。

今回は、サンプルとして旧帝国大学とMARCH、関関同立の架空のネットワークデータを用意して、地図に記載しました。
参考にさせて頂いた方法は以下のとおりです。

  • 「Rで学ぶデータサイエンス8 ネットワーク分析 第2版」(共立出版・2017年)第11章p302
  • 同著著者の鈴木努先生のブログ記事(「地図上に航空路線を描く」)

#2 データの準備
まず、大学の座標(緯度・経度)とタイプ(国立・私立)を記載したcsvファイル「univ.csv」を用意します。
univ.csv↓
スクリーンショット 2020-01-26 12.09.06.png

また、それぞれの大学の架空のネットワークを記載したcsvファイル「univnetwork.csv」を用意します。(下の部分が見切れています。本当はもう少しあります。)
univnetwork.csv↓
スクリーンショット 2020-01-26 12.08.34.png

#3 コード
以下のとおり記載します。

R
#必要なパッケージの読み込み
library(network)
library(sna)
library(maps)
library(ggplot2)
library(GGally)

#データの読み込み(macで日本語が含まれたcsvデータを読み込む場合、「fileEncoding="CP932"」と記載。)
univs <- read.csv("univ.csv", header = TRUE,fileEncoding="CP932")
rownames(univs) <- univs$univ

reserch <- read.csv("univnetwork.csv", header = TRUE,fileEncoding="CP932")
#読み込んだデータをnetworkオブジェクト「reserch.net」に変換
reserch.net <- network(reserch[,1:2], directed = FALSE)

#networkオブジェクト「reserch.net」に、頂点の属性として、緯度(lat)、経度(lon)、国立・私立の別(type)、次数(degree)を与える。
reserch.net %v% "lat" <- 
 univs[network.vertex.names(reserch.net), "latitude"]
reserch.net %v% "lon" <- 
 univs[network.vertex.names(reserch.net), "longitude"]
reserch.net %v% "type" <- 
 as.character(univs[network.vertex.names(reserch.net), "type"])
reserch.net %v% "degree" <- degree(reserch.net, gmode = "graph") 

#日本地図の描画に関する設定。
jpn <- ggplot(map_data("world2", "japan"), aes(x = long, y = lat)) +
 geom_polygon(aes(group = group), color = "grey65",fill = "grey90")

#ggnetworkmap()関数で地図とネットワークを描画する。(大学の種類(国立・私立)を頂点の色、次数を頂点の大きさと輪郭の色で表す。)
ggnetworkmap(jpn, reserch.net, size = 7, node.group = type,
 node.alpha = 0.6, weight = degree, ring.group = degree,
 great.circle = TRUE,  segment.color = "steelblue", segment.alpha = 0.4)

#4 出力結果
こんな感じで出力されます。
スクリーンショット 2020-01-26 12.27.19.png

#5 今後の課題

  • 凡例の日本語フォント(大学の種類(国立・私立))が表示されないため、表示させたい。
  • 地図が横に伸びている感じがするので直したい。
  • 大学のネットワークを記載したcsvファイル「univnetwork.csv」について、ソシオマトリックスの形式から直接networkオブジェクトに変換したい。

もし方法をご存知の方がいらっしゃいましたら、アドバイス頂けますと幸いです。

#6 追記1
ソシオマトリックスの形式からnetworkオブジェクトへの変換については、以下の方法でできました。
まず、以下のようなソシオマトリックスのcsvファイル「univnetwork2.csv」を用意します。
(各大学が3つのプロジェクト(P1,P2,P3)について、参画している場合は「1」、参画していない場合は「0」とする。)
univnetwork2.csv↓
スクリーンショット 2020-01-26 17.18.35.png

そして、以下のとおり読み込み、行列に変換して転置行列を乗じてnetworkオブジェクトに変換します。

R
univ <- read.csv("univnetwork2.csv", row.names = "univ",fileEncoding="CP932") 
univ <- as.matrix(univ)#行列に変換。
resultuniv <- univ%*%t(univ)#転置行列を乗じる。
reserch.net <- network(resultuniv, directed = FALSE)

あとは、先ほどと同様の方法で出力します。
結果、以下のように出力されます。
スクリーンショット 2020-01-26 12.27.19.png

3
4
2

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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?