CSVデータをシェープファイルに結合する | R, GIS

この記事では、Rで、CSVデータをシェープファイルに結合する方法について説明します。

記事の概要です。
まず、シェープファイルとCSVファイルを読み込みます。
次に、dplyrのleft_joinを使って両者を結合します。
シェープファイルとCSVファイルで結合に使うカラムの名前が異なるため、left_joinのby引数には名前付きベクトルを渡します

left_join(shp, d, by = c("N03_004" = "市区町村"))

プログラム全体を示します。

## シェープファイル読み込み
library(sf)
shp <- st_read("./data/N03-20150101_08_GML", options = "ENCODING=SHIFT-JIS")

## CSVファイル読み込み
d <- read.csv("./data/kekkahyo1_ibaraki_2015-2045.csv")

## 結合
library(dplyr)
shpCsv <- left_join(shp, d, by = c("N03_004" = "市区町村"))

## 確認
head(shpCsv)


ミサキ
ミサキ

left_joinを始めとした結合系の関数、私の使用頻度は高いです。
基本的な関数なので、ぜひ覚えて下さい!
また、この記事は、QGISのこちらの記事と対応しています。


この記事で使用したRとパッケージのバージョンを記載しておきます。
バージョンが異なると、動作や表示も若干異なる場合があるからです。

  • R 3.6.1
  • sf 0.7-6
  • dplyr 0.8.3



CSVデータをシェープファイルに結合する

まず、シェープファイルとCSVファイルを読み込みます

もしシェープファイルが無ければ、こちらを参考にダウンロードして下さい。
CSVデータは、こちら(URL)からダウンロードできます。

## シェープファイル読み込み
library(sf)
shp <- st_read("./data/N03-20150101_08_GML", options = "ENCODING=SHIFT-JIS")

## CSVファイル読み込み
d <- read.csv("./data/kekkahyo1_ibaraki_2015-2045.csv")

では、両者を結合します

結合に使うカラムは市町村名のカラムです。

市町村名のカラムは、シェープファイルでは「N03_004」、CSVファイルでは「市区町村」という名前になっており、両者で異なります

そのため、名前付きベクトルを使って以下のように結合します

## 結合
library(dplyr)
shpCsv <- left_join(shp, d, by = c("N03_004" = "市区町村"))

もし、CSVファイルでも市町村名のカラム名がシェープファイルと同じ「N03_004」だった場合、結合は以下のようになります。

## 結合に使うカラム名が同じ(N03_004)場合
library(dplyr)
shpCsv <- left_join(shp, d, by = c("N03_004"))

では、結合したデータを確認します。

## 確認
head(shpCsv)
Simple feature collection with 6 features and 14 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: 140.3217 ymin: 36.30072 xmax: 140.639 ymax: 36.50865
epsg (SRID):    NA
proj4string:    +proj=longlat +ellps=GRS80 +no_defs
  N03_001 N03_002 N03_003 N03_004 N03_007 コード 都道府県 cy2015 cy2020 cy2025
1  茨城県       2      水戸市   08201   8201   茨城県    100  100.0   99.0
2  茨城県       1      日立市   08202   8202   茨城県    100   95.2   89.4
3  茨城県       1      日立市   08202   8202   茨城県    100   95.2   89.4
4  茨城県       1      日立市   08202   8202   茨城県    100   95.2   89.4
5  茨城県       1      日立市   08202   8202   茨城県    100   95.2   89.4
6  茨城県       1      日立市   08202   8202   茨城県    100   95.2   89.4
  cy2030 cy2035 cy2040 cy2045                       geometry
1   97.2   94.8   91.8   88.3 POLYGON ((140.3894 36.46392...
2   83.0   76.4   69.8   63.4 POLYGON ((140.6364 36.47452...
3   83.0   76.4   69.8   63.4 POLYGON ((140.6301 36.48646...
4   83.0   76.4   69.8   63.4 POLYGON ((140.6305 36.49491...
5   83.0   76.4   69.8   63.4 POLYGON ((140.6388 36.49908...
6   83.0   76.4   69.8   63.4 POLYGON ((140.6353 36.50807...

「コード」から「cy2045」までのカラムがCSVデータです。
結合は特に問題なく行われたようです。

今回は以上です。

おわりに

お疲れさまでした。
結合に関しては、QGISとRで大きな差は感じませんでしたが、いかがでしょうか?
次回は、今回結合したデータを使い、数値に基づく地図の色分けを行ないます。
では。


YouTube: ミサキさん

問い合わせ先
Mail: caprico.aries@gmail.com
Twitter: https://twitter.com/caprico_aries(無言フォローもお気軽に)

コメント

  1. […] 記事の概要です。まず、前回の記事を参考に、シェープファイルとCSVファイルを結合します。次に、色分けに使う値(2020年の推計人口)をグループ分けします。グループ分けには、変化が大きいところで区切る「自然分類」を用います。そして描画時、geom_sfのfill引数にグループ分けした数値のカラムを渡すと、数値(グループ)に基づいたポリゴンの色分けがなされます。 […]

  2. […] CSVデータをシェープファイルに結合する | R, GIS […]

タイトルとURLをコピーしました