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(平均価格))