knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
library(OSButils)
mmd_ImpGeneratePostalAreaStats <- function(){ pop_data <- readr::read_csv("post area population data")
# Postcode area names and volumes into one table pop_data - copied from Wikipedia pa_names <- readr::read_csv("pa names file") %>% dplyr::select( PostcodeArea = `Postcode area`, pa_name = `Postcode area name[1][3]` ) %>% # Remove footnote indicators i.e. [1] from the names dplyr::mutate(pa_name = gsub("\\[[0-9]\\]", "", pa_name)) pop_data <- dplyr::left_join(pop_data, pa_names, by = "PostcodeArea" ) pop_data
}
mmd_PurProcessTargetByArea <- function(input_ds, reference_areas = mmd_ImpGeneratePostalAreaStats(), .target_var){
input_ds %>% dplyr::right_join( reference_areas , by = c("Postcode.Area" = "PostcodeArea") ) %>% # many missing postal sectors without leads so make them zero dplyr::mutate_at(dplyr::vars({{.target_var}}), tidyr::replace_na, 0) %>% dplyr::filter(.data$Postcode.Area != "ZE") %>% # create pen which is penetration of leads per thousand dplyr::mutate(pen = {{.target_var}} / (.data$Population/1000)) %>% # create pencentiles from 0 worst to 1 best # pen_percentile_leads is the percentile for penetration of leads (takes into account the population # percentile_leads = percentile for number of leads dplyr::mutate(pen_percentile = ifelse({{.target_var}} == 0, 0 , column_percentiles(.data$pen) ))
}
mmd_ImpGenerateGeometries <- function(){
sf::st_read("J:/OCCAM/OCCAM.806/MapInfo_Data/Postal", layer = "POSTAREA") %>% sf::st_transform( "+init=epsg:4326") %>% # Simplify boundary data rmapshaper::ms_simplify() %>% dplyr::rename(Postcode.Area = .data$PostArea) %>% dplyr::mutate_at(dplyr::vars(.data$Postcode.Area), as.character) %>% dplyr::select(-Standard_Region)
}
percentLabelFormat <- function(..., percent = TRUE) { if (percent) { function(type = "bin", cuts, ...) { scales::percent(cuts) } } else { leaflet::labelFormat(...) } }
column_percentiles <- function(column) { stats::ecdf(column)(column) }
pfl_PurExtractPostcodeArea <- function(str_x) { stringr::str_match(str_x, "^([a-zA-Z]{1,2})\d{1,2}")[2] }
mmd_PurWrapMappingGen <- function(input_ds, brand_name){ input_ds %>% dplyr::filter(.data$Brand == brand_name) %>% dplyr::pull(.data$Geom.Data) %>% {.[[1]]} %>%
leaflet::leaflet() %>% # sales per 000 percentile leaflet::addRectangles(lat1 = 49, lat2 = 60, lng1 = -9.5, lng2 = 3, opacity = 1, color = "#fff", fillOpacity = 1) %>% leaflet::addPolygons(fillOpacity = 1, color = "black", weight = 1, label = mmd_PurWrapLabelsProc(input_ds = input_ds, brand_name = brand_name), fillColor = ~perc_pal_ace(.data$pen_percentile), group = paste0(brand_name," Purchases per 000 percentile")) %>% leaflet::addLegend(title = paste0(brand_name," Ranking"), opacity = 0.8, position = "bottomright", pal = perc_pal_ace, group = "Percentile Legend", values = ~pen_percentile, labFormat = percentLabelFormat())
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.