@dataknut
)Please note that authorship is alphabetical. Contributions are listed below - see github for details and who to blame for what :-).
@dataknut
)If you wish to refer to any of the material from this report please cite as:
Report circulation:
Report purpose:
This work is (c) 2020 the University of Southampton.
Data downloaded from http://southampton.my-air.uk. See also https://www.southampton.gov.uk/environmental-issues/pollution/air-quality/.
Southampton City Council collects various forms of air quality data at the sites shown in 2.1. WHO publishes information on the health consequences and “acceptable” exposure levels for each of these.
Data health warning
The data used here is not cleaned or tested for measurement error. If you want that data you need to go to https://uk-air.defra.gov.uk/data-plot?site_id=SOUT&days=7
lDT <- data.table::melt(origDataDT, id.vars = c("site", "dateTimeUTC"), measure.vars = c("co", "no2", "nox", "oz", "pm10",
"pm2_5", "so2"), value.name = "value" # varies
)
lDT[, `:=`(obsDate, lubridate::date(dateTimeUTC))]
# remove NA lDT <- lDT[!is.na(value)]
t <- lDT[!is.na(value), .(from = min(dateTimeUTC), to = max(dateTimeUTC), nObs = .N), keyby = .(site, variable)]
kableExtra::kable(t, caption = "Dates data != NA available by site and measure", digits = 2) %>% kable_styling()
site | variable | from | to | nObs |
---|---|---|---|---|
Southampton - A33 Roadside (near docks, AURN site) | no2 | 2016-01-26 11:00:00 | 2020-03-26 12:00:00 | 35338 |
Southampton - A33 Roadside (near docks, AURN site) | pm10 | 2016-01-04 13:00:00 | 2020-03-26 11:00:00 | 33842 |
Southampton - Background (near city centre, AURN site) | no2 | 2016-01-01 00:00:00 | 2020-03-26 12:00:00 | 30170 |
Southampton - Background (near city centre, AURN site) | nox | 2016-01-01 00:00:00 | 2019-01-01 00:00:00 | 20026 |
Southampton - Background (near city centre, AURN site) | oz | 2016-01-01 00:00:00 | 2020-03-26 12:00:00 | 29849 |
Southampton - Background (near city centre, AURN site) | pm10 | 2016-01-01 00:00:00 | 2020-03-26 12:00:00 | 26424 |
Southampton - Background (near city centre, AURN site) | pm2_5 | 2016-01-01 00:00:00 | 2020-03-26 12:00:00 | 28632 |
Southampton - Background (near city centre, AURN site) | so2 | 2016-01-01 00:00:00 | 2020-03-26 12:00:00 | 29659 |
Southampton - Onslow Road (near RSH) | no2 | 2016-01-01 00:00:00 | 2020-03-25 09:00:00 | 35671 |
Southampton - Onslow Road (near RSH) | nox | 2016-01-01 00:00:00 | 2020-03-25 09:00:00 | 35675 |
Southampton - Victoria Road (Woolston) | no2 | 2016-01-01 00:00:00 | 2020-03-26 13:00:00 | 27396 |
Southampton - Victoria Road (Woolston) | nox | 2016-01-01 00:00:00 | 2020-03-26 13:00:00 | 27396 |
Summarise previously downloaded and processed data… Note that this may not be completely up to date.
t <- lDT[, .(mean = mean(value, na.rm = TRUE)), keyby = .(site, variable)]
kableExtra::kable(t, caption = "Mean values per site (NaN indicates not measured)") %>% kable_styling()
site | variable | mean |
---|---|---|
Southampton - A33 Roadside (near docks, AURN site) | co | NaN |
Southampton - A33 Roadside (near docks, AURN site) | no2 | 35.465210 |
Southampton - A33 Roadside (near docks, AURN site) | nox | NaN |
Southampton - A33 Roadside (near docks, AURN site) | oz | NaN |
Southampton - A33 Roadside (near docks, AURN site) | pm10 | 18.974198 |
Southampton - A33 Roadside (near docks, AURN site) | pm2_5 | NaN |
Southampton - A33 Roadside (near docks, AURN site) | so2 | NaN |
Southampton - Background (near city centre, AURN site) | co | NaN |
Southampton - Background (near city centre, AURN site) | no2 | 29.367312 |
Southampton - Background (near city centre, AURN site) | nox | 50.789064 |
Southampton - Background (near city centre, AURN site) | oz | 41.055962 |
Southampton - Background (near city centre, AURN site) | pm10 | 18.058019 |
Southampton - Background (near city centre, AURN site) | pm2_5 | 11.992966 |
Southampton - Background (near city centre, AURN site) | so2 | 2.978233 |
Southampton - Bitterne | co | NaN |
Southampton - Bitterne | no2 | NaN |
Southampton - Bitterne | nox | NaN |
Southampton - Bitterne | oz | NaN |
Southampton - Bitterne | pm10 | NaN |
Southampton - Bitterne | pm2_5 | NaN |
Southampton - Bitterne | so2 | NaN |
Southampton - Onslow Road (near RSH) | co | NaN |
Southampton - Onslow Road (near RSH) | no2 | 42.270912 |
Southampton - Onslow Road (near RSH) | nox | 87.229407 |
Southampton - Onslow Road (near RSH) | oz | NaN |
Southampton - Onslow Road (near RSH) | pm10 | NaN |
Southampton - Onslow Road (near RSH) | pm2_5 | NaN |
Southampton - Onslow Road (near RSH) | so2 | NaN |
Southampton - Redbridge | co | NaN |
Southampton - Redbridge | no2 | NaN |
Southampton - Redbridge | nox | NaN |
Southampton - Redbridge | oz | NaN |
Southampton - Redbridge | pm10 | NaN |
Southampton - Redbridge | pm2_5 | NaN |
Southampton - Redbridge | so2 | NaN |
Southampton - Victoria Road (Woolston) | co | NaN |
Southampton - Victoria Road (Woolston) | no2 | 38.778044 |
Southampton - Victoria Road (Woolston) | nox | 79.820361 |
Southampton - Victoria Road (Woolston) | oz | NaN |
Southampton - Victoria Road (Woolston) | pm10 | NaN |
Southampton - Victoria Road (Woolston) | pm2_5 | NaN |
Southampton - Victoria Road (Woolston) | so2 | NaN |
Table 3.1 gives an indication of the availability of the different measures.
In this section we present graphical analysis of the previoulsy downloaded data. Note this is just a snapshot of the data available.
From WHO: https://www.who.int/news-room/fact-sheets/detail/ambient-(outdoor)-air-quality-and-health
"As an air pollutant, NO2 has several correlated activities. At short-term, concentrations exceeding 200 μg/m3, it is a toxic gas which causes significant inflammation of the airways.
NO2 is the main source of nitrate aerosols, which form an important fraction of PM2.5 and, in the presence of ultraviolet light, of ozone. The major sources of anthropogenic emissions of NO2 are combustion processes (heating, power generation, and engines in vehicles and ships).
Health effects
Epidemiological studies have shown that symptoms of bronchitis in asthmatic children increase in association with long-term exposure to NO2. Reduced lung function growth is also linked to NO2 at concentrations currently measured (or observed) in cities of Europe and North America."
yLab <- "Nitrogen Dioxide (ug/m3)"
no2dt <- lDT[variable == "no2"]
t <- no2dt[!is.na(value), .(mean = mean(value, na.rm = TRUE), sd = sd(value, na.rm = TRUE), min = min(value, na.rm = TRUE),
max = max(value, na.rm = TRUE), maxDate = max(obsDate)), keyby = .(site)]
kableExtra::kable(t, caption = "Summary of NO2 data") %>% kable_styling()
site | mean | sd | min | max | maxDate |
---|---|---|---|---|---|
Southampton - A33 Roadside (near docks, AURN site) | 35.46521 | 24.76825 | 0.0 | 164.3 | 2020-03-26 |
Southampton - Background (near city centre, AURN site) | 29.36731 | 16.92336 | 2.3 | 144.2 | 2020-03-26 |
Southampton - Onslow Road (near RSH) | 42.27091 | 21.18158 | 1.2 | 241.3 | 2020-03-25 |
Southampton - Victoria Road (Woolston) | 38.77804 | 23.81088 | -1.3 | 287.5 | 2020-03-26 |
Table 4.1 suggests that there may be a few (5) negative values. These are summarised in 4.2 while Figure 4.1 shows the availability and levels of the pollutant data over time.
t <- head(no2dt[value < 0], 10)
kableExtra::kable(t, caption = "Negative NO2 values (up to first 10)") %>% kable_styling()
site | dateTimeUTC | variable | value | obsDate |
---|---|---|---|---|
Southampton - Victoria Road (Woolston) | 2016-01-29 04:00:00 | no2 | -0.1 | 2016-01-29 |
Southampton - Victoria Road (Woolston) | 2016-11-27 05:00:00 | no2 | -0.5 | 2016-11-27 |
Southampton - Victoria Road (Woolston) | 2016-11-27 06:00:00 | no2 | -1.1 | 2016-11-27 |
Southampton - Victoria Road (Woolston) | 2017-02-06 00:00:00 | no2 | -0.2 | 2017-02-06 |
Southampton - Victoria Road (Woolston) | 2017-02-06 01:00:00 | no2 | -1.3 | 2017-02-06 |
t <- table(no2dt[value < 0]$site)
kableExtra::kable(t, caption = "Negative NO2 values (count by site)") %>% kable_styling()
Var1 | Freq |
---|---|
Southampton - Victoria Road (Woolston) | 5 |
# dt,xvar, yvar,fillVar, yLab
p <- makeTilePlot(no2dt, xVar = "dateTimeUTC", yVar = "site", fillVar = "value", yLab = yLab)
p
Figure 4.2 shows daily mean values for all sites over time and includes smoother trend lines for each site.
plotDT <- no2dt[!is.na(value), .(mean = mean(value, na.rm = TRUE)),
keyby = .(obsDate, site)]
p <- makeDotPlot(plotDT,
xVar = "obsDate",
yVar = "mean",
byVar = "site",
yLab = paste0("Mean daily ", yLab)
)
p <- p +
geom_smooth() + # add smoothed line
labs(caption = "Trend line = Generalized additive model (gam) with integrated smoothness estimation")
p
dt <- no2dt[dateTimeUTC > myParams$oneYearAgo]
t <- dt[value > myParams$hourlyNo2Threshold_WHO][order(-value)]
kableExtra::kable(caption = paste0("Values greater than WHO threshold (NO2 > ",
myParams$hourlyNo2Threshold_WHO , ", last 12 months)"),
head(t, 10)) %>%
kable_styling()
site | dateTimeUTC | variable | value | obsDate |
---|---|---|---|---|
p <- makeDotPlot(dt[!is.na(value)],
xVar = "dateTimeUTC",
yVar = "value",
byVar = "site",
yLab = yLab)
p <- p + geom_hline(yintercept = myParams$hourlyNo2Threshold_WHO) +
labs(caption = "Reference line = WHO hourly threshold")
p +
geom_smooth() + # add smoothed line
labs(caption = "Trend line = Generalized additive model (gam) with integrated smoothness estimation")
Figure 4.3 shows hourly values for all sites for the last 12 months. In this period there were 0 hours when the hourly Nitrogen Dioxide level breached the relevant WHO hourly threshold (200). The worst 10 cases (if any) are shown in Table 4.3.
Clearly there are winter peaks, the mean daily values show less variance (and less extremes) than the hourly data and there has also been a decreasing trend over time.
recentDT <- no2dt[!is.na(value) & obsDate > lubridate::date("2020-02-01")]
p <- makeDotPlot(recentDT,
xVar = "dateTimeUTC",
yVar = "value",
byVar = "site",
yLab = yLab)
p <- p +
geom_smooth() + # add smoothed line
labs(caption = "Trend line = Generalized additive model (gam) with integrated smoothness estimation")
p
Beware seasonal trends and weather effects
From WHO: https://www.who.int/news-room/fact-sheets/detail/ambient-(outdoor)-air-quality-and-health
"SO2 is a colourless gas with a sharp odour. It is produced from the burning of fossil fuels (coal and oil) and the smelting of mineral ores that contain sulfur. The main anthropogenic source of SO2 is the burning of sulfur-containing fossil fuels for domestic heating, power generation and motor vehicles.
Health effects
SO2 can affect the respiratory system and the functions of the lungs, and causes irritation of the eyes. Inflammation of the respiratory tract causes coughing, mucus secretion, aggravation of asthma and chronic bronchitis and makes people more prone to infections of the respiratory tract. Hospital admissions for cardiac disease and mortality increase on days with higher SO2 levels. When SO2 combines with water, it forms sulfuric acid; this is the main component of acid rain which is a cause of deforestation."
yLab <- "Sulphour Dioxide (ug/m3)"
so2dt <- lDT[variable == "so2"]
t <- so2dt[, .(mean = mean(value, na.rm = TRUE), sd = sd(value, na.rm = TRUE), min = min(value, na.rm = TRUE), max = max(value,
na.rm = TRUE)), keyby = .(site)]
kableExtra::kable(t, caption = "Summary of SO2 data") %>% kable_styling()
site | mean | sd | min | max |
---|---|---|---|---|
Southampton - A33 Roadside (near docks, AURN site) | NaN | NA | Inf | -Inf |
Southampton - Background (near city centre, AURN site) | 2.978233 | 3.254526 | -1.1 | 50.5 |
Southampton - Bitterne | NaN | NA | Inf | -Inf |
Southampton - Onslow Road (near RSH) | NaN | NA | Inf | -Inf |
Southampton - Redbridge | NaN | NA | Inf | -Inf |
Southampton - Victoria Road (Woolston) | NaN | NA | Inf | -Inf |
Figure 4.5 shows the availability and levels of the pollutant data over time.
t <- head(so2dt[value < 0], 10)
kableExtra::kable(t, caption = "Negative SO2 values (up to first 10)") %>% kable_styling()
site | dateTimeUTC | variable | value | obsDate |
---|---|---|---|---|
Southampton - Background (near city centre, AURN site) | 2018-02-03 19:00:00 | so2 | -0.9 | 2018-02-03 |
Southampton - Background (near city centre, AURN site) | 2018-02-04 22:00:00 | so2 | -0.7 | 2018-02-04 |
Southampton - Background (near city centre, AURN site) | 2018-02-08 13:00:00 | so2 | -0.2 | 2018-02-08 |
Southampton - Background (near city centre, AURN site) | 2018-02-08 14:00:00 | so2 | -0.8 | 2018-02-08 |
Southampton - Background (near city centre, AURN site) | 2018-03-23 00:00:00 | so2 | -0.4 | 2018-03-23 |
Southampton - Background (near city centre, AURN site) | 2018-03-23 01:00:00 | so2 | -0.4 | 2018-03-23 |
Southampton - Background (near city centre, AURN site) | 2018-07-02 14:00:00 | so2 | -0.5 | 2018-07-02 |
Southampton - Background (near city centre, AURN site) | 2018-07-02 22:00:00 | so2 | -0.4 | 2018-07-02 |
Southampton - Background (near city centre, AURN site) | 2018-07-02 23:00:00 | so2 | -0.5 | 2018-07-02 |
Southampton - Background (near city centre, AURN site) | 2018-07-28 22:00:00 | so2 | -0.7 | 2018-07-28 |
t <- table(so2dt[value < 0]$site)
kableExtra::kable(t, caption = "Negative SO2 values (count by site)") %>% kable_styling()
Var1 | Freq |
---|---|
Southampton - Background (near city centre, AURN site) | 14 |
# dt,xvar, yvar,fillVar, yLab
p <- makeTilePlot(so2dt, xVar = "dateTimeUTC", yVar = "site", fillVar = "value", yLab = yLab)
p
Figure 4.6 shows daily mean values for all sites over time and includes smoother trend lines for each site. The plit looks a bit odd… sensor issues?
plotDT <- so2dt[!is.na(value), .(mean = mean(value, na.rm = TRUE)),
keyby = .(obsDate, site)]
p <- makeDotPlot(plotDT,
xVar = "obsDate",
yVar = "mean",
byVar = "site",
yLab = paste0("Mean daily ", yLab)
)
# dailySo2Threshold_WHO
p <- p + geom_hline(yintercept = myParams$dailySo2Threshold_WHO) +
geom_smooth() + # add smoothed line
labs(caption = "Trend line = Generalized additive model (gam) with integrated smoothness estimation")
p
There is no hourly SO2 threshold - it is 10 minutes (500).
so2dt <- so2dt[dateTimeUTC > myParams$oneYearAgo]
# t <- so2dt[value > myParams$myParams$tenMSo2Threshold_WHO][order(-value)]
#
# kableExtra::kable(caption = paste0("Values greater than WHO 10 minute threshold (SO2 > ",
# myParams$tenMSo2Threshold_WHO , ", last 12 months)"),
# head(t, 10)) %>%
# kable_styling()
p <- makeDotPlot(so2dt[!is.na(value)],
xVar = "dateTimeUTC",
yVar = "value",
byVar = "site",
yLab = yLab)
p <- p +
geom_smooth() + # add smoothed line
labs(caption = "Trend line = Generalized additive model (gam) with integrated smoothness estimation")
p
recentDT <- so2dt[!is.na(value) & obsDate > lubridate::date("2020-02-01")]
p <- makeDotPlot(recentDT,
xVar = "dateTimeUTC",
yVar = "value",
byVar = "site",
yLab = yLab)
p <- p +
geom_smooth() + # add smoothed line
labs(caption = "Trend line = Generalized additive model (gam) with integrated smoothness estimation")
p
Beware seasonal trends and weather effects
From WHO: https://www.who.int/news-room/fact-sheets/detail/ambient-(outdoor)-air-quality-and-health
"PM is a common proxy indicator for air pollution. It affects more people than any other pollutant. The major components of PM are sulfate, nitrates, ammonia, sodium chloride, black carbon, mineral dust and water. It consists of a complex mixture of solid and liquid particles of organic and inorganic substances suspended in the air. While particles with a diameter of 10 microns or less, (≤ PM10) can penetrate and lodge deep inside the lungs, the even more health-damaging particles are those with a diameter of 2.5 microns or less, (≤ PM2.5). PM2.5 can penetrate the lung barrier and enter the blood system. Chronic exposure to particles contributes to the risk of developing cardiovascular and respiratory diseases, as well as of lung cancer.
There is a close, quantitative relationship between exposure to high concentrations of small particulates (PM10 and PM2.5) and increased mortality or morbidity, both daily and over time. Conversely, when concentrations of small and fine particulates are reduced, related mortality will also go down – presuming other factors remain the same. This allows policy-makers to project the population health improvements that could be expected if particulate air pollution is reduced."
PM 10 data: has more sensors and wider coverage than PM2.5
yLab <- "PM 10 (ug/m3)"
pm10dt <- lDT[variable == "pm10"]
t <- pm10dt[, .(mean = mean(value, na.rm = TRUE), sd = sd(value, na.rm = TRUE), min = min(value, na.rm = TRUE), max = max(value,
na.rm = TRUE)), keyby = .(site)]
kableExtra::kable(t, caption = "Summary of pm10 data") %>% kable_styling()
site | mean | sd | min | max |
---|---|---|---|---|
Southampton - A33 Roadside (near docks, AURN site) | 18.97420 | 14.23183 | 0.0 | 761.6 |
Southampton - Background (near city centre, AURN site) | 18.05802 | 11.30446 | -3.5 | 344.1 |
Southampton - Bitterne | NaN | NA | Inf | -Inf |
Southampton - Onslow Road (near RSH) | NaN | NA | Inf | -Inf |
Southampton - Redbridge | NaN | NA | Inf | -Inf |
Southampton - Victoria Road (Woolston) | NaN | NA | Inf | -Inf |
Table 4.6 suggests that there may be a few (19) negative values. These are shown in 4.7 while 4.9 shows data availability and PM 10 levels over time at each site.
t <- head(pm10dt[value < 0], nrow(pm10dt[value < 0]))
kableExtra::kable(head(t), caption = "Negative PM10 values - first 6") %>% kable_styling()
site | dateTimeUTC | variable | value | obsDate |
---|---|---|---|---|
Southampton - Background (near city centre, AURN site) | 2016-04-16 10:00:00 | pm10 | -0.9 | 2016-04-16 |
Southampton - Background (near city centre, AURN site) | 2016-06-12 06:00:00 | pm10 | -2.0 | 2016-06-12 |
Southampton - Background (near city centre, AURN site) | 2016-06-12 07:00:00 | pm10 | -2.1 | 2016-06-12 |
Southampton - Background (near city centre, AURN site) | 2017-06-11 03:00:00 | pm10 | -1.2 | 2017-06-11 |
Southampton - Background (near city centre, AURN site) | 2017-06-30 11:00:00 | pm10 | -0.1 | 2017-06-30 |
Southampton - Background (near city centre, AURN site) | 2017-07-04 02:00:00 | pm10 | -0.6 | 2017-07-04 |
p <- makeTilePlot(lDT[variable == "pm10"], xVar = "dateTimeUTC", yVar = "site", fillVar = "value", yLab = yLab)
p
plotDT <- pm10dt[!is.na(value), .(mean = mean(value, na.rm = TRUE)),
keyby = .(obsDate, site)]
extremePm10Daily <- plotDT[mean > myParams$dailyPm10Threshold_WHO][order(-mean)]
kableExtra::kable(caption = paste0("10 highest values greater than WHO threshold (PM 10 > ",
myParams$dailyPm10Threshold_WHO , ")"),
digits = 2,
head(extremePm10Daily, 10)) %>%
kable_styling()
obsDate | site | mean |
---|---|---|
2016-08-09 | Southampton - A33 Roadside (near docks, AURN site) | 144.48 |
2017-06-19 | Southampton - A33 Roadside (near docks, AURN site) | 143.66 |
2017-05-05 | Southampton - A33 Roadside (near docks, AURN site) | 88.94 |
2016-09-19 | Southampton - A33 Roadside (near docks, AURN site) | 88.46 |
2016-11-30 | Southampton - A33 Roadside (near docks, AURN site) | 79.25 |
2016-03-12 | Southampton - A33 Roadside (near docks, AURN site) | 72.00 |
2017-01-22 | Southampton - A33 Roadside (near docks, AURN site) | 66.86 |
2019-02-27 | Southampton - Background (near city centre, AURN site) | 64.67 |
2019-02-27 | Southampton - A33 Roadside (near docks, AURN site) | 60.60 |
2019-04-17 | Southampton - Background (near city centre, AURN site) | 58.37 |
p <- makeDotPlot(plotDT,
xVar = "obsDate",
yVar = "mean",
byVar = "site",
yLab = paste0("Mean daily ", yLab)
)
p <- p +
geom_hline(yintercept = myParams$dailyPm10Threshold_WHO) +
geom_smooth() + # add smoothed line
labs(caption = "Trend line = Generalized additive model (gam) with integrated smoothness estimation\nReference line = WHO PM10 mean daily threshold")
plotly::ggplotly(p) # for interaction
nDaysOverThreshold <- uniqueN(extremePm10Daily$obsDate)
nDays <- uniqueN(plotDT$obsDate) # need to count days not site-days
Figure 4.10 shows daily values for all sites across the entire dataset and indicates the 19 days (1.3%) that breached the WHO PM10 daily mean exposure threshold (50) - see Table 4.8.
pm101yeardt <- pm10dt[dateTimeUTC > myParams$oneYearAgo]
t <- pm101yeardt[value > 100][order(-value)]
kableExtra::kable(caption = "10 highest hourly values (PM 10 > 100)", head(t)) %>% kable_styling()
site | dateTimeUTC | variable | value | obsDate |
---|---|---|---|---|
Southampton - Background (near city centre, AURN site) | 2019-10-27 20:00:00 | pm10 | 252.5 | 2019-10-27 |
Southampton - Background (near city centre, AURN site) | 2019-12-02 19:00:00 | pm10 | 174.6 | 2019-12-02 |
Southampton - Background (near city centre, AURN site) | 2019-10-27 19:00:00 | pm10 | 162.2 | 2019-10-27 |
Southampton - Background (near city centre, AURN site) | 2019-12-02 18:00:00 | pm10 | 114.3 | 2019-12-02 |
Southampton - Background (near city centre, AURN site) | 2019-12-02 21:00:00 | pm10 | 109.1 | 2019-12-02 |
Southampton - Background (near city centre, AURN site) | 2019-03-29 22:00:00 | pm10 | 102.8 | 2019-03-29 |
p <- makeDotPlot(pm101yeardt[!is.na(value)], xVar = "dateTimeUTC", yVar = "value", byVar = "site", yLab = yLab)
p <- p + labs(caption = "NB: There is no WHO PM10 hourly threshold")
p
Figure 4.11 shows hourly PM 10 values for all sites over the last 12 months and suggests there may be outliers (see Table 4.9).
recentDT <- pm10dt[!is.na(value) & obsDate > lubridate::date("2020-02-01")]
p <- makeDotPlot(recentDT,
xVar = "dateTimeUTC",
yVar = "value",
byVar = "site",
yLab = yLab)
p <- p +
geom_smooth() + # add smoothed line
labs(caption = "Trend line = Generalized additive model (gam) with integrated smoothness estimation")
p
Beware seasonal trends and weather effects
From WHO: https://www.who.int/news-room/fact-sheets/detail/ambient-(outdoor)-air-quality-and-health
“Small particulate pollution has health impacts even at very low concentrations – indeed no threshold has been identified below which no damage to health is observed. Therefore, the WHO 2005 guideline limits aimed to achieve the lowest concentrations of PM possible.”
yLab <- "PM 2.5 (ug/m3)"
pm25dt <- lDT[variable == "pm2_5"]
t <- dt[!is.na(value), .(mean = mean(value, na.rm = TRUE), sd = sd(value, na.rm = TRUE), min = min(value, na.rm = TRUE),
max = max(value, na.rm = TRUE)), keyby = .(site)]
kableExtra::kable(t, caption = "Summary of pm2_5 data") %>% kable_styling()
site | mean | sd | min | max |
---|---|---|---|---|
Southampton - A33 Roadside (near docks, AURN site) | 28.25345 | 20.21993 | 0.0 | 155.3 |
Southampton - Background (near city centre, AURN site) | 26.28683 | 15.77316 | 2.3 | 144.2 |
Southampton - Onslow Road (near RSH) | 38.52754 | 18.36950 | 3.3 | 144.5 |
Southampton - Victoria Road (Woolston) | 29.05430 | 17.86656 | 0.0 | 147.7 |
Table 4.10 suggests that there may be a few (89) negative values. These are shown in Table 4.11 while Figure 4.13 shows data availability and PM 2.5 levels over time at each site.
t <- head(pm25dt[value < 0], nrow(pm25dt))
kableExtra::kable(head(t), caption = "Negative pm2_5 values - first 6") %>% kable_styling()
site | dateTimeUTC | variable | value | obsDate |
---|---|---|---|---|
Southampton - Background (near city centre, AURN site) | 2016-01-02 17:00:00 | pm2_5 | -0.8 | 2016-01-02 |
Southampton - Background (near city centre, AURN site) | 2016-01-04 03:00:00 | pm2_5 | -0.9 | 2016-01-04 |
Southampton - Background (near city centre, AURN site) | 2016-01-04 23:00:00 | pm2_5 | -0.3 | 2016-01-04 |
Southampton - Background (near city centre, AURN site) | 2016-01-05 01:00:00 | pm2_5 | -1.0 | 2016-01-05 |
Southampton - Background (near city centre, AURN site) | 2016-01-09 22:00:00 | pm2_5 | -0.3 | 2016-01-09 |
Southampton - Background (near city centre, AURN site) | 2016-01-09 23:00:00 | pm2_5 | -0.9 | 2016-01-09 |
p <- makeTilePlot(pm25dt, xVar = "dateTimeUTC", yVar = "site", fillVar = "value", yLab = yLab)
p
plotDT <- pm25dt[!is.na(value), .(mean = mean(value, na.rm = TRUE)),
keyby = .(obsDate, site)]
extremePm25Daily <- plotDT[mean > myParams$dailyPm2.5Threshold_WHO][order(-mean)]
kableExtra::kable(caption = paste0("6 highest values greater than WHO threshold (PM 2.5 > ",
myParams$dailyPm2.5Threshold_WHO , ")"),
digits = 2,
head(extremePm25Daily)) %>%
kable_styling()
obsDate | site | mean |
---|---|---|
2016-03-12 | Southampton - Background (near city centre, AURN site) | 64.79 |
2019-04-17 | Southampton - Background (near city centre, AURN site) | 49.04 |
2016-03-13 | Southampton - Background (near city centre, AURN site) | 47.79 |
2019-04-07 | Southampton - Background (near city centre, AURN site) | 46.90 |
2019-02-27 | Southampton - Background (near city centre, AURN site) | 43.64 |
2019-03-29 | Southampton - Background (near city centre, AURN site) | 43.60 |
p <- makeDotPlot(plotDT,
xVar = "obsDate",
yVar = "mean",
byVar = "site",
yLab = paste0("Mean daily ", yLab)
)
p <- p +
geom_hline(yintercept = myParams$dailyPm2.5Threshold_WHO) +
geom_smooth() + #add smoothed line
labs(caption = "Trend line = Generalized additive model (gam) with integrated smoothness estimation\nReference line = WHO daily PM2.5 threshold")
p
nDaysOverThreshold <- uniqueN(extremePm25Daily$obsDate)
nDays <- uniqueN(plotDT$obsDate) # need to count days not site-days
Figure 4.14 shows daily values for all sites across the dataset and indicates that the WHO PM2_5 daily mean exposure threshold (25) was breached on 84 days (6.9 %). The 6 worst cases are shown in Table 4.12.
dt <- pm25dt[dateTimeUTC > myParams$oneYearAgo]
t <- pm25dt[value > 50][order(-value)]
kableExtra::kable(caption = "Extreme hourly values (PM 2.5 > 50, last 12 months, worst 6)", head(t)) %>% kable_styling()
site | dateTimeUTC | variable | value | obsDate |
---|---|---|---|---|
Southampton - Background (near city centre, AURN site) | 2016-01-01 00:00:00 | pm2_5 | 289.2 | 2016-01-01 |
Southampton - Background (near city centre, AURN site) | 2019-10-27 20:00:00 | pm2_5 | 239.1 | 2019-10-27 |
Southampton - Background (near city centre, AURN site) | 2019-12-02 19:00:00 | pm2_5 | 167.6 | 2019-12-02 |
Southampton - Background (near city centre, AURN site) | 2016-01-01 01:00:00 | pm2_5 | 141.8 | 2016-01-01 |
Southampton - Background (near city centre, AURN site) | 2019-10-27 19:00:00 | pm2_5 | 140.4 | 2019-10-27 |
Southampton - Background (near city centre, AURN site) | 2019-12-02 18:00:00 | pm2_5 | 109.9 | 2019-12-02 |
p <- makeDotPlot(dt[!is.na(value)], xVar = "dateTimeUTC", yVar = "value", byVar = "site", yLab = yLab)
p <- p + labs(caption = "NB: There is no WHO PM2.5 hourly threshold")
p
Figure 4.15 shows hourly values for all sites for the last 12 months while Table 4.13 reports the 6 worst hours.
recentDT <- pm25dt[!is.na(value) & obsDate > lubridate::date("2020-02-01")]
p <- makeDotPlot(recentDT,
xVar = "dateTimeUTC",
yVar = "value",
byVar = "site",
yLab = yLab)
p <- p +
geom_smooth() + # add smoothed line
labs(caption = "Trend line = Generalized additive model (gam) with integrated smoothness estimation")
p
Beware seasonal trends and weather effects
skimr::skim(origDataDT)
Name | origDataDT |
Number of rows | 262398 |
Number of columns | 10 |
_______________________ | |
Column type frequency: | |
character | 1 |
logical | 1 |
numeric | 7 |
POSIXct | 1 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
site | 0 | 1 | 22 | 54 | 0 | 6 | 0 |
Variable type: logical
skim_variable | n_missing | complete_rate | mean | count |
---|---|---|---|---|
co | 262398 | 0 | NaN | : |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
no | 133796 | 0.49 | 26.18 | 39.87 | -5.0 | 4.5 | 13.0 | 31.6 | 746.3 | ▇▁▁▁▁ |
no2 | 133823 | 0.49 | 36.63 | 22.44 | -1.3 | 20.1 | 32.7 | 48.5 | 287.5 | ▇▂▁▁▁ |
nox | 179301 | 0.32 | 76.00 | 74.73 | -1.4 | 32.2 | 56.4 | 93.5 | 1431.8 | ▇▁▁▁▁ |
pm10 | 202132 | 0.23 | 18.57 | 13.04 | -3.5 | 10.8 | 15.7 | 23.0 | 761.6 | ▇▁▁▁▁ |
oz | 232549 | 0.11 | 41.06 | 23.14 | -0.2 | 24.3 | 41.9 | 56.9 | 174.1 | ▆▇▂▁▁ |
pm2_5 | 233766 | 0.11 | 11.99 | 9.46 | -4.0 | 6.5 | 9.3 | 14.3 | 289.2 | ▇▁▁▁▁ |
so2 | 232739 | 0.11 | 2.98 | 3.25 | -1.1 | 1.0 | 1.7 | 3.6 | 50.5 | ▇▁▁▁▁ |
Variable type: POSIXct
skim_variable | n_missing | complete_rate | min | max | median | n_unique |
---|---|---|---|---|---|---|
dateTimeUTC | 0 | 1 | 2016-01-01 | 2020-12-31 | 2018-07-02 | 43733 |
skimr::skim(lDT)
Name | lDT |
Number of rows | 1836786 |
Number of columns | 5 |
_______________________ | |
Column type frequency: | |
character | 1 |
Date | 1 |
factor | 1 |
numeric | 1 |
POSIXct | 1 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
site | 0 | 1 | 22 | 54 | 0 | 6 | 0 |
Variable type: Date
skim_variable | n_missing | complete_rate | min | max | median | n_unique |
---|---|---|---|---|---|---|
obsDate | 0 | 1 | 2016-01-01 | 2020-12-31 | 2018-07-02 | 1827 |
Variable type: factor
skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
---|---|---|---|---|---|
variable | 0 | 1 | FALSE | 7 | co: 262398, no2: 262398, nox: 262398, oz: 262398 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
value | 1476708 | 0.2 | 38.33 | 45.85 | -4 | 12.5 | 27 | 49.6 | 1431.8 | ▇▁▁▁▁ |
Variable type: POSIXct
skim_variable | n_missing | complete_rate | min | max | median | n_unique |
---|---|---|---|---|---|---|
dateTimeUTC | 0 | 1 | 2016-01-01 | 2020-12-31 | 2018-07-02 | 43733 |
t <- lDT[variable == "no2"]
skimr::skim(t)
Name | t |
Number of rows | 262398 |
Number of columns | 5 |
_______________________ | |
Column type frequency: | |
character | 1 |
Date | 1 |
factor | 1 |
numeric | 1 |
POSIXct | 1 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
site | 0 | 1 | 22 | 54 | 0 | 6 | 0 |
Variable type: Date
skim_variable | n_missing | complete_rate | min | max | median | n_unique |
---|---|---|---|---|---|---|
obsDate | 0 | 1 | 2016-01-01 | 2020-12-31 | 2018-07-02 | 1827 |
Variable type: factor
skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
---|---|---|---|---|---|
variable | 0 | 1 | FALSE | 1 | no2: 262398, co: 0, nox: 0, oz: 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
value | 133823 | 0.49 | 36.63 | 22.44 | -1.3 | 20.1 | 32.7 | 48.5 | 287.5 | ▇▂▁▁▁ |
Variable type: POSIXct
skim_variable | n_missing | complete_rate | min | max | median | n_unique |
---|---|---|---|---|---|---|
dateTimeUTC | 0 | 1 | 2016-01-01 | 2020-12-31 | 2018-07-02 | 43733 |
t <- lDT[variable == "no2" & value > myParams$hourlyNo2Threshold_WHO][order(-value)]
kableExtra::kable(caption = paste0("Values greater than WHO threshold (NO2 > ", myParams$hourlyNo2Threshold_WHO, ")"),
t) %>% kable_styling()
site | dateTimeUTC | variable | value | obsDate |
---|---|---|---|---|
Southampton - Victoria Road (Woolston) | 2016-11-30 17:00:00 | no2 | 287.5 | 2016-11-30 |
Southampton - Victoria Road (Woolston) | 2016-11-30 19:00:00 | no2 | 275.3 | 2016-11-30 |
Southampton - Victoria Road (Woolston) | 2016-11-30 18:00:00 | no2 | 268.7 | 2016-11-30 |
Southampton - Victoria Road (Woolston) | 2017-01-05 18:00:00 | no2 | 251.6 | 2017-01-05 |
Southampton - Victoria Road (Woolston) | 2017-01-05 17:00:00 | no2 | 247.3 | 2017-01-05 |
Southampton - Victoria Road (Woolston) | 2017-01-24 18:00:00 | no2 | 243.5 | 2017-01-24 |
Southampton - Victoria Road (Woolston) | 2017-01-24 19:00:00 | no2 | 242.0 | 2017-01-24 |
Southampton - Onslow Road (near RSH) | 2016-03-08 09:00:00 | no2 | 241.3 | 2016-03-08 |
Southampton - Victoria Road (Woolston) | 2017-01-03 08:00:00 | no2 | 234.4 | 2017-01-03 |
Southampton - Victoria Road (Woolston) | 2017-01-03 09:00:00 | no2 | 232.8 | 2017-01-03 |
Southampton - Victoria Road (Woolston) | 2017-01-05 19:00:00 | no2 | 226.6 | 2017-01-05 |
Southampton - Victoria Road (Woolston) | 2016-11-30 16:00:00 | no2 | 222.6 | 2016-11-30 |
Southampton - Victoria Road (Woolston) | 2016-12-29 09:00:00 | no2 | 218.7 | 2016-12-29 |
Southampton - Onslow Road (near RSH) | 2016-03-08 08:00:00 | no2 | 216.0 | 2016-03-08 |
Southampton - Victoria Road (Woolston) | 2017-01-05 20:00:00 | no2 | 214.3 | 2017-01-05 |
Southampton - Victoria Road (Woolston) | 2017-01-24 20:00:00 | no2 | 212.7 | 2017-01-24 |
Southampton - Victoria Road (Woolston) | 2016-11-30 09:00:00 | no2 | 209.9 | 2016-11-30 |
Southampton - Onslow Road (near RSH) | 2016-03-12 22:00:00 | no2 | 208.5 | 2016-03-12 |
Southampton - Onslow Road (near RSH) | 2016-03-08 07:00:00 | no2 | 208.1 | 2016-03-08 |
Southampton - Victoria Road (Woolston) | 2016-11-30 20:00:00 | no2 | 207.0 | 2016-11-30 |
Southampton - Onslow Road (near RSH) | 2016-02-19 08:00:00 | no2 | 206.3 | 2016-02-19 |
Southampton - Victoria Road (Woolston) | 2016-01-19 19:00:00 | no2 | 204.4 | 2016-01-19 |
Southampton - Onslow Road (near RSH) | 2016-03-21 08:00:00 | no2 | 202.8 | 2016-03-21 |
t <- lDT[variable == "pm10"]
skimr::skim(t)
Name | t |
Number of rows | 262398 |
Number of columns | 5 |
_______________________ | |
Column type frequency: | |
character | 1 |
Date | 1 |
factor | 1 |
numeric | 1 |
POSIXct | 1 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
site | 0 | 1 | 22 | 54 | 0 | 6 | 0 |
Variable type: Date
skim_variable | n_missing | complete_rate | min | max | median | n_unique |
---|---|---|---|---|---|---|
obsDate | 0 | 1 | 2016-01-01 | 2020-12-31 | 2018-07-02 | 1827 |
Variable type: factor
skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
---|---|---|---|---|---|
variable | 0 | 1 | FALSE | 1 | pm1: 262398, co: 0, no2: 0, nox: 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
value | 202132 | 0.23 | 18.57 | 13.04 | -3.5 | 10.8 | 15.7 | 23 | 761.6 | ▇▁▁▁▁ |
Variable type: POSIXct
skim_variable | n_missing | complete_rate | min | max | median | n_unique |
---|---|---|---|---|---|---|
dateTimeUTC | 0 | 1 | 2016-01-01 | 2020-12-31 | 2018-07-02 | 43733 |
kableExtra::kable(caption = paste0("PM 10 values greater than WHO threshold (NO2 > ", myParams$dailyPm10Threshold_WHO,
")"), extremePm10Daily) %>% kable_styling()
obsDate | site | mean |
---|---|---|
2016-08-09 | Southampton - A33 Roadside (near docks, AURN site) | 144.48125 |
2017-06-19 | Southampton - A33 Roadside (near docks, AURN site) | 143.66000 |
2017-05-05 | Southampton - A33 Roadside (near docks, AURN site) | 88.94348 |
2016-09-19 | Southampton - A33 Roadside (near docks, AURN site) | 88.45625 |
2016-11-30 | Southampton - A33 Roadside (near docks, AURN site) | 79.25417 |
2016-03-12 | Southampton - A33 Roadside (near docks, AURN site) | 72.00000 |
2017-01-22 | Southampton - A33 Roadside (near docks, AURN site) | 66.86250 |
2019-02-27 | Southampton - Background (near city centre, AURN site) | 64.67143 |
2019-02-27 | Southampton - A33 Roadside (near docks, AURN site) | 60.59524 |
2019-04-17 | Southampton - Background (near city centre, AURN site) | 58.37083 |
2016-12-01 | Southampton - A33 Roadside (near docks, AURN site) | 54.80833 |
2017-01-26 | Southampton - A33 Roadside (near docks, AURN site) | 53.90000 |
2019-03-29 | Southampton - Background (near city centre, AURN site) | 53.69167 |
2017-12-19 | Southampton - Background (near city centre, AURN site) | 53.66250 |
2016-12-06 | Southampton - A33 Roadside (near docks, AURN site) | 53.45000 |
2019-04-17 | Southampton - A33 Roadside (near docks, AURN site) | 53.08750 |
2019-04-07 | Southampton - Background (near city centre, AURN site) | 52.94167 |
2018-04-21 | Southampton - Background (near city centre, AURN site) | 52.32083 |
2019-03-30 | Southampton - Background (near city centre, AURN site) | 51.66250 |
2019-04-22 | Southampton - Background (near city centre, AURN site) | 50.86250 |
2019-02-23 | Southampton - Background (near city centre, AURN site) | 50.21667 |
t <- lDT[variable == "pm2_5"]
skimr::skim(t)
Name | t |
Number of rows | 262398 |
Number of columns | 5 |
_______________________ | |
Column type frequency: | |
character | 1 |
Date | 1 |
factor | 1 |
numeric | 1 |
POSIXct | 1 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
site | 0 | 1 | 22 | 54 | 0 | 6 | 0 |
Variable type: Date
skim_variable | n_missing | complete_rate | min | max | median | n_unique |
---|---|---|---|---|---|---|
obsDate | 0 | 1 | 2016-01-01 | 2020-12-31 | 2018-07-02 | 1827 |
Variable type: factor
skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
---|---|---|---|---|---|
variable | 0 | 1 | FALSE | 1 | pm2: 262398, co: 0, no2: 0, nox: 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
value | 233766 | 0.11 | 11.99 | 9.46 | -4 | 6.5 | 9.3 | 14.3 | 289.2 | ▇▁▁▁▁ |
Variable type: POSIXct
skim_variable | n_missing | complete_rate | min | max | median | n_unique |
---|---|---|---|---|---|---|
dateTimeUTC | 0 | 1 | 2016-01-01 | 2020-12-31 | 2018-07-02 | 43733 |
kableExtra::kable(caption = paste0("PM 2.5 values greater than WHO threshold (NO2 > ", myParams$dailyPm2.5Threshold_WHO,
")"), extremePm25Daily) %>% kable_styling()
obsDate | site | mean |
---|---|---|
2016-03-12 | Southampton - Background (near city centre, AURN site) | 64.79167 |
2019-04-17 | Southampton - Background (near city centre, AURN site) | 49.04167 |
2016-03-13 | Southampton - Background (near city centre, AURN site) | 47.79167 |
2019-04-07 | Southampton - Background (near city centre, AURN site) | 46.90417 |
2019-02-27 | Southampton - Background (near city centre, AURN site) | 43.63810 |
2019-03-29 | Southampton - Background (near city centre, AURN site) | 43.59583 |
2019-04-22 | Southampton - Background (near city centre, AURN site) | 42.92500 |
2017-02-12 | Southampton - Background (near city centre, AURN site) | 42.24583 |
2018-04-21 | Southampton - Background (near city centre, AURN site) | 41.96250 |
2016-03-11 | Southampton - Background (near city centre, AURN site) | 41.80000 |
2019-04-16 | Southampton - Background (near city centre, AURN site) | 41.77500 |
2019-03-30 | Southampton - Background (near city centre, AURN site) | 40.80000 |
2017-12-19 | Southampton - Background (near city centre, AURN site) | 40.45833 |
2016-01-20 | Southampton - Background (near city centre, AURN site) | 39.66667 |
2017-09-26 | Southampton - Background (near city centre, AURN site) | 39.12083 |
2017-03-27 | Southampton - Background (near city centre, AURN site) | 38.15833 |
2019-04-08 | Southampton - Background (near city centre, AURN site) | 37.65833 |
2019-04-18 | Southampton - Background (near city centre, AURN site) | 37.00417 |
2019-02-15 | Southampton - Background (near city centre, AURN site) | 36.48571 |
2019-02-23 | Southampton - Background (near city centre, AURN site) | 35.80833 |
2018-05-08 | Southampton - Background (near city centre, AURN site) | 35.52917 |
2018-05-07 | Southampton - Background (near city centre, AURN site) | 35.44583 |
2017-02-13 | Southampton - Background (near city centre, AURN site) | 35.42083 |
2020-03-26 | Southampton - Background (near city centre, AURN site) | 34.23846 |
2018-05-06 | Southampton - Background (near city centre, AURN site) | 34.07917 |
2016-03-17 | Southampton - Background (near city centre, AURN site) | 33.73333 |
2018-04-11 | Southampton - Background (near city centre, AURN site) | 33.45000 |
2019-01-24 | Southampton - Background (near city centre, AURN site) | 33.33750 |
2018-04-14 | Southampton - Background (near city centre, AURN site) | 33.20417 |
2018-12-27 | Southampton - Background (near city centre, AURN site) | 33.03333 |
2018-11-22 | Southampton - Background (near city centre, AURN site) | 32.90833 |
2017-02-11 | Southampton - Background (near city centre, AURN site) | 32.72917 |
2017-04-08 | Southampton - Background (near city centre, AURN site) | 32.65833 |
2019-12-02 | Southampton - Background (near city centre, AURN site) | 32.61667 |
2020-01-21 | Southampton - Background (near city centre, AURN site) | 32.60417 |
2016-03-23 | Southampton - Background (near city centre, AURN site) | 32.31667 |
2018-11-23 | Southampton - Background (near city centre, AURN site) | 32.30417 |
2019-12-03 | Southampton - Background (near city centre, AURN site) | 32.15417 |
2018-05-26 | Southampton - Background (near city centre, AURN site) | 32.12083 |
2017-11-03 | Southampton - Background (near city centre, AURN site) | 31.53333 |
2019-04-15 | Southampton - Background (near city centre, AURN site) | 31.52917 |
2017-04-09 | Southampton - Background (near city centre, AURN site) | 31.25417 |
2019-04-23 | Southampton - Background (near city centre, AURN site) | 31.11250 |
2016-01-01 | Southampton - Background (near city centre, AURN site) | 30.73750 |
2017-03-24 | Southampton - Background (near city centre, AURN site) | 30.70833 |
2019-02-24 | Southampton - Background (near city centre, AURN site) | 30.55417 |
2018-11-24 | Southampton - Background (near city centre, AURN site) | 30.48333 |
2017-09-27 | Southampton - Background (near city centre, AURN site) | 30.29583 |
2018-04-12 | Southampton - Background (near city centre, AURN site) | 30.21667 |
2017-11-02 | Southampton - Background (near city centre, AURN site) | 30.10833 |
2019-03-31 | Southampton - Background (near city centre, AURN site) | 29.72500 |
2019-10-27 | Southampton - Background (near city centre, AURN site) | 29.64167 |
2018-10-05 | Southampton - Background (near city centre, AURN site) | 29.54167 |
2019-02-25 | Southampton - Background (near city centre, AURN site) | 29.40000 |
2018-03-25 | Southampton - Background (near city centre, AURN site) | 29.12083 |
2019-04-21 | Southampton - Background (near city centre, AURN site) | 28.97083 |
2017-02-14 | Southampton - Background (near city centre, AURN site) | 28.96250 |
2019-03-28 | Southampton - Background (near city centre, AURN site) | 28.46250 |
2019-04-19 | Southampton - Background (near city centre, AURN site) | 28.36250 |
2016-01-19 | Southampton - Background (near city centre, AURN site) | 28.12917 |
2017-02-10 | Southampton - Background (near city centre, AURN site) | 27.43333 |
2017-08-28 | Southampton - Background (near city centre, AURN site) | 27.42500 |
2019-01-04 | Southampton - Background (near city centre, AURN site) | 27.05000 |
2018-11-05 | Southampton - Background (near city centre, AURN site) | 26.94167 |
2019-02-26 | Southampton - Background (near city centre, AURN site) | 26.87391 |
2018-01-12 | Southampton - Background (near city centre, AURN site) | 26.85417 |
2018-12-28 | Southampton - Background (near city centre, AURN site) | 26.82500 |
2016-05-07 | Southampton - Background (near city centre, AURN site) | 26.77500 |
2019-01-21 | Southampton - Background (near city centre, AURN site) | 26.65000 |
2019-04-20 | Southampton - Background (near city centre, AURN site) | 26.57917 |
2017-06-21 | Southampton - Background (near city centre, AURN site) | 26.56667 |
2017-03-28 | Southampton - Background (near city centre, AURN site) | 26.47500 |
2019-04-06 | Southampton - Background (near city centre, AURN site) | 26.32917 |
2020-01-20 | Southampton - Background (near city centre, AURN site) | 26.30417 |
2020-01-22 | Southampton - Background (near city centre, AURN site) | 26.27083 |
2018-05-20 | Southampton - Background (near city centre, AURN site) | 26.03333 |
2018-05-24 | Southampton - Background (near city centre, AURN site) | 25.93750 |
2017-11-01 | Southampton - Background (near city centre, AURN site) | 25.77500 |
2016-05-12 | Southampton - Background (near city centre, AURN site) | 25.75000 |
2018-04-19 | Southampton - Background (near city centre, AURN site) | 25.75000 |
2017-06-20 | Southampton - Background (near city centre, AURN site) | 25.74167 |
2018-05-29 | Southampton - Background (near city centre, AURN site) | 25.70833 |
2019-12-04 | Southampton - Background (near city centre, AURN site) | 25.51304 |
2017-05-06 | Southampton - Background (near city centre, AURN site) | 25.04167 |
Report generated using knitr in RStudio with R version 3.6.3 (2020-02-29) running on x86_64-apple-darwin15.6.0 (Darwin Kernel Version 19.4.0: Wed Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64).
t <- proc.time() - myParams$startTime
elapsed <- t[[3]]
Analysis completed in 60.002 seconds ( 1 minutes).
R packages used:
Arino de la Rubia, Eduardo, Hao Zhu, Shannon Ellis, Elin Waring, and Michael Quinn. 2017. Skimr: Skimr. https://github.com/ropenscilabs/skimr.
Dowle, M, A Srinivasan, T Short, S Lianoglou with contributions from R Saporta, and E Antonyan. 2015. Data.table: Extension of Data.frame. https://CRAN.R-project.org/package=data.table.
Grolemund, Garrett, and Hadley Wickham. 2011. “Dates and Times Made Easy with lubridate.” Journal of Statistical Software 40 (3): 1–25. http://www.jstatsoft.org/v40/i03/.
Müller, Kirill. 2017. Here: A Simpler Way to Find Your Files. https://CRAN.R-project.org/package=here.
Sievert, Carson, Chris Parmer, Toby Hocking, Scott Chamberlain, Karthik Ram, Marianne Corvellec, and Pedro Despouy. 2016. Plotly: Create Interactive Web Graphics via ’Plotly.js’. https://CRAN.R-project.org/package=plotly.
Wickham, Hadley. 2009. Ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. http://ggplot2.org.
Zhu, Hao. 2018. KableExtra: Construct Complex Table with ’Kable’ and Pipe Syntax. https://CRAN.R-project.org/package=kableExtra.