GoogleAnalyticsのアクセスデータを日本地図で表現する


はじめに

GoogleAnalyticsのデータを利用し、アクセス者がどこの都道府県や地域から多いか直感的にクライアントや上司に表現したいことがあります。そこで、Rを利用して日本地図を塗りつぶす方法を紹介します。


地図データの準備

Global Administrative Areasへアクセスし日本を選択後Shapefileをダウンロードし、解凍します。解凍したファイルはフォルダごと任意の場所へ保存します。なお、読み込むファイルの名前はJPN_adm1.shpです。

Global Administrative Areas:http://www.gadm.org/country


アクセスデータの準備

画像のようなエクセルファイルを用意してください。ファイル名は分かりやすいものであれば何でも構いません。1行目と2行目の内容は変更すると、地図へのプロットがうまく行きません。変更しないでください。ご注意ください。ご自身のアクセスデータは3行目に入力してください。

ファイルはこちらからダウンロードできます。
AnalyticsPlotData

データの形式


アクセスデータの地図へのプロット

以下のコードをRに入力してください。Rのインストールがまだの方は、この記事を参考ください。また、必要なlibraryがインストールされていない場合はinstall.packages(“ほげほげ”)と入力しlibraryをインストールしてください。

入力するコードです。長いですが全て入力してください。入力すると、地図のデータであるシェイプファイルの読み込みとエクセルのアクセスデータを選択するダイアログが出てきますので、準備したファイルを読み込んでください。

###ライブラリーの読み込み#####
library(ggplot2)
library(maptools)
library(XLConnect)
library(tcltk)
library(RColorBrewer)
########

###シェイプファイルの読み込み#####
ReadData <- paste(as.character(tkgetOpenFile(title = "マップデータを選択",filetypes = '{"shpファイル" {".shp"}}',initialfile = "*.shp")), sep = "", collapse =" ")
MapData <- readShapeSpatial(ReadData)
########

###プロットデータの読み込み#####
plotData <- paste(as.character(tkgetOpenFile(title = "プロットデータのエクセルファイルを選択",filetypes = '{"xlsxファイル" {".xlsx"}}',initialfile = "*.xlsx")), sep = "", collapse =" ")
PlotData <- loadWorkbook(plotData)
MasterPlotData <- readWorksheet(PlotData, sheet = 1)
###アクセス数に大きな差が出ると綺麗に色が塗れないのでデータの標準化。必要が無ければ削除してください。#####
MasterPlotData[ ,3] <- scale(MasterPlotData[ ,3])
########

###シェイプデータとプロットデータの結合#####
MapData@data <- cbind(MapData@data, MasterPlotData)
########

###初期Dirの設定#####
FarstDir <- as.data.frame(strsplit(plotData, "/")) #初期dirpathの取得準備
FarstDir <- paste(FarstDir[1:(nrow(FarstDir)-1),], sep = " ", collapse = "/" ) #初期dirpathの取得
setwd(FarstDir) #初期dir設定
########

###沖縄の地図データを準備#####
OkinawaMap <- MapData[MapData$NAME_1 == "Okinawa",] #抽出
OkinawaMap <- fortify(OkinawaMap) #データフレーム化
########

####沖縄本島のみを抽出#####
OkinawaMapData <- subset(OkinawaMap, OkinawaMap[,1] > 127.5 & OkinawaMap[,1] < 128.5 & OkinawaMap[,2] > 26 & OkinawaMap[,2] < 26.9)
OkinawaMapData[, 1] <- OkinawaMapData[, 1] + 6 #沖縄X軸の描写位置の設定
OkinawaMapData[, 2] <- OkinawaMapData[, 2] + 14 #沖縄y軸の描写位置の設定

########

####沖縄以外の地図データの準備#####
JapanMapData <- MapData[MapData$NAME_1 != "Okinawa",] #沖縄を除く
JapanMapData <- fortify(JapanMapData) #データフレーム化
JapanMapData <- subset(JapanMapData, JapanMapData[,1] > 128.5 & JapanMapData[,2] > 30) #データの抽出
########

###地図データの統合#####
AllJapanDrow <- rbind(JapanMapData, OkinawaMapData) #データの結合
AllJapanDrow[, 7] <- type.convert(AllJapanDrow[, 7]) #おまじない
########

###境界線データの準備#####
BorderLine <- data.frame(DrowXaxis = c(133, 134.5, 135, 135), DrowYaxis = c(39, 39, 41, 43))
########

###色の作成と設定#####
cols <- c("#dcdcdc", "#006400", "#8fbc8f","#90ee90") #色はここで変更できます。色の数も増やせます。
breaks <- seq(0, max(AllJapanDrow[,7]), max(AllJapanDrow[,7]) / 10)
label <- c("低い", character(length(breaks) - 2),"高い")
########

###描写#####
JapanDrow <- ggplot()
JapanDrow <- JapanDrow +
 geom_polygon(data = AllJapanDrow, aes(x = AllJapanDrow[,1], y = AllJapanDrow[,2], group = AllJapanDrow[,6], fill = AllJapanDrow[,7])) +
 geom_path(data = BorderLine, aes(x = BorderLine[,1], y = BorderLine[,2])) +
 scale_fill_gradientn(colours = cols, breaks = breaks, label = label, guide = guide_legend(title = "アクセス頻度", reverse = TRUE)) +
 theme_bw() + theme(axis.ticks = element_blank(), axis.text = element_blank()) + labs(x = "", y = "")
print(JapanDrow)
########

次のような図がプロットされます。お好みに合わせてコードを変更してください。なお、色は描写にあるscale_fill_gradient2のlow, mid, highを変更することで可能です。

 

少しでも、皆様のお役に立ちますように。質問がございましたらaboutからお願いします。記事のアイキャッチはRStudioです。お勧めです。

Rplot04

スポンサードリンク

おすすめコンテンツ


スポンサードリンク