sfパッケージを用いたデータの読み込みから可視化まで

spパッケージではなく、sfパッケージを用いて東京都の地価を可視化する。 sfパッケージについては以下に詳しい。

境界データの取得

境界データについては下記からダウンロードした。他にもe-statなどからダウンロードする方法がある。

sfパッケージのst_read()関数で境界データを読み込む。 なお、sfパッケージはインストールの際、R 3.3.0以上であることが求められるので注意。

st_read()関数で境界データを読み込む際は、dsnにshpファイルが格納されているフォルダを指定し、layerにはshpファイルのファイル名から拡張子を除いたものを指定する。 なお、今回ダウンロードしたshpファイルにはJPN_adm0、JPN_adm1、JPN_adm2の3種類があるが、今回は東京の特別区を描画したいのでJPN_adm2を指定する。

読み込んだデータにおいてNAME_1でTokyoを指定し、東京都のデータのみを抽出する。 試しにID_1をplot()関数で可視化してみる。 この列には全て同じ数値が入っているので、同色で塗られた東京特別区および近郊市が描画される。 なお、列を指定しないでplot()関数に渡すと、含まれる列全てが可視化されるので注意。

library("sf")
## Linking to GEOS 3.4.2, GDAL 2.1.2, proj.4 4.9.1
library("dplyr")
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
d <- st_read(dsn = "data/JPN_adm_shp/", layer = "JPN_adm2")
## Reading layer `JPN_adm2' from data source `/Users/ichikawadaisuke/GIS_test/data/JPN_adm_shp' using driver `ESRI Shapefile'
## converted into: MULTIPOLYGON
## Simple feature collection with 1811 features and 14 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: 122.9332 ymin: 24.04542 xmax: 153.9869 ymax: 45.52279
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
d_tokyo <- d %>% filter(NAME_1=="Tokyo") %>% mutate(市区名=as.character(NL_NAME_2))
plot(d_tokyo %>% select(ID_1))

地価データの取得

地価データについては以下から第6表をダウンロードした(ファイル名は07.xlsなので注意。)

東京都の23区のデータについては2つ目のシートに格納されている。 また、ヘッダは2行目に入っているのでreadxl()関数においてskip=1としている。 印刷を目的としたレイアウトになっているためか、空行があるのでfilter()関数で除いている。 また、不要な列についてもselect()関数で除いている。

(なお、Rmarkdownの話だが、read_excel()関数使用時に不要なメッセージが出力されるので、チャンクでresults = “hide”としておく。)

library("readxl")
d_chika <- read_excel("data/07.xls",sheet = 2,skip = 1)
d_chika <- d_chika %>% filter(complete.cases(.)) %>% select(-都道府県名)

 境界データと地価データとの結合

境界データと地価データを結合する。 inner_join()関数を用いて結合しているが、文字コードを合わせないと結合に失敗する。 結合後はただのデータフレームになってしまうので、st_as_sf()関数でsfクラスに変換する。

d_tokyo_ <- d_tokyo %>%
  mutate(市区名 = `Encoding<-`(市区名, "UTF-8")) %>%
  inner_join(d_chika) %>% st_as_sf(.)
## Joining, by = "市区名"
# 以下を実行しても0行のデータフレームが生成される。
# d_tokyo_ <- d_tokyo %>% inner_join(d_chika) %>% st_as_sf(.)

可視化

plot()関数を用いて平均価格で色分けされたコロプレス図を表示する。 なお、手元の環境がMacなのでpar()関数で日本語フォントを指定している。

par(family="HiraMaruProN-W4")
plot(d_tokyo_ %>% select(平均価格))