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形式のデータの読込.
    • sep=",":データがカンマで区切られていることを指示.CSV形式のデータをメモ帳やEXCELで開くと,データがカンマで区切られていることがわかる.
    • skip=1:1行目を削除.CSV形式のデータをメモ帳やEXCELで開くと,最初の2行に列名(項目名)が記されている.ここでは,1行目は利用しない.
    • header=TRUE:1行目(削除前の2行目)が列名であることを指示.
    • fileEncoding:文字化けを防止.
#65歳以上高齢者人口割合データの読込
Elderly_pop<-read.csv("FEI_PREF_220523124500.csv",
                      sep=",", skip=1,
                      header=TRUE,
                      fileEncoding="CP932" ) 

データの中身

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

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

データの加工

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

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

データの結合

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

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

3 追加データの可視化

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

  • 今回は色分けにviridisを利用.2

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

4 シェープファイルを利用しない都道府県地図の作成

参考コード

次のウェブサイトのコードを参考にした.

  • ggplot2::geom_tile()で日本地図(アクセス日:2022-10-23)

  • データファイル(JP_plotと名付けられている)の作り方は上記サイトのコードを基本コピーする.

    • 後ほど,geom_tile()を用いて四角形で示された都道府県が2次元(x軸,y軸)の平面に配置され,色分けされる.
    • 沖縄は(x,y)=(1,1)に配置,北海道は(x,y)=(16,14)に配置される.
    • JP_plotには都道府県の識別番号がないため,識別番号(ID)を北海道(1)から順番に加えていく.下記のように加えていく.
JP_plot <- tribble(
    ~ID, ~Prefecture, ~Code, ~x, ~y,
    1, "北海道", "HK", 16, 14,
    2, "青森県", "AO", 15, 11,

JP_plotの中身

  • IDが追加されている.
JP_plot %>% 
  head()

データの結合

  • 今度は65歳以上高齢者人口割合データをJP_plotに結合する.
    • 先ほど,作成したSP_IDからIDを作成.数字列(as.numeric())に戻す.
#IDの作成
Elderly_pop %>% 
  mutate(ID=as.numeric(SP_ID)) -> 
  Elderly_pop1

#IDでデータ結合
Elderlry_map1<-
  left_join(JP_plot, Elderly_pop1, 
            by=c("ID"))

完成地図

  • geom_tile()の説明.

    • widthheightは都道府県の横と縦の長さ.Elderlry_map1に納められているScale変数を利用.
    • colorにより四角(都道府県)の枠の色を白(white)に指定.
  • 65歳以上人口割合(Elderly_pop_rate)をscale_fill_viridis_c()を用いて色分け.

  • この図では,タイトルと出典を図の枠内に収めた.annotate()を利用すると,自由な位置に文字を記入可能.

  • coord_fixed():座標の縦横比の固定.

  • theme()の説明.

    • legend.position:凡例の位置の指示.
    • legend.background:凡例の背景の指示.ここでは,無色指定.
    • panel.grid:グリッド線の指示.ここでは,非表示指定.
    • axis.title:軸タイトルの指示.ここでは,非表示指定.
    • axis.text:軸テキストの指示.ここでは,非表示指定.
    • axis.ticks:軸目盛の指示.ここでは,非表示指定.
ggplot()+
  geom_tile(data=Elderlry_map1, 
            aes(x=x, y=y, width=Scale, height=Scale,
                fill=Elderly_pop_rate), 
            color="white")+
  scale_fill_viridis_c(option="G", direction=-1)+
  geom_text(data=Elderlry_map1, aes(x=x, y=y, label=Prefec), 
            size=2.7, color="white")+ 
  annotate("text", x=1, y=16, 
           label="65歳以上人口割合(2019年度)",
           color="black", size=5, hjust=0)+
  annotate("text", x=10, y=1,
           label="出典:総務省都道府県・市区町村のすがた,
           https://qiita.com/masaki_kubota", 
           color="black", size=3, hjust=0)+
  labs(fill="%")+
  coord_fixed(ratio=1)+
  theme(legend.position=c(0.2, 0.7),
        legend.background=element_rect(fill=NA, color=NA),
        panel.grid=element_blank(), 
        axis.title=element_blank(),
        axis.text=element_blank(),
        axis.ticks=element_blank()) 

参考ウェブサイト

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


  1. 必要に応じてパッケージをダウンロード(install.packages("viridis")し,library(viridis)で呼び出す.↩︎

  2. 必要に応じてパッケージをダウンロード(install.packages("viridis")し,library(viridis)で呼び出す.↩︎