盆暗の学習記録

データサイエンスを中心として,日々学んだことの備忘録としていく予定です。初心者であり独学なので内容には誤りが含まれる可能性が大いにあります。

RでGIS:日本の地理空間情報を取得する方法まとめ

日本の地理空間情報を取得する方法をまとめました。R向けです。

1. Webサイトから手動でダウンロードする

国土数値情報ダウンロードサービス

  • http://nlftp.mlit.go.jp/ksj/index.html
  • 日本の細かな地理空間情報を取得するならここが一番です。
  • 「行政区域」「中学校区」「浸水想定区域」など様々な区分で整理された日本の地理空間情報がまとめられており,ダウンロードできます。
  • 過去の行政区域情報もダウンロードできます。

e-stat 統計GIS

詳しいダウンロードの仕方はこちらの記事にあります↓

nigimitama.hatenablog.jp

Global Administrative Areas

  • http://www.gadm.org/country
  • 各国のシェープファイル(やR用のrdsファイル)をダウンロードできるサイトです
  • 地域区分の細かさが異なる3種のデータが用意されています
    • JPN_0:日本全図
    • JPN_1:都道府県レベル
    • JPN_2:市区町村レベル

全国市区町村界データ | ESRIジャパン

2. パッケージやAPIを使ってダウンロードする

{jpndistrict}:国土数値情報の2015年の行政区域データを簡単に取得する

国土数値情報の2015年の行政区域データを簡単に取得できるパッケージです。

主な関数は

  • jpn_pref(pref_code, admin_name, ...)都道府県データの抽出
    • pref_code:都道府県コード
    • admin_name:都道府県名
  • jpn_cities(jis_code, admin_name):市区町村データの抽出
    • jis_code:都道府県コード or 市区町村コード
    • admin_name:自治体名
# load libraries
library(tidyverse)
library(sf)
# ggplot setting
windowsFonts(Yu = windowsFont("Yu Gothic UI")) 
g <- ggplot()+theme_set(theme_grey(base_size = 14, base_family = "Yu"))
# {jpndistrict} --------------------------------
# install.packages("jpndistrict")
library(jpndistrict)

# 都道府県データの読み込み
jpn_pref(pref_code = 11) %>% head()
## Simple feature collection with 6 features and 4 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: 139.5405 ymin: 35.8319 xmax: 139.7011 ymax: 35.96612
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
## # A tibble: 6 x 5
##   pref_code prefecture city_code city                             geometry
##   <chr>     <chr>      <chr>     <chr>                      <POLYGON [ツー]>
## 1 11        埼玉県     11101     さいたま市 ~ ((139.5477 35.93408, 139.5443 35~
## 2 11        埼玉県     11102     さいたま市 ~ ((139.6176 35.96495, 139.627 35.~
## 3 11        埼玉県     11103     さいたま市 ~ ((139.6378 35.92285, 139.6428 35~
## 4 11        埼玉県     11104     さいたま市 ~ ((139.6672 35.96454, 139.6733 35~
## 5 11        埼玉県     11105     さいたま市 ~ ((139.6211 35.87062, 139.6213 35~
## 6 11        埼玉県     11106     さいたま市 ~ ((139.6049 35.88834, 139.6106 35~
# 市区町村データの読み込み
jpn_cities(jis_code = c(33103, 33104, 33205)) %>% head()
## Simple feature collection with 3 features and 2 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: 133.4448 ymin: 34.29839 xmax: 134.1228 ymax: 34.78309
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
## # A tibble: 3 x 3
##   city_code city                                                  geometry
##   <chr>     <chr>                                      <MULTIPOLYGON [ツー]>
## 1 33103     岡山市 東区~ (((133.9958 34.61302, 133.9902 34.61591, 133.9857 3~
## 2 33104     岡山市 南区~ (((133.9109 34.64389, 133.9131 34.64387, 133.9131 3~
## 3 33205     笠岡市    (((133.5929 34.37393, 133.5942 34.37341, 133.5935 3~
# plot
ggplot(jpn_pref(admin_name = "栃木県"), aes(fill = city))+
  geom_sf()

f:id:nigimitama:20181108012858p:plain

{kokudosuuchi}:国土数値情報APIから簡単にDLする

{jpndistrict}よりも幅広い年度・区分から地理空間情報をダウンロードできます。

  • getKSJSummary():取得可能なデータの概要を表示
  • getKSJURL():データのURLとメタデータを取得する
  • getKSJData():データをダウンロードしてread_sf()で読み込む
  • translateKSJData()シェープファイルの変数名をわかりやすいものに変える
# {kokudosuuchi} ------------------------------
# install.packages("kokudosuuchi")
library(kokudosuuchi)

# getKSJSummary():取得可能なデータの概要を表示
getKSJSummary()
## # A tibble: 108 x 5
##    identifier title                field1           field2       areaType
##    <chr>      <chr>                <chr>            <chr>        <chr>   
##  1 A03        三大都市圏計画区域   政策区域         大都市圏     2       
##  2 A09        都市地域             国土(水・土地) 土地利用     3       
##  3 A10        自然公園地域         地域             保護保全     3       
##  4 A11        自然保全地域         地域             保護保全     3       
##  5 A12        農業地域             国土(水・土地) 土地利用     3       
##  6 A13        森林地域             国土(水・土地) 土地利用     3       
##  7 A15        鳥獣保護区           地域             保護保全     3       
##  8 A16        人口集中地区         政策区域         -            3       
##  9 A17        過疎地域             政策区域         条件不利地域 3       
## 10 A18        半島振興対策実施地域 政策区域         条件不利地域 3       
## # ... with 98 more rows
# getKSJURL():データのURLとメタデータを取得する
result <- getKSJURL(identifier = "N03")
head(result)
## # A tibble: 6 x 9
##   identifier title field year  areaType areaCode datum zipFileUrl
##   <chr>      <chr> <chr> <chr> <chr>    <chr>    <chr> <chr>     
## 1 N03        行政区域~ 政策区域~ 2017  3        1        1     http://nl~
## 2 N03        行政区域~ 政策区域~ 2017  3        2        1     http://nl~
## 3 N03        行政区域~ 政策区域~ 2017  3        3        1     http://nl~
## 4 N03        行政区域~ 政策区域~ 2017  3        4        1     http://nl~
## 5 N03        行政区域~ 政策区域~ 2017  3        5        1     http://nl~
## 6 N03        行政区域~ 政策区域~ 2017  3        6        1     http://nl~
## # ... with 1 more variable: zipFileSize <chr>
# getKSJData():データをダウンロードしてread_sf()で読み込む
## 2017年,東京の行政区域データのURL
url <- result %>% filter(year == "2017", areaCode == "13") %>% select("zipFileUrl") %>% as.character()
## ZIPファイルをダウンロードしてread_sf()で読み込んでくれる
tokyo2017 <- getKSJData(url)
head(tokyo2017)
## $`N03-17_13_170101`
## Simple feature collection with 6210 features and 5 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: 136.0695 ymin: 20.42275 xmax: 153.9868 ymax: 35.89842
## epsg (SRID):    NA
## proj4string:    +proj=longlat +ellps=GRS80 +no_defs
## # A tibble: 6,210 x 6
##    N03_001 N03_002 N03_003  N03_004 N03_007                       geometry
##    <chr>   <chr>   <chr>    <chr>   <chr>                   <POLYGON [ツー]>
##  1 東京都  <NA>    千代田区 <NA>    13101   ((139.7729 35.7037, 139.7728 ~
##  2 東京都  <NA>    中央区   <NA>    13102   ((139.7834 35.69645, 139.7846~
##  3 東京都  <NA>    港区     <NA>    13103   ((139.7713 35.62841, 139.7713~
##  4 東京都  <NA>    港区     <NA>    13103   ((139.7669 35.62774, 139.7672~
##  5 東京都  <NA>    港区     <NA>    13103   ((139.7702 35.63199, 139.7705~
##  6 東京都  <NA>    港区     <NA>    13103   ((139.758 35.6338, 139.758 35~
##  7 東京都  <NA>    港区     <NA>    13103   ((139.7585 35.6338, 139.7585 ~
##  8 東京都  <NA>    港区     <NA>    13103   ((139.7667 35.63298, 139.7665~
##  9 東京都  <NA>    港区     <NA>    13103   ((139.7766 35.63611, 139.7766~
## 10 東京都  <NA>    港区     <NA>    13103   ((139.7562 35.63689, 139.7562~
## # ... with 6,200 more rows
# 列名を意味に即した日本語名にしてくれる
tokyo2017 <- translateKSJData(tokyo2017)
head(tokyo2017)
## $`N03-17_13_170101`
## Simple feature collection with 6210 features and 5 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: 136.0695 ymin: 20.42275 xmax: 153.9868 ymax: 35.89842
## epsg (SRID):    NA
## proj4string:    +proj=longlat +ellps=GRS80 +no_defs
## # A tibble: 6,210 x 6
##    都道府県名 `支庁・振興局名` `郡・政令都市名` 市区町村名 行政区域コード
##    <chr>      <chr>            <chr>            <chr>      <chr>         
##  1 東京都     <NA>             千代田区         <NA>       13101         
##  2 東京都     <NA>             中央区           <NA>       13102         
##  3 東京都     <NA>             港区             <NA>       13103         
##  4 東京都     <NA>             港区             <NA>       13103         
##  5 東京都     <NA>             港区             <NA>       13103         
##  6 東京都     <NA>             港区             <NA>       13103         
##  7 東京都     <NA>             港区             <NA>       13103         
##  8 東京都     <NA>             港区             <NA>       13103         
##  9 東京都     <NA>             港区             <NA>       13103         
## 10 東京都     <NA>             港区             <NA>       13103         
## # ... with 6,200 more rows, and 1 more variable: geometry <POLYGON [ツー]>
# plot
## 23区
tokyo2017_23 <- tokyo2017$`N03-17_13_170101` %>% filter(stringr::str_detect(`郡・政令都市名`,"区"))
## geom_sf()でplot
ggplot(tokyo2017_23, aes(fill = `郡・政令都市名`))+
  geom_sf()

f:id:nigimitama:20181108013032p:plain

{choroplethrAdmin1}:マクロな地理空間情報と国勢統計

日本の都道府県レベルの地理空間情報(やアメリカの州レベルのデータなど)と国勢調査(センサス)の人口統計が入っています。

{choroplethr}というパッケージから派生しているパッケージで,{choroplethr}はgeom_sf()のような感じの塗り分け統計地図(コロプレス図)の描画関数です。

一応載せましたが,今は初めからsf形式の地理空間情報を取得してgeom_sf()で描いてしまったほうが早いので,あまり{choroplethr}の出番はないかもしれません…

# install.packages(c("choroplethr","choroplethrAdmin1"))
library(choroplethr)
library(choroplethrAdmin1)

# 国勢調査データ
data(df_japan_census)
head(df_japan_census)
##    region pop_2010 percent_pop_change_2005_2010 pop_density_km2_2010
## 23  aichi  7411000                          2.2               1434.8
## 5   akita  1086000                         -5.2                 93.3
## 2  aomori  1373000                         -4.4                142.4
## 12  chiba  6216000                          2.6               1205.5
## 38  ehime  1431000                         -2.5                252.1
## 18  fukui   806000                         -1.9                192.4
# df_japan_censusデータ
PlotData <- data.frame(region = df_japan_census[, 1], value = df_japan_census[, 2])
#プロット
admin1_choropleth(country.name = "japan",
                  df           = PlotData,
                  title        = "2010 Japan Population Estimates",
                  legend       = "Population",
                  num_colors   = 3)

f:id:nigimitama:20181108013058p:plain

まとめ

  • 国土数値情報が一番充実している
  • 手っ取り早く現行の行政区域データが欲しい場合は{jpndistrict}
  • 過去の行政区域だったり,行政区域以外のデータなどもう少し細かいデータが欲しいときは{kokudosuuchi}