1 目的

NipponMapに他のウェブサイトからダウンロードした都道府県別データを加え,可視化.今回は65歳以上人口割合を表現する.また,シェープファイルを使わずに都道府県データ(65歳以上人口割合)を表現する方法を紹介する.

パッケージ:sftidyverseNipponmap

library(sf)
library(tidyverse)
library(NipponMap)

2 データの追加

シェープファイル

作業フォルダ(ディレクトリ)にjpn.shpなどが含まれるshapesと示されるフォルダがあることを前提とする.

  • オブジェクト名をNippon_mapとし,read_sf()でデータを読込.
    • シェープファイルを作業フォルダに移すのが面倒だと思う場合は,Nippon_map<-以降のコマンドをread_sf(system.file("shapes/jpn.shp"), package="NipponMap")にしても可能.この場合,移す作業は必要ない.
    • crs="WGS84"は削除しても目的は達成可能.crs(Coordinate ReferenceSystem,座標参照系)を1984年に定められた世界測地系(World Geodetic System)に投影を意味.
Nippon_map<-read_sf("shapes/jpn.shp", 
                     crs="WGS84")

ダウンロード

  • 都道府県・市区町村のすがた(社会・人口統計体系) > 都道府県データ > データ表示
    • 絞り込み > 地域区分 > 都道府県
    • 地域候補 > 地域候補 > 全て選択 
  • 右の「選択中地域」欄に全て選択(48地域)されていることを確認.今回は全国は必要ないため,0000_全国を選択して,「地域を削除」をクリック.これで「選択中地域」欄は都道府県(47地域)になる.「確定」をクリック.
    • 絞り込み > データの種類:指標データ > 分野:#A 人口・世帯
    • 項目候補 > #A03503 65歳以上人口割合(%) > 確定  
  • ここでは次の形式でダウンロード.
    • 画面右上に表示される「ダウンロード」をクリック.
    • オプションを「ページ上部の選択項目,CSV形式,ヘッダ出力しない,コード出力する,階層コード出力しない,凡例出力しない,注釈を表示するのチェックを外す」とし,CSV形式のデータをダウンロード.
    • 注意:今回は割合を利用しているため,4桁の値はないが,値が4桁以上になる場合,桁区切りのカンマ(,)が入る.この場合は,ダウンロードオプションで「桁区切り(,)を使用しない」にチェックしたほうが無難.

データの読込

  • ダウンロードしたCSV形式のデータは同じフォルダ(上の作業フォルダのこと)に格納.
    • read.csv():CSV形式のデータの読込.オブジェクト名をOlder_popとする.
    • sep=",":データがカンマで区切られていることを指示.CSV形式のデータをメモ帳やEXCELで開くと,データがカンマで区切られていることがわかる.
    • skip=1:1行目を削除.CSV形式のデータをメモ帳やEXCELで開くと,最初の2行に列名(項目名)が記されている.ここでは,1行目は利用しない.
    • header=TRUE:1行目(削除前の2行目)が列名であることを指示.
    • fileEncoding:文字化けを防止.
#65歳以上高齢者人口割合データの読込
Older_pop <- read.csv("FEI_PREF_220523124500.csv",
                        sep=",", skip=1,
                        header=TRUE,
                        fileEncoding="CP932") 

データの中身

パイプ演算子(%>%)の活用.1

  • head()を用いて上から6行までのデータの中身を確認.
Older_pop %>% 
  head()

データの加工

  • rename()を用いてOlder_popの3列目(地域.コード)と6列目(X.A03503_65歳以上人口割合…)の列名変更.
  • 都道府県を識別する列(SP_ID)を用いて,地図データ(Nippon_map)と65歳以上高齢者人口割合データ(Older_pop)の結合準備.
    • データの結合には,列の成分も同じでなくてはならない.
    • mutate():データの列名の変更や追加を指示.
    • Older_popSP_IDは例えば北海道が1000になっている.一方,Nippon_mapでは北海道は1である.そこで,Nippon_mapの表記にそろえるためOlder_popSP_ID1000で割る.
  • その他の注意点
    • Nippon_mapSP_ID<chr>(character:文字列),Older_popSP_ID<int>(integer:数値)のため結合できない.
    • そこで,Older_popSP_IDを文字列に変換.
    • データ名はそのままOlder_popとする.
#列名の変更
Older_pop %>% 
  rename(SP_ID=3, 
         Older_pop_rate=6) ->
  Older_pop

#データ結合のための準備
Older_pop %>% 
  mutate(SP_ID=SP_ID/1000) %>% 
  mutate(SP_ID=as.character(SP_ID)) -> 
  Older_pop

データの結合

シェープファイルである地図データ(Nippon_map)と65歳以上高齢者人口割合データ(Older_pop)を結合.

  • 地図データ(Nippon_map)と65歳以上高齢者人口割合データ(Older_pop)をSP_IDで結合(left_join)し,Older_mapと名付ける.
Older_map<-
  left_join(Nippon_map, Older_pop, 
            by=c("SP_ID"))

3 追加データの可視化

  • 地図の下にNipponMapおよび都道府県・市区町村のすがたを利用したことを記す(caption).

  • 色分けはviridisを利用.

    • "option="G"option="mako"に等しい.
ggplot()+ 
  geom_sf(data=Older_map, 
          aes(fill=Older_pop_rate))+
  scale_fill_viridis_c(option="G", direction=-1)+
  labs(fill="%",  
       caption="NipponMap
       出典:総務省都道府県・市区町村のすがた")+
  ggtitle("65歳以上人口割合(2019年度)")+
  theme_bw()

Rによる地理空間データの可視化


  1. パイプ演算子(パイプ)を挟むことにより,パイプの左にあるデータや結果を右にある式の1つ目の引数として渡せる.左から右へ計算を次々に加えられる便利な道具として広く利用されている.x %>% f()f(x)と,x %>% f(y)f(x, y)と同じ結果を得る.↩︎