【Rstats事始め】データフレームを結合し、新たな地図を作成する

# はじめに
今まではGISはQGISを使っていました。ただ単純に地図を表示することや、分析であれば十分に使えるものでしたが、表現の広がりやデータの前処理、分析、出力を手順化するためにRを使いこなせるようにすることが目的です。
今回はJPGIS2.1をもとに作成した地図に人口統計のデータベースを結合し、色分けすることを整理します。その際、RでCSVデータを読み込み、データフレームを結合することも行います。

**【前回記事】**
[【Rstats事始め】JPGIS2.1をマップ表示する](https://qiita.com/m37335/items/df6f54b97c2ab85299d1)

# コード全体像
```r:JPGIS2map.R
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")
```

## 完成版
![Rplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/61acde89-a145-fd53-43c4-2ba63fafff78.png)


## STEP1 必要なパッケージ

事前にRに以下のパッケージをインストールします。
ggspatialパッケージはsfパッケージをサポートし、スケールや方位を追加することができます。
[ggspatial](https://paleolimbot.github.io/ggspatial/)

dplyrパッケージはデータフレームを効率的に処理するためのパッケージです。
[dplyr](https://dplyr.tidyverse.org/)

```r
install.packages("dplyr")
install.packages("ggspatial")
```

## STEP2 神奈川県人口統計調査結果のダウンロード
ファイルのダウンロード元
[神奈川県の人口と世帯](https://www.pref.kanagawa.jp/docs/x6z/tc30/jinko/jimkotosetai.html)

ページ内の「人口と世帯（令和4年6月1日現在　神奈川県計・県内市区町村）（エクセル：23KB）」からデータをダウンロードします。
ダウンロードしたエクセルファイルはRで読み込みしやすいように前処理を行います。
ここでは市区町村コードが記載されていなかったので、以下のサイトからデータをダウンロードし、結合しました。

[e-Stat 市区町村を探す](https://www.e-stat.go.jp/municipalities/cities/areacode?date_year=2022&date_month=7&date_day=29&pf%5B14%5D=14&ht=&city_nm=&city_kd%5B4%5D=4&city_kd%5B5%5D=5&city_kd%5B6%5D=6&city_kd%5B7%5D=7&op=search&keyword_kd=code&item%5B%5D=htCode&item%5B%5D=todoNm&item%5B%5D=parentCityNm&item%5B%5D=parentCityKana&item%5B%5D=selfCityNm&item%5B%5D=selfCityKana&item%5B%5D=htCodeSDate&item%5B%5D=jiyuId&sort%5B%5D=htCode-asc&choices_to_show%5B%5D=cityType&choices_to_show%5B%5D=kasoFlg&choices_to_show%5B%5D=htCodeKokujiDate&choices_to_show%5B%5D=htCodeKokujiNo&choices_to_show%5B%5D=htCodeEDate&choices_to_sort%5B%5D=kasoFlg&choices_to_sort%5B%5D=htCodeSDate&choices_to_sort%5B%5D=htCodeEDate&choices_to_sort%5B%5D=htCodeKokujiDate&choices_to_sort%5B%5D=htCodeKokujiNo&choices_to_sort_value%5B%5D=htCode-desc&choices_to_sort_value%5B%5D=kasoFlg-asc&choices_to_sort_value%5B%5D=kasoFlg-desc&choices_to_sort_value%5B%5D=htCodeSDate-asc&choices_to_sort_value%5B%5D=htCodeSDate-desc&choices_to_sort_value%5B%5D=htCodeEDate-asc&choices_to_sort_value%5B%5D=htCodeEDate-desc&choices_to_sort_value%5B%5D=htCodeKokujiDate-asc&choices_to_sort_value%5B%5D=htCodeKokujiDate-desc&choices_to_sort_value%5B%5D=htCodeKokujiNo-asc&choices_to_sort_value%5B%5D=htCodeKokujiNo-desc&form_id=city_areacode_form&source=setup&page=)

今回は神奈川県の市区町村コードのみ使用するため、「神奈川県」にチェックを入れた。データはページ下部のダウンロードボタンより、CSVでダウンロードできます。
![市区町村を探す___政府統計の総合窓口-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/4e0db0d0-b2cb-f44b-991c-66efca979d16.png)

# 各コードの内容
まず、各パッケージをロードします。
```r
library(sf)
library(dplyr)
library(ggplot2)
library(ggspatial)
```

次に、先ほどダウンロードした神奈川県人口統計調査結果と以前作成した神奈川県のsfオブジェクトを結合し、新たなデータを作成します。
結合の際には「市区町村コード」をもとにデータフレームを結合します。

```r
# 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
```


新たに作成したデータをもとに地図を作成します。
今回は各市区町村と人口データを結合したため、「総数」をもとに色の塗りつぶしを行います。

```r
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であるため、ヒラギノフォントを指定しました。

```r
# 追加 マップタイトルの設定
  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)](https://www.rdocumentation.org/packages/ggspatial/versions/1.1.6)