コロプレス図(塗り分け地図)
R で地図上にデータを表示する方法はいろいろある。でもシェープファイルを用意しなきゃいけなかったりするのがめんどくさい。そんなときは choroplethr パッケージを使うのが楽でいいと思った。
Googleアナリティクスでは(たぶん)IP アドレスからセッション(訪問)がどの地域からあったかっていうデータを取得している。
下図は2015年3月の当ブログのセッション数のコロプレス図です。
首都圏と大阪からのセッションが多い。
ついでにこれを日本全体のインターネット利用人口とくらべてみます。下図が日本の県別インターネット利用人口です。
人口については 統計表一覧 政府統計の総合窓口 GL08020103、インターネット利用率については、総務省|平成24年版 情報通信白書からデータを持ってきた。
やはりこのブログは首都圏、大阪、愛知からのセッションが多い傾向が伺えます。九州では福岡がちょっと多い。福岡は EC 通販企業がけっこうがんばってるらしいので、その辺の影響かなーと思った。
以下にこの図の書き方を記します。
R のコード
#まずはデータの取得#アカウントのオーサライズlibrary("RGoogleAnalytics") query <- QueryBuilder() access_token <- query$authorize()
ここでアクセストークンをコピペ。
(詳しくは RGoogleAnalytics をいじっている - 廿TTを参照。)
###データ抽出時のクエリ### ga <- RGoogleAnalytics() ga.profiles <- ga$GetProfileData(access_token) query$Init(start.date ="2015-03-01", end.date ="2015-03-31", dimensions ="ga:region,ga:country", metrics ="ga:sessions", table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","), access_token=access_token) dat1 <- ga$GetReportData(query)#データ取得完了 datJP <- subset(dat1,country=="Japan")#日本のみ取り出し datJP$region <-tolower(datJP$region)#大文字を小文字に変えてる datJP$region <-sub(" prefecture","",datJP$region)#いらない文字を消してる datJP2 <- datJP[-1,-2]#not set の行と country の列を削除 colnames(datJP2)<- c("region","value")library("choroplethr")library("choroplethrAdmin1")#library("dplyr") data(df_japan_census) data(df_japan_census) df_japan_census <- merge(df_japan_census,datJP2,all=TRUE) sum(df_japan_census[,2])###描画### admin1_choropleth(country.name ="japan", df = df_japan_census, title ="", legend ="sessions")##動作は遅めでぼくのパソコンだと20秒ちょっとかかった
ついでに棒グラフも書いておく。あれこれ凝ったグラフもいいけど、やっぱり折れ線グラフ、棒グラフ(柱状グラフ)、散布図は優れている。
#棒グラフlibrary(ggplot2)library(scales) ggplot(datJP2)+ geom_bar(aes(x=reorder(region,value),y=value),stat="identity")+ coord_flip()+ labs(x="",y="")+ scale_y_continuous(labels = comma)+ theme_bw(15)
#日本全体のインターネット利用人口のほう#ダウンロードしてきたエクセルファイルをちまちま修正してプロット ibrary(xlsx) pop1 <-read.xlsx("~/Downloads/a00400.xls",sheetIndex=1,startRow=19,endRow=66) ut_rate <-read.xlsx("~/Downloads/n4301050.xls",sheetIndex=1,startRow=3,endRow=50) ut_rate[,1] pop1 <-data.frame(pop1$Japan,pop1$X127298*1000,ut_rate[,3]/100) colnames(pop1)<- c("region","pop","ut_rate") pop1$region <- as.character(pop1$region) pop1$region <-tolower(pop1$region) pop1$region <-sub("-ken","",pop1$region) pop1$region <-sub("-to","",pop1$region) pop1$region <-sub("-fu","",pop1$region) df_japan_census$value=(pop1$pop*pop1$ut_rate) admin1_choropleth(country.name ="japan", df = df_japan_census, title ="", legend ="population")