1 About

1.1 Contributions

Please note that authorship is alphabetical. Contributions are listed below - see github for details and who to blame for what :-).

1.3 Citation

If you wish to refer to any of the material from this report please cite as:

  • Anderson, B., (2020) Air Quality in Southampton (UK): Exploring the data , University of Southampton: Southampton, UK.

Report circulation:

  • Public

Report purpose:

This work is (c) 2020 the University of Southampton.

2 Introduction

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()
Table 2.1: Dates data != NA available by site and measure
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

3 Summarise data

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()
Table 3.1: Mean values per site (NaN indicates not measured)
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.

4 Analysis

In this section we present graphical analysis of the previoulsy downloaded data. Note this is just a snapshot of the data available.

4.1 Nitrogen Dioxide

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()
Table 4.1: Summary of NO2 data
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()
Table 4.2: Negative NO2 values (up to first 10)
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()
Table 4.2: Negative NO2 values (count by site)
Var1 Freq
Southampton - Victoria Road (Woolston) 5
# dt,xvar, yvar,fillVar, yLab
p <- makeTilePlot(no2dt, xVar = "dateTimeUTC", yVar = "site", fillVar = "value", yLab = yLab)

p
Nitrogen Dioxide data availability and levels over time

Figure 4.1: Nitrogen Dioxide data availability and levels over time

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
Nitrogen Dioxide levels, Southampton (daily mean

Figure 4.2: Nitrogen Dioxide levels, Southampton (daily mean

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()
Table 4.3: Values greater than WHO threshold (NO2 > 200, last 12 months)
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")
Nitrogen Dioxide levels, Southampton (hourly, last 12 months)

Figure 4.3: Nitrogen Dioxide levels, Southampton (hourly, last 12 months)

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
Nitrogen Dioxide levels, Southampton (hourly, since Feb 1st 2020

Figure 4.4: Nitrogen Dioxide levels, Southampton (hourly, since Feb 1st 2020

Beware seasonal trends and weather effects

4.2 Sulphour Dioxide

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()
Table 4.4: Summary of SO2 data
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()
Table 4.5: Negative SO2 values (up to first 10)
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()
Table 4.5: Negative SO2 values (count by site)
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
Sulphour Dioxide data availability and levels over time

Figure 4.5: Sulphour Dioxide data availability and levels over time

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
Sulphour Dioxide levels, Southampton (daily mean

Figure 4.6: Sulphour Dioxide levels, Southampton (daily mean

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
Sulphour Dioxide levels, Southampton (hourly, last 12 months)

Figure 4.7: Sulphour Dioxide levels, Southampton (hourly, last 12 months)

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
Sulphour Dioxide levels, Southampton (hourly, since Feb 1st 2020

Figure 4.8: Sulphour Dioxide levels, Southampton (hourly, since Feb 1st 2020

Beware seasonal trends and weather effects

4.3 PM 10

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()
Table 4.6: Summary of pm10 data
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()
Table 4.7: Negative PM10 values - first 6
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
Availability and level of PM 10 data over time

Figure 4.9: Availability and level of PM 10 data over time

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()
Table 4.8: 10 highest values greater than WHO threshold (PM 10 > 50)
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

Figure 4.10: PM10 levels, Southampton (daily mean)

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()
Table 4.9: 10 highest hourly values (PM 10 > 100)
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
PM10 levels, Southampton (hourly, last 12 months)

Figure 4.11: PM10 levels, Southampton (hourly, last 12 months)

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
PM10 levels, Southampton (hourly, since Feb 1st 2020

Figure 4.12: PM10 levels, Southampton (hourly, since Feb 1st 2020

Beware seasonal trends and weather effects

4.4 PM 2.5

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()
Table 4.10: Summary of pm2_5 data
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()
Table 4.11: Negative pm2_5 values - first 6
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
Availability and level of PM 10 data over time

Figure 4.13: Availability and level of PM 10 data over time

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()
Table 4.12: 6 highest values greater than WHO threshold (PM 2.5 > 25)
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
PM2_5 levels, Southampton (daily mean)

Figure 4.14: PM2_5 levels, Southampton (daily mean)

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()
Table 4.13: Extreme hourly values (PM 2.5 > 50, last 12 months, worst 6)
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
PM2_5 levels, Southampton (hourly, last 12 months)

Figure 4.15: PM2_5 levels, Southampton (hourly, last 12 months)

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
PM2.5 levels, Southampton (hourly, since Feb 1st 2020

Figure 4.16: PM2.5 levels, Southampton (hourly, since Feb 1st 2020

Beware seasonal trends and weather effects

5 Observations

  • Why are there large data holes? (see tile plots)
  • Nitorgen Dioxide levels appear to be trending downwards
  • For particulates the trend is more complex and the trends for PM10 and PM2.5 differ.
    • Something happened on the 27th October 2019 at 20:00. There are spikes on all hourly PM plots (although this is masked in the daily plots). Could it have been a cruise ship leaving?
    • Something else happened on the 2nd December 2019 at 21:00. Was this another ship?

6 Annex

6.1 Original data

skimr::skim(origDataDT)
Table 6.1: Data summary
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

6.2 Long form of original data

skimr::skim(lDT)
Table 6.2: Data summary
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

6.3 Nitrogen Dioxide

t <- lDT[variable == "no2"]

skimr::skim(t)
Table 6.3: Data summary
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()
Table 6.4: Values greater than WHO threshold (NO2 > 200)
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

6.4 PM 10

t <- lDT[variable == "pm10"]

skimr::skim(t)
Table 6.5: Data summary
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()
Table 6.6: PM 10 values greater than WHO threshold (NO2 > 50)
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

6.5 PM 2.5

t <- lDT[variable == "pm2_5"]

skimr::skim(t)
Table 6.7: Data summary
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()
Table 6.8: PM 2.5 values greater than WHO threshold (NO2 > 25)
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

7 Runtime

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:

  • data.table - (Dowle et al. 2015)
  • ggplot2 - (Wickham 2009)
  • here - (Müller 2017)
  • kableExtra - (Zhu 2018)
  • lubridate - (Grolemund and Wickham 2011)
  • plotly - (Sievert et al. 2016)
  • skimr - (Arino de la Rubia et al. 2017)

References

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.