Citizens Online - Digital Inclusion Experts

About

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.

Guidance on using the map

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

Skip to below map

# use accessible palette from RColorBrewer
viridis_palette <- colorQuantile(palette = "viridis", domain = full_data_sf$older_popn_wtd, n = 5, reverse = TRUE)

full_data_under70 <- dplyr::filter(full_data_sf, offline_pat_pct < 70)
full_data_over70 <- dplyr::filter(full_data_sf, offline_pat_pct >= 70)

less_than_thirty <- nrow(full_data_over70)
more_than_thirty <- nrow(full_data_under70)

gp_map <- leaflet(full_data_sf) %>%
  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>",
      full_data_under70$practice_name,
      "</h3>
      </th>
      <th style = 'font-weight: 400;'>",
      full_data_under70$postcode,
      "</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>",
      full_data_under70$offline_pat_pct,
      "%</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>",
      full_data_over70$practice_name,
      "</h3></th>
      <th style = 'font-weight: 400;'>",
      full_data_over70$postcode,
      "</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>",
      full_data_over70$offline_pat_pct,
      "%</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)
  ) %>%
  leaflet.extras::addFullscreenControl(
    position = "topleft",
    pseudoFullscreen = FALSE
  ) %>%
  addMiniMap(
    tiles = providers$CartoDB.Positron,
    zoomLevelOffset = -4,
    toggleDisplay = TRUE
  )

saveWidget(gp_map, "leaflet_widget1.html")
gp_map

Get in touch

Data alone tells us little about what action to take. Citizens Online can offer consultancy about how to support people with low or no digital skills – including remote support during conditions of lockdown, self-isolation, and physical distancing – and/or specific advice around health information and services.

We can also provide maps which compare local rather than national data, so you can assess local levels of risk. Please get in touch to find out how we can help in your area with our mapping and analysis services.

We also welcome comments and feedback about the map, and how it might be made more useful.

Notes on our approach

We have applied weightings to the reported populations when ranking the surgeries. Patient numbers in older age brackets are multiplied by larger amounts in our model, because of their increased risk of digital exclusion and vulnerability to Covid-19. However, the number of patients aged 65+ reported in the pop-up data bubbles is the unweighted (actual) number.

The map uses the national ranking of each surgery by age: i.e. the purple fill means it is in the top 20% in England by number of older patients. We can provide maps where instead the top 20% is identified within a regional or more local set of GP surgeries.

Of the 6,588 surgeries where there is Patient Online data, 3,425 (52%) have less than 30% of patients registered for online services, and 3,161 (48%) have more than 30% of patients registered. 30% is chosen as it is relatively near to the median registration rate of 29.4% and the current overall national rate of 31.75% (August 2020).

Where we refer to “online services” we mean: making GP appointments, ordering repeat prescriptions, and/or looking up personal details.

Data sources

  1. Surgery name, size and location data are obtained from NHS Digital Patients Registered (October 2020).
  2. Data on availability and use of Patient Online services is from NHS Digital, latest data August 2020. Unfortunately, data was unavailable for 109 of the surgeries listed in (1), and these are not included on the map.
  3. Conversion from postcode to map location is provided by the ONS Postcode Directory, latest data August 2020. Small amounts of ‘jitter’ have been applied to locations in order to reduce overlap where two surgeries share a postcode.
  4. The basemap is from OpenStreetMap with CartoDB tiles.