Older people and those with underlying health conditions are at higher risk of being affected by the Coronavirus. These groups of people were already at higher risk of being socially isolated. Now they are potentially cut off from many of the usual sources of essential support, and they are less likely to have the skills, confidence and devices to get help online.
Public sector and community groups are working hard to support more vulnerable people in society, and we know they are looking for information on how best to target that work. We are determined to put our knowledge and experience to good use, and to help provide that information.
The map below shows 6,588 of 6,697 GP surgeries in England. It is designed to help identify areas where there are more people who don’t tend to use digital tools and services, or who are not online. We’ve used NHS data on registration for online GP services to make the map.
We acknowledge that registration alone does not imply confident use of online services. Equally, where people have not registered for online GP services, this may not indicate a lack of necessary digital skills or access to devices/connectivity.
The R
source code that generates the map is viewable by clicking the “Code” button, below right. All the code for this project can be found in the project repository .
The final data that is used for the GP surgeries information on the map can be downloaded directly, here (csv format, 1.2MB).
# use accessible palette from RColorBrewer
<- colorQuantile(palette = "viridis", domain = full_data_sf$older_popn_wtd, n = 5, reverse = TRUE)
viridis_palette
<- dplyr::filter(full_data_sf, offline_pat_pct < 70)
full_data_under70 <- dplyr::filter(full_data_sf, offline_pat_pct >= 70)
full_data_over70
<- nrow(full_data_over70)
less_than_thirty <- nrow(full_data_under70)
more_than_thirty
<- leaflet(full_data_sf) %>%
gp_map addProviderTiles(providers$CartoDB.Positron, options = tileOptions(minZoom = 7, maxZoom = 14)) %>%
addPolygons(
data = ccg_bounds,
stroke = TRUE,
weight = 1,
opacity = 0.75,
color = "#6C7B8B",
fill = TRUE,
fillOpacity = 0,
group = "CCG boundaries",
label = ~ccg20nm
%>%
) addCircles(
data = full_data_under70,
radius = ~ `^`(total_patients, 0.625),
stroke = TRUE,
color = "#00c5cd",
weight = 3,
opacity = 0.75,
fill = TRUE,
fillColor = ~ viridis_palette(older_popn_wtd),
fillOpacity = 0.75,
label = ~practice_name,
group = "> 30% 'online' (blue border)",
popup = paste0(
"<table>
<tr><th><h3>",
$practice_name,
full_data_under70"</h3>
</th>
<th style = 'font-weight: 400;'>",
$postcode,
full_data_under70"</th>
</tr>",
"<tr>
<td>Total number of patients:</td>
<td style='text-align: right'><strong>",
comma(full_data_under70$total_patients, accuracy = 1),
"</strong></td>
</tr>",
"<tr>
<td>Number of patients aged 65+:</td>
<td style='text-align: right'><strong>",
comma(full_data_under70$older_popn_unwtd, accuracy = 1),
"</strong></td>
</tr>",
"<tr>
<td>% patients <em>not</em> reg'd for an online service:</td>
<td style='text-align: right'><strong>",
$offline_pat_pct,
full_data_under70"%</strong></td>
</tr>",
"<tr>
<td>Online transactions in ",
latest_pomi,":</td>
<td style='text-align: right'><strong>",
comma(full_data_under70$total_use, accuracy = 1),
"</strong></td>
</tr>
</table>"
)%>%
) addCircles(
data = full_data_over70,
radius = ~ `^`(total_patients, 0.625),
stroke = TRUE,
color = "#ee1289",
weight = 3,
opacity = 0.75,
fill = TRUE,
fillColor = ~ viridis_palette(older_popn_wtd),
fillOpacity = 0.75,
label = ~practice_name,
group = "< 30% 'online' (pink border)",
popup = paste0(
"<table>
<tr><th><h3>",
$practice_name,
full_data_over70"</h3></th>
<th style = 'font-weight: 400;'>",
$postcode,
full_data_over70"</th>
</tr>",
"<tr>
<td>Total number of patients:</td>
<td style='text-align: right'><strong>",
comma(full_data_over70$total_patients, accuracy = 1),
"</strong></td>
</tr>",
"<tr>
<td>Number of patients aged 65+:</td>
<td style='text-align: right'><strong>",
comma(full_data_over70$older_popn_unwtd, accuracy = 1),
"</strong>
</td>
</tr>",
"<tr>
<td>% patients <em>not</em> reg'd for an online service:</td>
<td style='text-align: right'><strong>",
$offline_pat_pct,
full_data_over70"%</strong></td>
</tr>",
"<tr>
<td>Online transactions in ",
latest_pomi,":</td>
<td style='text-align: right'><strong>",
comma(full_data_over70$total_use, accuracy = 1),
"</strong></td>
</tr>
</table>"
)%>%
) addLayersControl(
overlayGroups = c(
"< 30% 'online' (pink border)",
"> 30% 'online' (blue border)",
"CCG boundaries"
),position = "topleft",
options = leaflet::layersControlOptions(collapsed = FALSE)
%>%
) # hideGroup("> 30% 'online' (blue border)") %>%
addLegend(
position = "topright",
colors = viridisLite::viridis(5, direction = -1, alpha = NULL),
opacity = 0.75,
title = "Circle fill colour: number of patients<br />aged 65+ (quintiles; 5 = most)",
labels = as.character(1:5)
%>%
) ::addFullscreenControl(
leaflet.extrasposition = "topleft",
pseudoFullscreen = FALSE
%>%
) addMiniMap(
tiles = providers$CartoDB.Positron,
zoomLevelOffset = -4,
toggleDisplay = TRUE
)
saveWidget(gp_map, "leaflet_widget1.html")
gp_map