Skip to content

Instantly share code, notes, and snippets.

@jakeybob
Created September 28, 2020 18:48
Show Gist options
  • Save jakeybob/2d9b934677ee3198fb0d726852153534 to your computer and use it in GitHub Desktop.
Save jakeybob/2d9b934677ee3198fb0d726852153534 to your computer and use it in GitHub Desktop.
Glasgow / Scotland air quality trends etc
library(openair)
library(tidyverse)
library(lubridate)
#### SETUP ####
saqn_meta <- importMeta(source = "SAQN", all = TRUE) # metadata for all the Scottish Air Quality Network sites
years <- 1987:2019 # NO2 trend goes back to 1987 for Glasgow City Chambers
glasgow_saqn_sites_pm10 <- c("Glasgow Abercromby Street",
"Glasgow Anderston",
"Glasgow Battlefield Road",
"Glasgow Broomhill",
"Glasgow Burgher St.",
"Glasgow Byres Road",
"Glasgow Centre",
"Glasgow Dumbarton Road",
"Glasgow Kerbside",
"Glasgow Nithsdale Road",
"Glasgow Townhead",
"Glasgow High Street",
"Glasgow Waulkmillglen Reservoir")
glasgow_saqn_sites_no2 <- c("Glasgow Anderston",
"Glasgow Battlefield Road",
"Glasgow Burgher St.",
"Glasgow Byres Road",
"Glasgow Centre",
"Glasgow City Chambers",
"Glasgow Dumbarton Road",
"Glasgow Kerbside",
"Glasgow Great Western Road",
"Glasgow Waulkmillglen Reservoir")
scot_saqn_sites_pm10 <- c("Aberdeen Market Street 2",
"Aberdeen Wellington Road",
"Aberdeen King Street",
"Aberdeen Union Street Roadside",
"Aberdeen Errol Place",
"Aberdeen Anderson Dr",
"Dundee Whitehall Street",
"Dundee Seagate",
"Dundee Meadowside",
"Dundee Lochee Road",
"Dundee Broughty Ferry Road",
"Dundee Mains Loan",
"Edinburgh Queensferry Road",
"Edinburgh Salamander St",
"Edinburgh Glasgow Road",
"Edinburgh St John's Road",
"Edinburgh St Leonards",
"Edinburgh Currie",
"Glasgow Abercromby Street",
"Glasgow Dumbarton Road",
"Glasgow High Street",
"Glasgow Byres Road",
"Glasgow Burgher St.",
"Glasgow Anderston",
"Glasgow Townhead",
"Glasgow Waulkmillglen Reservoir")
scot_saqn_sites_no2 <- c("Glasgow Kerbside",
"Edinburgh Queensferry Road",
"Edinburgh Nicolson Street",
"Dundee Seagate",
"Dundee Lochee Road",
"Edinburgh St John's Road",
"Aberdeen Wellington Road",
"Aberdeen Union Street Roadside",
"Dundee Whitehall Street",
"Dundee Meadowside",
"Glasgow Dumbarton Road",
"Glasgow Byres Road",
"Aberdeen Market Street 2",
"Glasgow High Street",
"Glasgow Great Western Road",
"Edinburgh Gorgie Road",
"Edinburgh Glasgow Road",
"Glasgow Burgher St.",
"Edinburgh Salamander St",
"Glasgow Anderston",
"Glasgow Townhead",
"Dundee Broughty Ferry Road",
"Aberdeen King Street",
"Aberdeen Errol Place",
"Edinburgh St Leonards",
"Aberdeen Anderson Dr",
"Dundee Mains Loan",
"Glasgow Waulkmillglen Reservoir",
"Edinburgh Currie")
saqn_lookup <- saqn_meta %>%
filter(site %in% c(glasgow_saqn_sites_pm10, scot_saqn_sites_pm10, glasgow_saqn_sites_no2, scot_saqn_sites_no2)) %>%
select(site, code) %>%
distinct()
#### GET DATA ####
# download via SAQN API and save
df <- importSAQN(site = saqn_lookup$code,
year = years,
pollutant = "all") %>%
mutate(year = year(date)) %>%
select(site, code, date, year, `pm2.5`, pm10, no2)
write_rds(df, "saqn.rds", compress = "gz")
#### OUTPUT PLOTS & DATA ####
df <- read_rds("saqn.rds")
# Glasgow trends for PM10
df %>%
filter(year >= 2000) %>%
group_by(site, year) %>%
summarise(pm10_av = mean(pm10, na.rm=T)) %>%
filter(site %in% glasgow_saqn_sites_pm10) %>%
ggplot(aes(x = year, y = pm10_av, colour = site)) +
geom_line() + geom_point() + geom_hline(yintercept = 18)
# Scottish cities recent year PM10
df %>%
filter(year == max(year)) %>%
filter(site %in% scot_saqn_sites_pm10) %>%
group_by(site) %>%
summarise(pm10_av = mean(pm10, na.rm=T)) %>%
arrange(pm10_av) %>%
mutate(site = factor(site, levels = .$site ) ) %>%
ggplot(aes(x = site, y = pm10_av)) +
geom_hline(yintercept = 18) +
geom_col() +
theme(axis.text.x = element_text(angle = -90, hjust = 0))
# Glasgow trends for NO2
df %>%
group_by(site, year) %>%
summarise(no2_av = mean(no2, na.rm=T)) %>%
filter(site %in% glasgow_saqn_sites_no2) %>%
ggplot(aes(x = year, y = no2_av, colour = site)) +
geom_line() + geom_point() + geom_hline(yintercept = 40)
# Scottish cities recent year NO2
df %>%
# filter(year == 2018) %>%
filter(year == max(year)) %>%
filter(site %in% scot_saqn_sites_no2) %>%
group_by(site) %>%
summarise(no2_av = mean(no2, na.rm=T)) %>%
arrange(no2_av) %>%
mutate(site = factor(site, levels = .$site ) ) %>%
ggplot(aes(x = site, y = no2_av)) +
geom_hline(yintercept = 40) +
geom_col() +
theme(axis.text.x = element_text(angle = -90, hjust = 0))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment