コロプレス図 (Covid-19累積死亡者数)

概要

国土交通省の国土数値情報を用いて,都道府県単位のコロプレス図を描画するための地図を作成する。

まず,三重大学の奥村先生のホームページを参考に,コロプレス図用のgeojsonファイルを作成する。国土数値情報のシェープファイルはサイズが大きいので,都道府県単位に集約し,さらにデータ量を1000分の1に減らす。手元でやらなくても奥村先生が完成したgeojsonファイルを公開してくれているので,それをダウンロードして使っても良い。

geojsonファイルに都道府県単位のデータをマージすることで,コロプレス図が作成できる。ここでは,例として厚労省のオープンデータから都道府県別のCovid-19の累積死亡者数を入手し,コロプレス図を作成する (厚労省のオープンデータは新型コロナの5類移行で更新終了)。

地図の準備

# 三重大学の奥村晴彦先生のホームページを参考にしている (感謝)
# https://okumuralab.org/~okumura/stat/shape.html

library(tidyverse)
library(sf)

# ファイルのダウンロード先ディレクトリ作成
dir.create("files", showWarnings = F)

# 国土交通省の国土数値情報ダウンロード>行政区域データ
# https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-v3_0.html
#  から全国の行政区域データ(shapeファイルを入手する)
# 470MBほどある

download.file(
  "https://nlftp.mlit.go.jp/ksj/gml/data/N03/N03-2021/N03-20210101_GML.zip",
  destfile = "files/N03-20210101_GML.zip",
  method = "curl")

# zipファイルの解凍
  # Rにもunzip()関数が用意されているが,
  # フォルダの区切にバックスラッシュが使われているとうまく展開できないので,
  # ターミナルで展開
system("unzip files/N03-20210101_GML.zip -d files/")

### 以上の作業は,必ずしもRでやらなくても,
### ブラウザでファイルをダウンロードして解凍してもOk

# シェープファイルの読み込み
japan <- read_sf("files/N03-20210101_GML/N03-21_210101.shp")

# 行政区域を都道府県に集約
japan <- japan %>%
  mutate(code = as.numeric(substr(N03_007, 1, 2)))
japan_prefectures <- aggregate(japan, list(japan$code), head, n = 1)

# データの縮小
# km単位に変換 → 1km精度で簡略化 → 緯度経度単位に戻す

japan_prefectures <- japan_prefectures %>% 
  st_transform("+proj=utm +zone=54 +datum=WGS84 +units=km") %>% 
  st_simplify(dTolerance=1) %>% 
  st_transform("+proj=longlat +ellps=GRS80") %>% 
  select(code, N03_001, geometry)

# できあがったデータをgeojson形式で保存 400kbくらいまで小さくなった
st_write(japan_prefectures, "japan_prefectures.geojson")
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(sf)
Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.4.0; sf_use_s2() is TRUE
# geojsonファイルの読み込み
japan_prefectures <- st_read("japan_prefectures.geojson")
Reading layer `japan_prefectures' from data source 
  `/home/rstudio/projects/public/japan_prefectures.geojson' using driver `GeoJSON'
Simple feature collection with 47 features and 2 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 122.9339 ymin: 24.04961 xmax: 153.9861 ymax: 45.55682
Geodetic CRS:  WGS 84
# ggplot2を用いてプロット
japan_prefectures %>% 
  ggplot() +
  geom_sf()

コロプレス図

2022/05/08までの都道府県別Covid-19累積死亡者数を地図にプロットしてみる。

# Covid-19の累積感染者数のコロプレス図を作成

library(tidyverse)
library(sf)

# 作成したgeojsonファイルの読込み
# 以下のように奥村先生のホームページからダウンロードしても良い
# japan_prefecture = read_sf("https://okumuralab.org/~okumura/stat/data/japan.geojson")

japan_prefectures <- read_sf("japan_prefectures.geojson")

# Covid-19 都道府県別累積死亡者数データのダウンロード (厚労省のオープンデータ)

covid_deaths <- read.csv("https://covid19.mhlw.go.jp/public/opendata/deaths_cumulative_daily.csv")

# 最新の日付のデータを抽出して地理情報とマージ
# Covid-19のオープンデータの更新は2023/5/9で終了 (5/9は都道府県によって欠損しているので5/8のデータを利用)

covid <- cbind(
  japan_prefectures,
  covid_deaths[nrow(covid_deaths) - 1,] %>% 
  select(  -ALL) %>% 
  pivot_longer(cols = -Date)
)

covid %>%
  ggplot(aes(fill = value)) +
  geom_sf() +
  scale_fill_continuous("死亡者数(累積)", low = "white", high = "red")