はじめに
今まではGISはQGISを使っていました。ただ単純に地図を表示することや、分析であれば十分に使えるものでしたが、表現の広がりやデータの前処理、分析、出力を手順化するためにRを使いこなせるようにすることが目的です。
今回はJPGIS2.1をもとに作成した地図に人口統計のデータベースを結合し、色分けすることを整理します。その際、RでCSVデータを読み込み、データフレームを結合することも行います。
【前回記事】
【Rstats事始め】JPGIS2.1をマップ表示する
コード全体像
library(sf)
library(dplyr)
library(ggplot2)
library(ggspatial)
# library(patchwork)
# ShiftJISのため、ENCODING=CP932をつける
kanagawa <- sf::read_sf("<filepath>/0011_R_GIS/000_map/kanagawa_N03-20220101_14_GML/N03-22_14_220101.shp",
options= c("ENCODING=CP932"),
quiet = FALSE)
# データフレームを出力
kanagawa
# CSVデータの読み込み
kanagawa_Population <- read_csv("<filepath>/0011_R_GIS/0002_DATA/kanagawa_population.csv")
# データフレームの出力
kanagawa_Population
# kanagawaの市区町村コードが文字列となってため、数値型に変換
# 変換したコードは結合のために"市区町村コード"という名の列として追加
kanagawa <- kanagawa %>%
mutate(市区町村コード = as.numeric(N03_007))
# データフレームの出力
kanagawa
kanagawa_map <- left_join(kanagawa, kanagawa_Population, by = "市区町村コード")
# データフレームの出力
kanagawa_map
# 地図の表示
name <- "神奈川県"
kanagawa_map %>%
dplyr::filter(N03_001 == name) %>%
ggplot() +
# 塗りつぶす色を表示
geom_sf(aes(fill = 総数)) +
# 追加 trans = "reverse"を追加することで色を反転することができる
# distillerは連続データ
scale_fill_distiller(name="Population", palette = "Blues", trans = "reverse")+
# 追加 マップタイトルの設定
ggtitle(name, subtitle = paste0("(", length(unique(kanagawa_map$N03_004)), " 市区町村)")) +
# 追加 スケールと方位を表示
annotation_scale(
location = "bl",
width_hint = 0.5,
#pad_x = unit(3, "cm")
) +
#--- add north arrow ---#
annotation_north_arrow(
location = "tr",
#pad_x = unit(0.5, "in"),
#pad_y = unit(0.1, "in"),
style = north_arrow_fancy_orienteering
) +
# 追加 日本語で文字化け(豆腐化)するためにフォント設定
theme_gray (base_family = "HiraKakuPro-W6")
完成版
STEP1 必要なパッケージ
事前にRに以下のパッケージをインストールします。
ggspatialパッケージはsfパッケージをサポートし、スケールや方位を追加することができます。
ggspatial
dplyrパッケージはデータフレームを効率的に処理するためのパッケージです。
dplyr
install.packages("dplyr")
install.packages("ggspatial")
STEP2 神奈川県人口統計調査結果のダウンロード
ファイルのダウンロード元
神奈川県の人口と世帯
ページ内の「人口と世帯(令和4年6月1日現在 神奈川県計・県内市区町村)(エクセル:23KB)」からデータをダウンロードします。
ダウンロードしたエクセルファイルはRで読み込みしやすいように前処理を行います。
ここでは市区町村コードが記載されていなかったので、以下のサイトからデータをダウンロードし、結合しました。
今回は神奈川県の市区町村コードのみ使用するため、「神奈川県」にチェックを入れた。データはページ下部のダウンロードボタンより、CSVでダウンロードできます。
各コードの内容
まず、各パッケージをロードします。
library(sf)
library(dplyr)
library(ggplot2)
library(ggspatial)
次に、先ほどダウンロードした神奈川県人口統計調査結果と以前作成した神奈川県のsfオブジェクトを結合し、新たなデータを作成します。
結合の際には「市区町村コード」をもとにデータフレームを結合します。
# ShiftJISのため、ENCODING=CP932をつける
kanagawa <- sf::read_sf("<filepath>/0011_R_GIS/000_map/kanagawa_N03-20220101_14_GML/N03-22_14_220101.shp",
options= c("ENCODING=CP932"),
quiet = FALSE)
# データフレームを出力
kanagawa
# CSVデータの読み込み
kanagawa_Population <- read_csv("<filepath>/0011_R_GIS/0002_DATA/kanagawa_population.csv")
# データフレームの出力
kanagawa_Population
# kanagawaの市区町村コードが文字列となってため、数値型に変換
# 変換したコードは結合のために"市区町村コード"という名の列として追加
kanagawa <- kanagawa %>%
mutate(市区町村コード = as.numeric(N03_007))
# データフレームの出力
kanagawa
kanagawa_map <- left_join(kanagawa, kanagawa_Population, by = "市区町村コード")
# データフレームの出力
kanagawa_map
新たに作成したデータをもとに地図を作成します。
今回は各市区町村と人口データを結合したため、「総数」をもとに色の塗りつぶしを行います。
kanagawa_map %>%
dplyr::filter(N03_001 == name) %>%
ggplot() +
# 塗りつぶす色を表示
geom_sf(aes(fill = 総数)) +
# 追加 trans = "reverse"を追加することで色を反転することができる
# distillerは連続データ
scale_fill_distiller(name="Population", palette = "Blues", trans = "reverse")+
最後にスケールと方位を設定します。
地図中の日本語はそのままだと文字化けするため、フォントを設定します。
使用しているPCがmacであるため、ヒラギノフォントを指定しました。
# 追加 マップタイトルの設定
ggtitle(name, subtitle = paste0("(", length(unique(kanagawa_map$N03_004)), " 市区町村)")) +
# 追加 スケールと方位を表示
annotation_scale(
location = "bl",
width_hint = 0.5,
#pad_x = unit(3, "cm")
) +
#--- add north arrow ---#
annotation_north_arrow(
location = "tr",
#pad_x = unit(0.5, "in"),
#pad_y = unit(0.1, "in"),
style = north_arrow_fancy_orienteering
) +
# 追加 日本語で文字化け(豆腐化)するためにフォント設定
theme_gray (base_family = "HiraKakuPro-W6")
ggspatialの各種設定は以下のサイトを参考にできます。
ggspatial (version 1.1.6)