1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-07-28

はじめに

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

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

コード全体像

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

STEP1 必要なパッケージ

事前にRに以下のパッケージをインストールします。
ggspatialパッケージはsfパッケージをサポートし、スケールや方位を追加することができます。
ggspatial

dplyrパッケージはデータフレームを効率的に処理するためのパッケージです。
dplyr

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

STEP2 神奈川県人口統計調査結果のダウンロード

ファイルのダウンロード元
神奈川県の人口と世帯

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

e-Stat 市区町村を探す

今回は神奈川県の市区町村コードのみ使用するため、「神奈川県」にチェックを入れた。データはページ下部のダウンロードボタンより、CSVでダウンロードできます。
市区町村を探す___政府統計の総合窓口-2.png

各コードの内容

まず、各パッケージをロードします。

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)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?