概要

前書き - すでに記憶の彼方になっている前回のの続き
- やったこと: 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)

データ処理部

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))



後書き



実行環境

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)