Rで解析:地図にグラフを追加「leaflet.minicharts」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

「leaflet」パッケージを利用して地図にグラフを追加することができるパッケージの紹介です。なお、グラフは時系列でインタラクティブにも表示が可能です。

使用したデータは「estatapi」パッケージを利用してe-Statから取得し利用しています。「estatapi」パッケージは非常に便利です。また、作成データの出力はRStudioのViewerからExport、Save as Web Pageからが便利です。

・e-Stat公式サイト
 https://www.e-stat.go.jp/SG1/estat/eStatTopPortal.do

・Rで解析:政府統計の総合窓口(e-Stat)データ取得に便利です!「estatapi」パッケージ
 https://www.karada-good.net/analyticsr/r-457

パッケージバージョンは0.2.0。windows 10のR version 3.3.3で動作を確認しています。

スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("leaflet.minicharts")

データの準備

詳細はコマンド、各パッケージのヘルプを確認してください。

#必要なパッケージのインストール
install.packages("estatapi")
install.packages("ggmap")
install.packages("stringi")
install.packages("tidyr")

###都道府県別の人口推移データを取得#####
#取得に便利な「estatapi」パッケージ
#アプリIDの取得はhttps://www.karada-good.net/analyticsr/r-457を参照
library("estatapi")
#アプリIDの入力
AppID <- "&#12450;&#12503;&#12522;ID"
#&#37117;&#36947;&#24220;&#30476;&#21029;&#12398;&#20154;&#21475;&#25512;&#31227;&#12487;&#12540;&#12479;&#19968;&#35239;&#12434;&#21462;&#24471;
estat_getStatsList(appId = AppID, searchWord = "&#37117;&#36947;&#24220;&#30476;&#65292;&#30007;&#22899;&#21029;&#20154;&#21475;&#65293;&#32207;&#20154;&#21475;")
#&#24179;&#25104;28&#24180;10&#26376;1&#26085;&#29694;&#22312;&#20154;&#21475;&#25512;&#35336;&#12398;&#12487;&#12540;&#12479;&#12434;&#21462;&#24471;
GatData <- estat_getStatsData(appId = AppID,
                              statsDataId = "0003171303")
#&#30007;&#22899;&#35336;&#12434;&#38500;&#12367;
ExMainData <- subset(GatData, !(GatData[, 4] == "&#30007;&#22899;&#35336;"))
#&#20840;&#22269;&#12434;&#38500;&#12367;
ExMainData <- subset(ExMainData, !(ExMainData[, 8] == "&#20840;&#22269;"))
#&#32207;&#20154;&#21475;&#12434;&#38500;&#12367;
ExMainData <- subset(ExMainData, !(ExMainData[, 6] == "&#32207;&#20154;&#21475;"))
########

###&#37117;&#36947;&#24220;&#30476;&#12398;&#32239;&#24230;&#32076;&#24230;&#12434;&#21462;&#24471;#####
#&#21462;&#24471;&#12395;&#20415;&#21033;&#12394;&#12300;ggmap&#12301;&#12392;&#12300;stringi&#12301;&#12497;&#12483;&#12465;&#12540;&#12472;
library("ggmap")
library("stringi")
#&#37117;&#36947;&#24220;&#30476;&#21517;&#12434;&#21462;&#24471;
Prefectures <- unique(ExMainData[, 8])
#&#20966;&#29702;
LonLatData <- NULL
for(i in seq(nrow(Prefectures))){
  PrefeLoc <- cbind(Pref = Prefectures[[1]][i], geocode(stri_encode(Prefectures[[1]][i], "", "utf-8"), source = "google"))
  LonLatData <- rbind(LonLatData, PrefeLoc)
}
########

####&#20154;&#21475;&#12487;&#12540;&#12479;&#12395;&#37117;&#36947;&#24220;&#30476;&#12398;&#32239;&#24230;&#32076;&#24230;&#12434;&#20184;&#19982;#####
MainLonLatData <- cbind(rep(as.character(LonLatData[, 1]), each = 5, time = 2),
                           rep(LonLatData[, 2], each = 5, time = 2),
                           rep(LonLatData[, 3], each = 5, time = 2))

#&#12503;&#12525;&#12483;&#12488;&#12487;&#12540;&#12479;
AnaData <- data.frame(ExMainData[, 8], MainLonLatData[, 2], MainLonLatData[, 3],
                         ExMainData[, 4], ExMainData[, 10], ExMainData[, 12])
#&#12487;&#12540;&#12479;&#12521;&#12505;&#12523;&#12434;&#32232;&#38598;
colnames(AnaData) <- c("Pref", "Lon", "Lat", "Sex", "Year", "Value")

#&#12487;&#12540;&#12479;&#12398;&#24418;&#12434;&#22793;&#26356;
library("tidyr")
AnaData <- spread(data = AnaData, key = "Sex", value = "Value")
########

コマンドの紹介

詳細はコマンド、パッケージのヘルプを確認してください。

#&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#35501;&#12415;&#36796;&#12415;
library("leaflet.minicharts")
library("leaflet")

#&#22320;&#22259;&#12398;&#12505;&#12540;&#12473;&#12434;&#20316;&#25104;
BaseMap <- leaflet(width = "100%", height = "400px") %>%
  addTiles() %>% 
  setView(lng = 139.6917064, lat = 35.6894875, zoom = 4)

#&#24179;&#25104;28&#24180;&#12398;&#37117;&#36947;&#24220;&#30476;&#20154;&#21475;&#12434;&#22320;&#22259;&#12395;&#20184;&#19982;
PlotData <- subset(AnaData, AnaData[, 4] == "&#24179;&#25104;28&#24180;")
BaseMap %>%
  addMinicharts(
    lng = PlotData[, 2],
    lat = PlotData[, 3],
    #&#12464;&#12521;&#12501;&#24418;&#24335;&#12434;&#25351;&#23450;:"bar"&#12418;&#25351;&#23450;&#21487;&#33021;
    type = "pie",
    #&#12464;&#12521;&#12501;&#12487;&#12540;&#12479;&#12434;&#25351;&#23450;
    chartdata = PlotData[, 5:6],
    #&#12509;&#12483;&#12503;&#12450;&#12483;&#12503;&#12487;&#12540;&#12479;&#12434;&#35373;&#23450;
    popup = PlotData[, 1],
    #&#12464;&#12521;&#12501;&#12398;&#33394;&#12434;&#25351;&#23450;
    colorPalette = c("#fef0e7", "#f5c971")
  )

#&#26178;&#31995;&#21015;&#12398;&#37117;&#36947;&#24220;&#30476;&#20154;&#21475;&#12434;&#22320;&#22259;&#12395;&#20184;&#19982;
#&#20316;&#25104;&#12487;&#12540;&#12479;&#12391;&#12399;&#22793;&#21270;&#12364;&#12431;&#12363;&#12426;&#12395;&#12367;&#12356;&#12398;&#12391;&#20154;&#21475;&#37096;&#20998;&#12434;&#12521;&#12531;&#12480;&#12512;&#12395;&#22793;&#26356;
AnaData[, 5] <- sample(AnaData[, 5], 235, replace = TRUE)
AnaData[, 6] <- sample(AnaData[, 6], 235, replace = TRUE)
BaseMap %>%
  addMinicharts(
    lng = AnaData[, 2],
    lat = AnaData[, 3],
    type = "bar",
    chartdata = AnaData[, 5:6],
    popup = AnaData[, 1],
    colorPalette = c("red", "blue"),
    #&#26178;&#31995;&#21015;&#12487;&#12540;&#12479;&#12434;&#25351;&#23450;
    time = AnaData[, 4],
    width = 45, height = 45
  )

出力例

各グラフをクリックすると都道府県名が表示されます。
・平成28年の都道府県人口を地図に付与

・時系列の都道府県人口を地図に付与
作成データでは変化がわかりにくいので人口部分をランダムに変更


少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました