前書き - すでに記憶の彼方になっている前回のの続き
- やったこと: Leafletにカーネル密度マップを重ねる
- 前回は{rMaps}を使っていたが、{leaflet}に移行(つい最近のリリースで、ラスターイメージの重ね書きが可能に)
Leaflet for R Raster Images
SET_LOAD_LIB <- c(
"knitr",
"readr", "dplyr", "stringr", "stringi",
"MASS", "KernSmooth",
"leaflet", "raster", "sp"
)
sapply(X = SET_LOAD_LIB, FUN = library, character.only = TRUE, logical.return = TRUE)
## knitr readr dplyr stringr stringi MASS
## TRUE TRUE TRUE TRUE TRUE TRUE
## KernSmooth leaflet raster sp
## TRUE TRUE TRUE TRUE
knitr::opts_chunk$set(comment = NA)
https://www.city.chiba.jp/shimin/shimin/kohokocho/map_opendata.html
SET_DATA_PROF <- list(
URL = "https://www.city.chiba.jp/shimin/shimin/kohokocho/documents/shisetsu.csv",
ENCORDING = "SHIFT-JIS",
HEADER = c("ページタイトル", "施設ジャンル", "施設、場所、イベントの名称(読み)", "郵便番号", "住所", "ビル名", "フロア数", "緯度", "経度"),
SEP = ",",
SKIP = 1
)
SET_LOCATION_COL_NAME <- c(lon = "経度", lat = "緯度")
SET_DENSITY <- list(
GRID = c(2000, 2000),
THRESHOLD = 50
)
SET_COODINATE_REFERENCE_SYSTEM <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0"
source_data <- do.call("rbind",
readr::read_lines(
file = SET_DATA_PROF$URL, n_max = -1
) %>%
stringi::stri_conv(
str = .,
from = SET_DATA_PROF$ENCORDING, to = "UTF-8", to_raw = FALSE
) %>%
stringr::str_split(
string = ., pattern = SET_DATA_PROF$SEP
)
)[-c(SET_DATA_PROF$SKIP), ]
Warning in stringi::stri_conv(str = ., from = SET_DATA_PROF$ENCORDING,
to = "UTF-8", : This converter alias can go to different converter
implementations. (U_AMBIGUOUS_ALIAS_WARNING)
Warning in rbind(c("ページタイトル", "施設ジャンル", "施設、場所、イベントの名称(読み)", : number of
columns of result is not a multiple of vector length (arg 2785)
colnames(x = source_data) <- SET_DATA_PROF$HEADER
# NAは除外
options(digits = 14)
location <- source_data %>%
data.frame(., stringsAsFactors = FALSE) %>%
dplyr::select_(.dots = SET_LOCATION_COL_NAME) %>%
sapply(X = ., FUN = as.numeric) %>%
na.omit
Warning in lapply(X = X, FUN = FUN, ...): 強制変換により NA が生成されました
Warning in lapply(X = X, FUN = FUN, ...): 強制変換により NA が生成されました
density_loc <- KernSmooth::bkde2D(
x = location,
# bandwidth = apply(X = location, MARGIN = 2, FUN = MASS::bandwidth.nrd),
bandwidth = c(0.003, 0.003),
gridsize = SET_DENSITY$GRID
)
# quantile(density_loc$fhat)
density_loc$fhat[density_loc$fhat < SET_DENSITY$THRESHOLD] <- NA
loc_density_raster <- raster::raster(
list(x = density_loc$x1, y = density_loc$x2, z = density_loc$fhat)
)
raster::projection(loc_density_raster) <- sp::CRS(SET_COODINATE_REFERENCE_SYSTEM)
leaflet::leaflet(data = as.data.frame(location), width = 900) %>%
leaflet::setView(lng = mean(location[, "lon"]), lat = mean(location[, "lat"]), zoom = 11) %>%
leaflet::addCircles(lng = ~lon, lat = ~lat) %>%
leaflet::addTiles()
# カラーパレット生成時に{scale}が0.2.5以上が必要
# devtools::install_github("hadley/scales")
color_pal <- leaflet::colorNumeric(
palette = c("#FFFFCC", "#41B6C4", "#0C2C84"), domain = raster::values(loc_density_raster),
na.color = "transparent"
)
leaflet::leaflet(width = 900) %>%
leaflet::addTiles() %>%
leaflet::setView(lng = mean(location[, "lon"]), lat = mean(location[, "lat"]), zoom = 11) %>%
leaflet::addRasterImage(x = loc_density_raster, opacity = 0.5, project = FALSE) %>%
addLegend(pal = color_pal, values = values(loc_density_raster))
カーネル密度を{leaflet}に重ねてプロットしてみました。ラスターイメージの表示はできましたが、今度は{leaflet}による地図が出てこなくなりました。記事を書く前に試した際のデータでは地図の表示もできたので、できないというわけではなさそうです(もう少し調査します)。
– leaflet::addTiles()
を付け忘れていただけでした。
カーネル密度の計算ではバンド幅が重要になりますが、今回は適当な数値を設定したので、良い算出方法を調べたいです。
可視化して面白そうな日本のデータが中々見つからない。
library(devtools)
devtools::session_info()
Session info --------------------------------------------------------------
setting value
version R version 3.2.0 (2015-04-16)
system x86_64, darwin13.4.0
ui X11
language (EN)
collate ja_JP.UTF-8
tz Asia/Tokyo
Packages ------------------------------------------------------------------
package * version date
assertthat * 0.1 2013-12-06
base64enc * 0.1-2 2014-06-26
colorspace * 1.2-6 2015-03-11
curl * 0.5 2015-02-01
DBI * 0.3.1 2014-09-24
devtools 1.7.0 2015-01-17
digest * 0.6.8 2014-12-31
dplyr 0.4.2.9000 2015-06-17
evaluate * 0.7 2015-04-21
formatR * 1.2 2015-04-21
htmltools * 0.2.6 2014-09-08
htmlwidgets * 0.5 2015-06-26
jsonlite * 0.9.16 2015-04-11
KernSmooth 2.23-14 2015-02-11
knitr 1.10 2015-04-23
lattice * 0.20-31 2015-03-30
lazyeval * 0.1.10.9000 2015-06-07
leaflet 1.0.0.9999 2015-06-27
magrittr * 1.5 2014-11-22
MASS 7.3-40 2015-03-21
munsell * 0.4.2 2013-07-11
plyr * 1.8.2 2015-04-21
png * 0.1-7 2013-12-03
R6 * 2.0.1 2014-10-29
raster 2.3-40 2015-04-11
RColorBrewer * 1.1-2 2014-12-07
Rcpp * 0.11.6 2015-05-01
readr 0.1.0.9000 2015-06-08
rgdal * 0.9-2 2015-03-15
rmarkdown * 0.6.2.4 2015-06-07
rstudioapi * 0.3.1 2015-04-07
scales * 0.2.5.9000 2015-06-27
sp 1.1-0 2015-04-24
stringi 0.4-1 2014-12-14
stringr 1.0.0 2015-04-30
yaml * 2.1.13 2014-06-12
source
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
Github (hadley/dplyr@7763150)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
Github (ramnathv/htmlwidgets@955ddc0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
Github (hadley/lazyeval@ecb8dc0)
Github (rstudio/leaflet@5a056e3)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
Github (hadley/readr@9006822)
CRAN (R 3.2.0)
Github (rstudio/rmarkdown@8c9e25b)
CRAN (R 3.2.0)
Github (hadley/scales@15ea715)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)
CRAN (R 3.2.0)