```{r, echo=FALSE, results="hide", warning=FALSE, message=FALSE}
##
## GWL 2016-10-10
## Putting 20_Map_dev_v1.R into map_demo.Rmd
##==============================================================================
## INITIALIZE
##==============================================================================
rm(list=ls())
library("geneorama")
sourceDir("functions")
loadinstall_libraries(c("leaflet", "data.table", "sp", "rgdal", "KernSmooth",
"maptools", "knitr"))
opts_chunk$set(tidy=FALSE, echo = FALSE, results="hide", warning=FALSE, message=FALSE)
##==============================================================================
## LOAD DATA
##==============================================================================
dat <- readRDS("data/wnv.Rds")
census_tracts <- download_census_tracts()
wards <- download_ward_map()
wards <- readRDS("data/BoundariesWards.Rds")
##==============================================================================
## MAPBOX KEY
## Register at mapbox.com and create a map... or use the one I made
##==============================================================================
MAPBOX_STYLE_TEMPLATE <- paste0("https://api.mapbox.com/styles/v1/coc375492/",
"cirqd7mgf001ygcnombg4jtb4/tiles/256/{z}/{x}/{y}",
"?access_token=pk.eyJ1IjoiY29jMzc1NDkyIiwiYSI6ImN",
"pcnBldzVqMTBmc3J0N25rZTIxZ3ludDIifQ.DgJIcLDjC1h9MtT8CaJ-pQ")
mb_attribution <- paste("© Mapbox ",
"© OpenStreetMap")
##==============================================================================
## AGGREGATE MOSQUITO DATA
##==============================================================================
## Here's the data without aggregating:
dat
## These steps create fields which will be used for the aggregation step:
dat[ , .N, species]
dat[ , mix := species == "CULEX PIPIENS/RESTUANS"]
dat[ , pip := species == "CULEX PIPIENS"]
dat[ , res := species == "CULEX RESTUANS" ]
dat[ , oth := !mix & !pip & !res]
dat[ , .N, list(species, mix, pip, res, oth)]
dat[ , species_short := species]
dat[grep("CULEX PIPIENS/RESTUANS", species_short), species_short := "mix"]
dat[grep("CULEX PIPIENS", species_short), species_short := "pip"]
dat[grep("CULEX RESTUANS", species_short), species_short := "res"]
dat[grep("CULEX RESTUANS", species_short), species_short := "res"]
dat[!species_short %in% c("pip", "res", "mix"), species_short := "OTHER"]
```
Results for `r dat[, max(date)]`
## West Nile results with total mosquitos
This is how I had been showing the data, but I realized lateer that it's misleading unless you know what you're looking at.
It's not *really* total positive / total, it's actually "the absolutely biggest possible number of positive" / total.
```{r}
# opts_chunk$set(eval=FALSE)
```
```{r}
## This is the aggregation step:
counts <- dat[date == max(date),
list(TOTAL = sum(number_of_mosquitoes),
TOTAL_POS = sum(number_of_mosquitoes[result==T]),
MIX = sum(number_of_mosquitoes[species_short=="mix"]),
MIX_POS = sum(number_of_mosquitoes[species_short=="mix" & result==T]),
PIPIENS = sum(number_of_mosquitoes[species_short=="pip"]),
PIPIENS_POS = sum(number_of_mosquitoes[species_short=="pip" & result==T]),
RESTUANS = sum(number_of_mosquitoes[species_short=="res"]),
RESTUANS_POS = sum(number_of_mosquitoes[species_short=="res" & result==T]),
OTHER = sum(number_of_mosquitoes[species_short=="OTHER"]),
OTHER_POS = sum(number_of_mosquitoes[species_short=="OTHER" & result==T])),
keyby = list(TRAP = trap,
WARD,
latitude,
longitude)]
counts <- counts[,
LABEL := htmltools::HTML(
paste(paste0("TRAP: ", TRAP),
paste0("TOTAL: ", TOTAL_POS, " / ", TOTAL),
paste0("MIX: ", MIX_POS, " / ", MIX),
paste0("PIPIENS: ", PIPIENS_POS, " / ", PIPIENS),
paste0("RESTUANS: ", RESTUANS_POS, " / ", RESTUANS),
paste0("OTHER: ", OTHER_POS, " / ", OTHER),
sep = "
")),
keyby = list(TRAP = TRAP,
WARD,
latitude,
longitude)][]
## Here's the data after aggregating:
counts
```
```{r, results="show"}
##==============================================================================
## RESULT MAP
##==============================================================================
leaflet() %>%
addTiles(urlTemplate = MAPBOX_STYLE_TEMPLATE, attribution = mb_attribution) %>%
addPolygons(data=wards, weight=1, fillOpacity=.05, color="black",
label=paste0("WARD ", wards$ward), smoothFactor=.02) %>%
addCircles(lng=~longitude, lat=~latitude, radius=~TOTAL*5,
label=~LABEL, fill="blue", col="blue", weight=1, data=counts) %>%
addCircles(lng=~longitude, lat=~latitude, radius=~TOTAL_POS*5,
label=~LABEL, fill="red", col="red", weight=1, data=counts)
```
## Mosquito results with sample counts
This is ugly, but the pop ups show the underlying sample information.
```{r}
## This is the aggregation step:
counts <- dat[date == max(date),
list(TOTAL = sum(number_of_mosquitoes),
TOTAL_POS = sum(number_of_mosquitoes[result==T]),
Ns_POS = paste(number_of_mosquitoes[result==TRUE], collapse=","),
Ns_NEG = paste(number_of_mosquitoes[result==FALSE], collapse=","),
SPECIES_POS = paste(species_short[result==TRUE], collapse=","),
SPECIES_NEG = paste(species_short[result==FALSE], collapse=",")),
keyby = list(TRAP = trap,
WARD,
latitude,
longitude)]
counts <- counts[,
LABEL := htmltools::HTML(
paste(paste0("TRAP: ", TRAP),
paste0("TOTAL: ", TOTAL_POS, " / ", TOTAL),
paste0("COUNTS_POS: ", Ns_POS),
paste0("COUNTS_NEG: ", Ns_NEG),
paste0("SPECIES_POS: ", SPECIES_POS),
paste0("SPECIES_NEG: ", SPECIES_NEG),
sep = "
")),
keyby = list(TRAP = TRAP,
WARD,
latitude,
longitude)][]
## Here's the data after aggregating:
counts
```
```{r, results="show"}
##==============================================================================
## RESULT MAP
##==============================================================================
leaflet() %>%
addTiles(urlTemplate = MAPBOX_STYLE_TEMPLATE, attribution = mb_attribution) %>%
addPolygons(data=wards, weight=1, fillOpacity=.05, color="black",
label=paste0("WARD ", wards$ward), smoothFactor=.02) %>%
addCircles(lng=~longitude, lat=~latitude, radius=~TOTAL*5,
label=~LABEL, fill="blue", col="blue", weight=1, data=counts) %>%
addCircles(lng=~longitude, lat=~latitude, radius=~TOTAL_POS*5,
label=~LABEL, fill="red", col="red", weight=1, data=counts)
```