【Rstats事始め】JPGIS2.1をマップ表示する


# はじめに
今まではGISはQGISを使っていました。ただ単純に地図を表示することや、分析であれば十分に使えるものでしたが、表現の広がりやデータの前処理、分析、出力を手順化するためにRを使いこなせるようにすることが目的です。
今回は国土数値情報からJPGIS2.1をダウンロードし、地図に表示するところを整理します。

# コード全体像
```r:JPGIS2map.R
library(sf)

# ShiftJISのため、ENCODING=CP932をつける
kanagawa <- sf::read_sf("<file path>/kanagawa_N03-20220101_14_GML/N03-22_14_220101.shp",
                        options= c("ENCODING=CP932"),
                        quiet = FALSE)

# データフレームを出力
kanagawa

# 地図の表示
kanagawa %>%
  dplyr::filter(N03_003 == "横浜市") %>%
  ggplot2::ggplot() +
  ggplot2::geom_sf()
```

## 完成版
![yokohama.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/505d9eea-e384-f618-8df1-8ed673b07d02.png)

## STEP1 必要なパッケージ

事前にRに以下のパッケージをインストールする。
sfパッケージは空間データを読み込みや書き込み、座標参照系の変換および変換を行うためのパッケージです。

[Simple Features for R](https://github.com/r-spatial/sf/#installing)
```r
install.packages("sf")
```
**CHEATSHEET**
![sf.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/72f76767-32d3-45a4-b824-5708fc78d220.jpeg)
![sf2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/21138c66-5360-bef3-a725-d96fbf21aa22.jpeg)




## STEP2 JPGIS2.1のダウンロード
ファイルのダウンロード元
[国土数値情報ダウンロードサービス](https://nlftp.mlit.go.jp/ksj/index.html)

![国土数値情報ダウンロードサービス-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/ce3b331f-fba3-e949-ee54-c7e7b25e5248.png)
![国土数値情報ダウンロードサービス-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/3be0247a-87ed-9c80-ac7a-64c340d72eb9.png)

「行政区域」のリンク先から任意の都道府県と年度を選択し、データをダウンロードする。

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

次に、ファイルやデータベースのベクトルデータセットを sf オブジェクトとして読み込む。
ファイルはshpファイルのみ読み込むが、ファイル単体ではなく、フォルダごと読み込む点に注意する。

```r
kanagawa <- sf::read_sf("<file path>/kanagawa_N03-20220101_14_GML/N03-22_14_220101.shp",
                        options= c("ENCODING=CP932"),
                        quiet = FALSE)
```

読み込んだデータフレーム
`kanagwa`で出力する。

【出力内容】

```r
Simple feature collection with 1286 features and 5 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 138.9158 ymin: 35.12849 xmax: 139.8358 ymax: 35.6729
Geodetic CRS:  JGD2011
# A tibble: 1,286 × 6
   N03_001  N03_002 N03_003 N03_004  N03_007                                           geometry
   <chr>    <chr>   <chr>   <chr>    <chr>                                   <MULTIPOLYGON [°]>
 1 神奈川県 NA      NA      NA       NA      (((139.6316 35.1285, 139.6316 35.12849, 139.6316 …
 2 神奈川県 NA      横浜市  鶴見区   14101   (((139.676 35.45629, 139.6759 35.45598, 139.6758 …
 3 神奈川県 NA      横浜市  鶴見区   14101   (((139.677 35.45814, 139.6768 35.45763, 139.6767 …
 4 神奈川県 NA      横浜市  鶴見区   14101   (((139.6947 35.46528, 139.6948 35.46432, 139.6949…
 5 神奈川県 NA      横浜市  鶴見区   14101   (((139.7071 35.47232, 139.7071 35.47226, 139.7071…
 6 神奈川県 NA      横浜市  鶴見区   14101   (((139.7111 35.4856, 139.7111 35.48551, 139.711 3…
 7 神奈川県 NA      横浜市  鶴見区   14101   (((139.7146 35.48601, 139.7148 35.48568, 139.715 …
 8 神奈川県 NA      横浜市  鶴見区   14101   (((139.6775 35.53974, 139.6776 35.5397, 139.6779 …
 9 神奈川県 NA      横浜市  神奈川区 14102   (((139.6583 35.46009, 139.6582 35.46009, 139.6582…
10 神奈川県 NA      横浜市  神奈川区 14102   (((139.656 35.46359, 139.656 35.46356, 139.6559 3…
# … with 1,276 more rows
```


最後に地図を表示する。

```r
# 地図の表示
kanagawa %>%
  dplyr::filter(N03_003 == "横浜市") %>%
  ggplot2::ggplot() +
  ggplot2::geom_sf()
```

`dplyr::filter`の部分でフィルターをかけることができます。
ここを`N03_001 == "神奈川県"`に変更すると以下のマップができます。
![kanagawa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/55dc08df-2d1d-4bb1-e237-a02536184a9e.png)