【R】ワクチン接種 都道府県別コロプレス図
2021年5月28日
新型コロナウイルスが猛威を振るっています。そのワクチン接種が、医療従事者と高齢者から進められています。
こちらのサイトでその状況をデータにて公開しているので、ダッシュボード風にデータを表示してみたいと思います。こちらのサイトで、すばらしくまとまっていましたので、触発されました。
今回は、医療従事者へのワクチン接種状況をプロットします。データは、あらかじめ取得して、整形してCSVファイルに保存しておきます。日本地図をleafletで描くためにシェープファイルをGADMから取得しておきます。
インタラクティブな地図の書き方は、”RでGIS:塗り分け地図(コロプレス図)を作る”を参考に、シェープファイルの扱い方は、”sfパッケージを用いたデータの読み込みから可視化まで”を参考にさせていただきました。
で、コードはこんな感じです。
--- title: "Covid19-vaccination in Japan" output: flexdashboard::flex_dashboard: orientation: columns vertical_layout: fill --- ```{r setup, include=FALSE} library(flexdashboard) library(tidyverse) library(leaflet) library(maps) library(mapproj) library(DT) ``` Column {data-width=60%} ----------------------------------------------------------------------- ### Map ```{r choropleths} jpn.shp <- readRDS("gadm36_JPN_1_sp.rds") vacc_dat <- read.csv("vacc.csv", fileEncoding = "UTF-8") %>% slice(2:48) va <- vacc_dat %>% mutate(NL_NAME_1=pref) sp_data <- jpn.shp@data %>% inner_join(va, by="NL_NAME_1") %>% select(pref, vacc, vacc1, vacc2) jpn.shp@data$pref <- sp_data$pref jpn.shp@data$vacc <- sp_data$vacc jpn.shp@data$vacc1 <- sp_data$vacc1 jpn.shp@data$vacc2 <- sp_data$vacc2 pal <- colorNumeric("YlOrRd", domain=jpn.shp@data$vacc, reverse=F) labels <- sprintf("<strong>%s</strong><br/>接種回数:%5.0f<br/>内1回目:%5.0f<br/>内2回目:%5.0f", paste0(jpn.shp@data$NL_NAME_1), jpn.shp@data$vacc, jpn.shp@data$vacc1, jpn.shp@data$vacc2) %>% lapply(htmltools::HTML) jpn.shp %>% leaflet() %>% setView(lat=37.5, lng=139, zoom=5) %>% addProviderTiles(providers$CartoDB.Positron) %>% addPolygons(fillOpacity = 0.5, weight=1, fillColor = ~pal(jpn.shp@data$vacc), color = "orange", label = labels, labelOptions = labelOptions( style = list("font-weight" = "normal", padding = "3px 8px"), textsize = "16px", direction = "auto"), highlight = highlightOptions( weight = 5, color = "#888", fillOpacity = 0.5, bringToFront = TRUE) ) %>% addLegend("bottomright", pal = pal, values = ~jpn.shp@data$vacc, title = "新型コロナウイルス<br/>ワクチン接種状況<br/>as of 21/05/2021" ) ``` Column {data-width=40%} ----------------------------------------- ### Table ```{r vacctination_table} vacc_dat %>% datatable(rownames=FALSE, colnames=c("都道府県", "接種回数", "内1回目", "内2回目"), filter='top', options=list( autoWidth=TRUE, pageLength=16 ) ) ```
flexdashboardを使って、こんな風に出力されます。
実際のサイトはこちら。