目的

小地域統計による人口変化の可視化同様に2年分のデータを用いて国勢調査の小地域(町丁・字等別,ポリゴン)に人口変化及び人口変化率を示す.ただし,今回は例えば小地域の境界線の変更によって,小地域の数(形状)が変更した場合(鹿児島市)を取り扱う.

ライブラリ:sftidyversescales

library(sf)
library(tidyverse)

#muted()利用
library(scales) 

小地域の人口の可視化

境界データのダウンロード

#2020年
Kagoshima_shi_map20<-
  read_sf("A002005212020DDSWC46201/r2ka46201.shp")

#2010年 
Kagoshima_shi_map10<-
  read_sf("A002005212010DDSWC46201/h22ka46201.shp")

一般調査区の抽出

水面調査区(海上ポリゴン)が目立つため,一般調査区のみ抽出(filiter()).

Kagoshima_shi_map20 %>% 
  filter(HCODE==8101) ->
  Kagoshima_shi_map20

Kagoshima_shi_map10 %>% 
  filter(HCODE==8101) ->
  Kagoshima_shi_map10

データ結合の準備

後ほど,KEY_CODE列を用いて境界データと統計データを結合する.ただし,境界データはKEY_CODEが文字データ型,統計データは数値データ型のため結合できない.

#KEY_CODEを数値データ型に
Kagoshima_shi_map20 %>%
  mutate(KEY_CODE=as.numeric(KEY_CODE)) ->
  Kagoshima_shi_map20

Kagoshima_shi_map10 %>%
  mutate(KEY_CODE=as.numeric(KEY_CODE)) ->
  Kagoshima_shi_map10

統計データのダウンロード

#2020年(文字化け防止のため,オプションを加えておく)
Kagoshima_pop20<-
  read.table("tblT001081C46/tblT001081C46.txt",
                  header=TRUE, sep=",", skip=1,
                  fileEncoding="CP932")

#列名の変更(1,3列目)
Kagoshima_pop20 %>%
  rename("KEY_CODE"=X, "CITYNAME"=X.2) ->
  Kagoshima_pop20

#2010年
Kagoshima_pop10<-
  read.table("tblT000572C46/tblT000572C46.txt",
             header=TRUE, sep=",", skip=1,
             fileEncoding="CP932")

#列名の変更(1,3列目)
Kagoshima_pop10 %>%
  rename("KEY_CODE"=X, "CITYNAME"=X.2) ->
  Kagoshima_pop10
Kagoshima_pop20 %>%
  filter(CITYNAME=="鹿児島市") ->
  Kagoshima_shi_pop20

Kagoshima_pop10 %>%
  filter(CITYNAME=="鹿児島市") ->
  Kagoshima_shi_pop10

人口総数

小地域の人口は「人口総数」の列に含まれているが,文字データ型情報.

Kagoshima_shi_pop20 %>%
  mutate(人口総数=as.numeric(人口総数)) ->
  Kagoshima_shi_pop20

Kagoshima_shi_pop10 %>%
  mutate(人口総数=as.numeric(人口総数)) ->
  Kagoshima_shi_pop10

データ結合1

各年の境界データと統計データを結合.Kagoshima_shi#と名付ける.

Kagoshima_shi10<-
  left_join(Kagoshima_shi_map10, Kagoshima_shi_pop10, 
            by=c("KEY_CODE")) 

Kagoshima_shi20<-
  left_join(Kagoshima_shi_map20, Kagoshima_shi_pop20, 
            by=c("KEY_CODE")) 

可視化

各年の人口総数を可視化.

#広木の選別
Kagoshima_shi20 %>%
  filter(KEYCODE1>="201329001" & KEYCODE1<="201329003") %>%
  summarise() -> 
  Hiroki

#2010年の人口(fig1)
fig1<-
  ggplot()+
  geom_sf(data=Kagoshima_shi10, aes(fill=人口総数))+
  scale_fill_viridis_c(option="G", direction=-1)+
  labs(fill="人")+
  ggtitle("2010年")+
  coord_sf(datum=NA)+
  theme_bw()+
  theme(legend.position="bottom")

#2020年の人口(fig2),黄色い枠が「広木」
fig2<-
  ggplot()+
  geom_sf(data=Kagoshima_shi20, aes(fill=人口総数))+
  scale_fill_viridis_c(option="G", direction=-1)+
  geom_sf(data=Hiroki, fill="NA", color="yellow", size=0.35)+
  labs(fill="人")+
  ggtitle("2020年")+
  coord_sf(datum=NA)+
  theme_bw()+
  theme(legend.position="bottom")

#図を並べるため  
library(patchwork) 

#図を並べる
fig1+fig2+
  plot_layout(ncol=2) 

人口変化の可視化

データ結合2

小地域統計による人口変化の可視化で例とした小田原市の場合,2010年から2020年の間に(おそらく)小地域の数に変更なし.このため,2010年と2020年の国勢調査の行数(←小地域の数)が揃い,cbind()でデータを横方向に結合でき,人口変化が計算可能に.

Kagoshima_shi1020<-
  st_join(Kagoshima_shi10, Kagoshima_shi20)

nrow(Kagoshima_shi1020)
## [1] 2257

データクリーニング

可能な限り,同一の小地域の人口変化を調べたい.

#数値型データに変更
Kagoshima_shi1020 %>%
  mutate(KEYCODE1.x=as.numeric(KEYCODE1.x),
         KEYCODE1.y=as.numeric(KEYCODE1.y)) ->
  Kagoshima_shi1020

#識別番号の差 
Kagoshima_shi1020 %>%
  mutate(d=KEYCODE1.y-KEYCODE1.x) ->
  Kagoshima_shi1020

#識別番号が等しい小地域だけ選別
Kagoshima_shi1020 %>%
  filter(d=="0") ->
  Kagoshima_shi1020

nrow(Kagoshima_shi1020)
## [1] 374

人口変化

#人口変化
Kagoshima_shi1020 %>%
  mutate(diff_pop=人口総数.y-人口総数.x) ->
  Kagoshima_shi1020

完成図

完成図の可視化.

#人口変化の可視化
ggplot()+
  geom_sf(data=Kagoshima_shi1020, aes(fill=diff_pop))+
  scale_fill_gradient2(low=muted("blue"), 
                       mid="gray92", 
                       high=muted("red"))+
  labs(fill="人",
  caption="出典:国土交通省国土数値情報
総務省統計局平成22年,令和2年国勢調査")+
  ggtitle("人口変化(2010年ー2020年)")+
  theme_bw()+
  theme(plot.caption=element_text(hjust=0))

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