1 About

This report is a contribution to the Hampshire County Council Climate Change Expert Stakeholder Forum’s Data sub-group.

Code: https://github.com/HCC-CCECF-DataGroup/hampshire-ghg-emissions/tree/main/rmd

If you are viewing this report as a web page then you can also click on the ‘code’ buttons to reveal the code used in each section.

Feedback: https://github.com/HCC-CCECF-DataGroup/hampshire-ghg-emissions/labels/v1

1.1 History

1.2 License

This report is (c) University of Southampton and is published under the CC-BY-4.0 license. You may share, re-use or adapt for commercial or non-commercial purposes with citation.

1.3 Citation

If you wish to use any of the material in this report please cite as:

2 Introduction

This report uses two different datasets to estimate greenhouse gas (GHG) emissions from the Hampshire County under three different definitions:

The analysis is carried out for the ‘Wider Hampshire’ area, i.e. all 14 local authority districts in the Hampshire County including the unitary authorities of Portsmouth, Southampton and the Isle of Wight. Note that this differs from the baseline estimated for the Hampshire County Council Climate Change Strategy by The Carbon Trust which excluded Portsmouth, Southampton and the Isle of Wight. A brief comparison of the ‘14 district’ estimates with the ‘11 district’ Carbon Trust estimates is included in this report.

3 Carbon Trust estimates

As background to the Hampshire County Council Climate Change Strategy, the Carbon Trust was asked to establish baseline emissions for the County excluding Southampton, Portsmouth and Isle of Wight. This baseline was converted to the proportion of emissions from different energy sources and reported as a trend plot on p14 of the Strategy as shown below. This highlighted that the main components of emissions were:

  • Industry & Commercial (~ 39%)
  • Transport (~ 37%)
  • Residential energy use (~ 24%).

Total kT CO2 baseline values were not included in this report.

Hampshire emissions (CarbonTrust, 2020)

# imputed from values given in https://documents.hants.gov.uk/climate-change/ClimateChange-Strategic-Framework-of-Programmes.pdf

hampshire_CT_terr_Totals <- data.table::fread(here::here("data","inputs", "ClimateChange-Strategic-Framework-of-Programmes_imputed_Carbon_2019.csv"))
ct_transport <- hampshire_CT_terr_Totals[compareLab == "Transport", .(ktco2_CT)]
ct_res <- hampshire_CT_terr_Totals[compareLab == "Residential", .(ktco2_CT)]
ct_ind <- hampshire_CT_terr_Totals[compareLab == "Industry & Commercial", .(ktco2_CT)]

ct_total <- ct_transport + ct_res + ct_ind

ct_transport_pc <- round(100*(ct_transport/ct_total))
ct_res_pc <- round(100*(ct_res/ct_total))
ct_ind_pc <- round(100*(ct_ind/ct_total))

However the HCC Climate Change Strategic Framework of Programmes which lays out the estimated total kT CO2 and % reduction for a range of proposed actions, enables the following baseline values to be imputed:

  • Industry & Commercial emissions = 3,278 kT CO2
  • Transport emissions = 3,157 kT CO2
  • Residential emissions = 2,011 kT CO2

Using the proportion values in the figure above, this gives a total of 8,446 kT CO2 for the 11 districts.

4 BEIS: Territorial CO2 emissions

These official local authority/district level BEIS National Statistics use the end-user territorial emissions method (“meaning CO2 emissions that occur within the UK’s borders”) and include only CO2 emissions. As a result international aviation and shipping are excluded from these estimates.

Note also that:

The end user basis for reporting emissions has been chosen for this dataset because it accounts for the emissions from energy use at the local level and does not penalise local areas for emissions from the production of energy which is then ‘exported’ to and used in other areas.” (technical report, p8)

The following code loads the data and reports basic checks. A full data description can be found in Section 10.1.

# BEIS LA co2 data
beis_orig <- data.table::fread(paste0(params$dataPath,
 "beis/localAuthority/carbon/2005_2019/",                                "2005-19_Local_Authority_CO2_emissions.csv"))

beis_la_co2_DT <- copy(beis_orig) # a real copy
beis_la_co2_DT[, subSectorLabel := `LA CO2 Sub-sector`]
# amend category labels for clarity and ordering
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Agriculture",
     "Industry: Agriculture",
     subSectorLabel)
     ]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Large Industrial Installations",
     "Industry: Large Industrial Installations",
     subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Road Transport (A roads)",
     "Transport: (A roads)",
     subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Road Transport (Minor roads)",
     "Transport: (Minor roads)",
     subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Road Transport (Motorways)",
     "Transport: (Motorways)",
     subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Diesel Railways",
     "Transport: Diesel Railways",
     subSectorLabel)
]
beis_la_co2_DT[, la_name := `Local Authority`]


# set up the colours

# colours borrowed from https://git.soton.ac.uk/twr1m15/la_emissions_viz/-/blob/master/shiny/app.R
# for details, use set for each sector
industry_pal <- RColorBrewer::brewer.pal(n = 8, name = "Greys")[4:8]    # industry greys, 5 categories incl Agric
commercial_pal <- RColorBrewer::brewer.pal(n = 8, name = "RdPu")[4:6]    # commercial greys, 3 categories
domestic_pal <- RColorBrewer::brewer.pal(n = 4, name = "Blues")[2:4]    # domestic blues, 3 categories
public_pal <- RColorBrewer::brewer.pal(n = 4, name = "Purples")[2:4]    # public purple, 3 categories
transport_pal <- RColorBrewer::brewer.pal(n = 6, name = "Oranges")[2:6] # transport oranges, 5 categories
lulucf_pal <- RColorBrewer::brewer.pal(n = 9, name = "Greens")[4:9]     # lulucf greens, 6 categories

# for details, combine sets
beis_emissions_colours <- c(commercial_pal, domestic_pal, industry_pal, lulucf_pal, public_pal, transport_pal)

beis_la_co2_DT[, subSectorLabelFact := factor(subSectorLabel)]

catList <- unique(beis_la_co2_DT$subSectorLabelFact) # this is not alphabetical - why?

catList2 <- c(catList[1:15],catList[25] , catList[16:24])

names(beis_emissions_colours) <- catList2

# get just the 'wider Hampshire' (Solent) districts
hampshire_beis_la_co2_DT <- getSolent(beis_la_co2_DT)
# set a flag for the 11 districts in case we need it
hampshire_beis_la_co2_DT[, widerHampshire := ifelse(la_name == "Southampton" |
                                                      la_name == "Portsmouth" |
                                                      la_name == "Isle of Wight",
                         "Wider Hampshire",
                         "Hampshire CC")]
message("Number of emissions categories: ", uniqueN(hampshire_beis_la_co2_DT$`LA CO2 Sub-sector`))
## Number of emissions categories: 24
message("Number of districts: ", uniqueN(hampshire_beis_la_co2_DT$`Local Authority`))
## Number of districts: 14
message("Total emissions for 2019: ", round(sum(hampshire_beis_la_co2_DT[`Calendar Year` == 2019]$`Territorial emissions (kt CO2)`)), " kT CO2")
## Total emissions for 2019: 8421 kT CO2
message("Total emissions deemed to be 'within the scope of influence of LAs' for 2019: ", round(sum(hampshire_beis_la_co2_DT[`Calendar Year` == 2019]$`Emissions within the scope of influence of LAs (kt CO2)`)), " kT CO2")
## Total emissions deemed to be 'within the scope of influence of LAs' for 2019: 7664 kT CO2

BEIS have produced a useful mapping tool which can be used to compare the spatial distribution of different emissions sources at district level.

4.2 2019 baseline

Table 4.1 shows the total CO2 emissions under this method for 2019 for all 14 districts.

t <- hampshire_beis_la_co2_DT[`Calendar Year` == 2019, .(`Total kT CO2e` = sum(`Territorial emissions (kt CO2)`, na.rm = TRUE))]
makeFlexTable(t, cap = "BEIS CO2 emissions (kT, 2019)")
sumBEIS_kt <- sum(hampshire_beis_la_co2_DT[`Calendar Year` == 2019]$`Territorial emissions (kt CO2)`)

sum_within_infl <- sum(hampshire_beis_la_co2_DT[`Calendar Year` == 2019]$`Emissions within the scope of influence of LAs (kt CO2)`)

Note that the total emissions deemed to be ‘within the scope of influence of LAs’ for 2019 is 7,664 kT CO2e. Categories deemed by BEIS to be outside local authorities’ scope of influence in this data are:

  • all forms of land-use, land-use change and forestry
  • Transport: (Motorways)
  • Transport: Diesel Railways

Table 4.2 shows the total emissions for 2019 ordered by category. Figure 4.4 shows the data as a bar plot ordered by value. The largest emissions sources under this method are clearly visible (domestic gas, transport and domestic electricity).

hampshire_beis_terr_Totals <- hampshire_beis_la_co2_DT[`Calendar Year` == 2019, .(`Total kT CO2` = sum(`Territorial emissions (kt CO2)`, na.rm = TRUE)), keyby = .(subSectorLabelFact)]

absTotal <- sum(hampshire_beis_la_co2_DT[`Calendar Year` == 2019, abs(`Territorial emissions (kt CO2)`)])
                
hampshire_beis_terr_Totals[, `% of gross` := 100*(`Total kT CO2`/absTotal)]

makeFlexTable(hampshire_beis_terr_Totals[, .(Source = subSectorLabelFact, 
                                             `Total kT CO2`, `% of gross`)], cap = "BEIS CO2 emissions sorted by category (Hampshire, 2019)")
p <- ggplot2::ggplot(hampshire_beis_terr_Totals, aes(x = reorder(subSectorLabelFact, -`Total kT CO2`), 
                       y = `Total kT CO2`,
                       fill = subSectorLabelFact)) +
  geom_col() +
  scale_fill_manual(values = beis_emissions_colours) +
  theme(legend.position = "none") +
  labs(x = "LA CO2 Sub-sector") +
  coord_flip()

ggplot2::ggsave(here::here("plots", "beis2019_col.png"), plot = p)
## Saving 7 x 5 in image
p
BEIS CO2 emissions by category (Hampshire, 2019 ordered by emissions value)

Figure 4.4: BEIS CO2 emissions by category (Hampshire, 2019 ordered by emissions value)

# p <- ggplot2::ggplot(subsetDT, aes(x = `Calendar Year`, y = `Territorial emissions (kt CO2)`,
#                             fill = subSectorLabel,
#                             colour = subSectorLabel)) +
#   geom_col(position = "stack") +
#   scale_colour_manual(values = beis_emissions_colours) +
#   scale_fill_manual(values = beis_emissions_colours) #
# p

Figure 4.5 shows a cumulative emissions plot for the BEIS 2019 data ordered by the emissions source’s magnitude. The largest increments are therefore due to domestic gas use and various forms of transport. The plot uses vertical lines to show the sources which comprise 50%, 75% and 90% of the total emissions. The plot curls due to the source categories with negative emissions such that the final point represents the total ‘net’ emissions.

t <- hampshire_beis_terr_Totals[order(-`Total kT CO2`)]
t[, cumulative := cumsum(`Total kT CO2`)]

pc_50 <- 0.5*(sum(t$`Total kT CO2`))
pc_75 <- 0.75*(sum(t$`Total kT CO2`))
pc_90 <- 0.90*(sum(t$`Total kT CO2`))

p <- ggplot2::ggplot(t, aes(x = reorder(subSectorLabelFact, -`Total kT CO2`), 
                       y = cumulative,
                       colour = subSectorLabelFact)) +
  geom_point() +
  ylim(0,NA) +
  scale_colour_manual(values = beis_emissions_colours) +
  theme(legend.position = "none") +
  labs(x = "LA CO2 Sub-sector",
       y = "Cumulative kT CO2/annum",
       cap = "Vertical lines % of net emissions") +
  coord_flip()

# add reference lines
p <- p + 
  geom_hline(aes(yintercept = pc_50), colour = "grey") +
  geom_hline(aes(yintercept = pc_75), colour = "grey") +
  geom_hline(aes(yintercept = pc_90), colour = "grey") +
  annotate("text", x = "Transport Other", y = pc_50, label = "50%", colour = "grey") +
  annotate("text", x = "Transport Other", y = pc_75, label = "75%", colour = "grey") +
  annotate("text", x = "Transport Other", y = pc_90, label = "90%", colour = "grey")

ggplot2::ggsave(here::here("plots", "beis2019_cumulative.png"), plot = p)
## Saving 7 x 5 in image
p
Plot of cumulative emissions (BEIS, 2019)

Figure 4.5: Plot of cumulative emissions (BEIS, 2019)

h_beis2019 <- hampshire_beis_la_co2_DT[`Calendar Year` == 2019]
h_beis_allYears <- hampshire_beis_la_co2_DT[, .(kT_co2_beis = sum(`Territorial emissions (kt CO2)`)), keyby = .(`Calendar Year`, `LA CO2 Sub-sector`)]

beis_trans <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Motorway" | `LA CO2 Sub-sector` %like% "roads", `Territorial emissions (kt CO2)`])

beis_motorways <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Motorway", `Territorial emissions (kt CO2)`])

beis_d_gas <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Domestic Gas", `Territorial emissions (kt CO2)`])
beis_d_elec <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Domestic Electricity", `Territorial emissions (kt CO2)`])

beis_forest <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Forest", `Territorial emissions (kt CO2)`])

beis_grassland <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Grass", `Territorial emissions (kt CO2)`])

beis_wetlands <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Wetland", `Territorial emissions (kt CO2)`])

beis_crop <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Crop", `Territorial emissions (kt CO2)`])

h_beis2019[, zeroC := ifelse(`LA CO2 Sub-sector` %like% "Gas",
                             0,
                             `Territorial emissions (kt CO2)`)]

h_beis2019[, zeroC := ifelse(`LA CO2 Sub-sector` %like% "Electricity",
                             0,
                             `Territorial emissions (kt CO2)`)]

h_beis2019[, zeroC := ifelse(`LA CO2 Sub-sector` %like% "roads",
                             0,
                             `Territorial emissions (kt CO2)`)]

beis_allSum <- sum(h_beis2019$`Territorial emissions (kt CO2)`)
zeroCsum <- sum(h_beis2019$zeroC)

Thus, if we focus on BEIS territorial CO2 only then 75% of emissions are due to:

  • Domestic gas: 1,716 kT (20 %));
  • Transport (Motorways, A roads and minor roads combined): 3,838 kT (Total: 46 %);
  • Domestic electricity: 689 kT (8 %))

Taken together the domestic (residential) emissions comprise 29 % of the estimated total.

Negative CO2 emissions (sequestration) sources are:

  • Forest: -484 kT
  • Grassland: -195 kT - note that this does not include methane emissions from grazing livestock nor N2O emissions from waste
  • Wetlands: -0.262 kT - this is perhaps surprisingly small given the coastal nature of the County and the existence of a number of wetland habitats. it may be worth investigating the underlying data to confirm.

As Figure 4.5 showed, these levels of sequestration currently provide a negligible offset to the overall emissions. Note also that cropland was a net emitter at 138 kT.

Figure 4.2 showed that the only emissions sources showing substantial decreases over time have been electricity due to grid decarbonisation and (potentially) reductions in some industrial activity as well as the use of ‘Other fuels’ by industry. Although emissions from domestic gas use have also fallen over time they appear to have stabilised since 2014. Perhaps of most concern given their dominant contribution however is the relative stability of road transport emissions over the 2005 - 2019 period.

5 CSE: Territorial-based all GHG emissions

The first of the CSE datasets estimates emissions under the territorial method but including international aviation and shipping and includes all GHG emissions - carbon dioxide, methane, nitrous oxide and fluorinated gases. As the non-CO2 gases have different warming potentials compared to CO2, emissions are reported in terms of CO2e (carbon dioxide equivalent) rather than simply in terms of kT of gas emitted. The sum of kT CO2e for each source therefore represents the total contribution of all of the emissions to climate warming allowing for their different warming potentials.

The inclusion of GHGs other than just CO2 means that identical categories in the CSE data will most likely have higher emissions estimates than the BEIS equivalent which only account for CO2. As an example, Transport emissions are based on the BEIS CO2 Transport emissions used in the previous section but were “adjusted to account for [additional] non-CO2 greenhouse gas emissions.” This is explained in detail in the CSE methodology paper:

“Total CO2e emissions have been estimated for most sectors by comparison of CO2, N2O and CH4 emission factors for the most prevalent fuel type in the sector and factoring the CO2 emissions accordingly. The exceptions are other transport and LULUCF due to the diverse nature of emission sources; in these cases the CO2 figures have been used as-is.” (p14)

For aviation and shipping:

“National emissions data from these sources are reported by the NAEI, and have been apportioned on a population basis.” (p15)

Finally, fluorinated gases (F-gases):

“are apportioned commensurate with non-domestic electricity emissions, as systems utilising such gases are most prevalent in non-domestic buildings and electrically powered equipment).” (p15)

The following code loads the data and reports basic checks. A full data description can be found in Section 10.2.

# CSE impact tool data
cse_territorial_abs_DT <- data.table::fread(paste0(params$dataPath,
 "cse/cse_ImpactTool/",                                "local-authority-all-territorial-absolute.csv.gz"))

cse_terr_orig <- copy(cse_territorial_abs_DT)
cse_territorial_abs_DT[, la_name := name]
hampshire_cse_territorial_abs_DT <- getSolent(cse_territorial_abs_DT)

# make long form for easy summary etc
lDT <- melt(hampshire_cse_territorial_abs_DT)
# remove Power generation - CSE methodology: "Gridded data area apportioned, point data summed within area. Note: this category overlaps with electricity emissions and is provided for information only"
hampshire_cse_territorial_abs_DT <- lDT[variable != "Power generation (t CO2e)"]
hampshire_cse_territorial_abs_DT[, widerHampshire := ifelse(la_name == "Southampton" |
                                                      la_name == "Portsmouth" |
                                                      la_name == "Isle of Wight",
                         "Wider Hampshire",
                         "Hampshire CC")]

message("Number of emissions categories: ", uniqueN(hampshire_cse_territorial_abs_DT$variable))
## Number of emissions categories: 20
message("Number of districts: ", uniqueN(hampshire_cse_territorial_abs_DT$la_name))
## Number of districts: 14
message("Total emissions check: ", round(sum(hampshire_cse_territorial_abs_DT$value)/1000), " kT CO2e")
## Total emissions check: 12216 kT CO2e

5.1 2019 baseline

cse_terr_total <- sum(hampshire_cse_territorial_abs_DT$value/1000)
beis_terr_total <- sum(hampshire_beis_terr_Totals$`Total kT CO2`)

diff <- cse_terr_total - beis_terr_total
pc_diff <- 100*diff/beis_terr_total

Table 5.1 shows the total emissions for 2019. This is 45 % increase from the BEIS figure.

t <- hampshire_cse_territorial_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000)]
makeFlexTable(t, cap = "CSE territorial emissions (Hampshire, 2019)")
sumCSETerr_kt <- sum(hampshire_cse_territorial_abs_DT$value)/1000

Table 5.2 shows the total emissions for 2019 by category. Figure 5.1 shows the data as a bar plot. Note that some of the categories do not exactly match those used in the BEIS data but the colour palettes have been kept as similar as possible.

Ignore the (t CO2e) in the table and plot labels - both the table and plot show kT for easy comparison (labels to be fixed).

hampshire_cse_terr_Totals <- hampshire_cse_territorial_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000), keyby = .(variable)]

absTotal <- sum(hampshire_cse_territorial_abs_DT[, abs(value)])/1000
                
hampshire_cse_terr_Totals[, `% of gross` := 100*(`Total kT CO2e`/absTotal)]

makeFlexTable(hampshire_cse_terr_Totals, cap = "CSE all territorial emissions by category (Hampshire, 2019)")
# set up the colours

# colours borrowed from https://git.soton.ac.uk/twr1m15/la_emissions_viz/-/blob/master/shiny/app.R
# for details, use set for each sector
cse_terr_domestic_pal <- RColorBrewer::brewer.pal(n = 8, name = "Blues")[3:8]    # domestic blues, 6 categories

cse_terr_industry_pal <- RColorBrewer::brewer.pal(n = 8, name = "Greys")[3:8]    # industry greys, 6 categories incl Agric

cse_terr_transport_pal <- RColorBrewer::brewer.pal(n = 9, name = "Oranges")[3:7] # transport incl aviation & shipping oranges, 5 categories

cse_terr_other_pal <- RColorBrewer::brewer.pal(n = 6, name = "RdPu")[4:5]    #  greys,  2 categories  waste & F-gases

cse_terr_lulucf_pal <- "#31A354" # pick a green

# for details, combine sets
cse_terr_colours <- c(cse_terr_domestic_pal, 
                      cse_terr_industry_pal, 
                      cse_terr_transport_pal,
                      cse_terr_lulucf_pal,
                      cse_terr_other_pal)

hampshire_cse_territorial_abs_DT[, variableFact := factor(variable)]

cse_terr_catList <- unique(hampshire_cse_territorial_abs_DT$variableFact) # this is not alphabetical - why?
# force into the same order as the colours
cse_terr_catList2 <- c(cse_terr_catList[1:15], cse_terr_catList[17:18], 
                       cse_terr_catList[20], cse_terr_catList[16],cse_terr_catList[19] )

names(cse_terr_colours) <- cse_terr_catList2 # associate the names (in this order) with the colours

p <- ggplot2::ggplot(hampshire_cse_terr_Totals, aes(x = reorder(variable, -`Total kT CO2e`), 
                       y = `Total kT CO2e`,
                       fill = variable)) +
  geom_col() +
  scale_fill_manual(values = cse_terr_colours) +
  theme(legend.position = "none") +
  labs(x = "Emissions source") +
  coord_flip()

ggplot2::ggsave(here::here("plots", "cseTerr_col.png"), plot = p)
## Saving 7 x 5 in image
p
CSE all territorial emissions by category (Hampshire, 2019 ordered by emissions value)

Figure 5.1: CSE all territorial emissions by category (Hampshire, 2019 ordered by emissions value)

# p <- ggplot2::ggplot(subsetDT, aes(x = `Calendar Year`, y = `Territorial emissions (kt CO2)`,
#                             fill = subSectorLabel,
#                             colour = subSectorLabel)) +
#   geom_col(position = "stack") +
#   scale_colour_manual(values = beis_emissions_colours) +
#   scale_fill_manual(values = beis_emissions_colours) #
# p

Figure 5.2 shows a cumulative emissions plot for the CSE territorial data ordered by the emissions source’s magnitude. The largest increments are therefore due to personal transport, domestic gas use and aviation. The plot shows the sources which comprise 50%, 75% and 90% of the total emissions. The plot curls due to the source categories with negative emissions such that the final point represents the total ‘net’ emissions.

t <- hampshire_cse_terr_Totals[order(-`Total kT CO2e`)]
t[, cumulative := cumsum(`Total kT CO2e`)]

pc_50 <- 0.5*(sum(t$`Total kT CO2e`))
pc_75 <- 0.75*(sum(t$`Total kT CO2e`))
pc_90 <- 0.90*(sum(t$`Total kT CO2e`))

p <- ggplot2::ggplot(t, aes(x = reorder(variable, -`Total kT CO2e`), 
                       y = cumulative,
                       colour = variable)) +
  scale_colour_manual(values = cse_terr_colours) +
  geom_point() +
  ylim(0,NA) +
  theme(legend.position = "none") +
  labs(x = "Emissions source",
       y = "Cumulative kT CO2e/annum",
       cap = "Vertical lines % of net emissions") +
  coord_flip()

# add reference lines
p <- p + 
  geom_hline(aes(yintercept = pc_50), colour = "grey") +
  geom_hline(aes(yintercept = pc_75), colour = "grey") +
  geom_hline(aes(yintercept = pc_90), colour = "grey") +
  annotate("text", x = "Other Transport (t CO2e)", y = pc_50, label = "50%", colour = "grey") +
  annotate("text", x = "Other Transport (t CO2e)", y = pc_75, label = "75%", colour = "grey") +
  annotate("text", x = "Other Transport (t CO2e)", y = pc_90, label = "90%", colour = "grey")

ggplot2::ggsave(here::here("plots", "cseTerr_cumulative.png"), plot = p)
## Saving 7 x 5 in image
p
Plot of cumulative emissions (BEIS, 2019)

Figure 5.2: Plot of cumulative emissions (BEIS, 2019)

cse_terr_Transport <- hampshire_cse_terr_Totals[variable %like% "Road Trans"]$`Total kT CO2e`

beis_terr_Transport <- sum(hampshire_beis_terr_Totals[subSectorLabelFact %like% "road" |
                                                        subSectorLabelFact %like% "Motorway"]$`Total kT CO2`)

cse_terr_DomGas <- hampshire_cse_terr_Totals[variable %like% "Housing - Mains gas"]$`Total kT CO2e`
beis_terr_DomGas <- hampshire_beis_terr_Totals[subSectorLabelFact %like% "Domestic Gas"]$`Total kT CO2`

cse_terr_aviation <- hampshire_cse_terr_Totals[variable %like% "Aviation"]$`Total kT CO2e`
cse_terr_ind_elec <- hampshire_cse_terr_Totals[variable %like% "Industrial and commercial - Electricity"]$`Total kT CO2e`
cse_terr_d_elec <- hampshire_cse_terr_Totals[variable %like% "Housing - Electricity"]$`Total kT CO2e`

cse_terr_shipping <- hampshire_cse_terr_Totals[variable %like% "Shipping"]$`Total kT CO2e`
cse_terr_fgas <- hampshire_cse_terr_Totals[variable %like% "F-gases"]$`Total kT CO2e`
cse_terr_waste <- hampshire_cse_terr_Totals[variable %like% "Waste"]$`Total kT CO2e`
cse_terr_AgricLivestock <- hampshire_cse_terr_Totals[variable %like% "Agriculture - Livestock"]$`Total kT CO2e`

cse_terr_diff_main <- cse_terr_aviation + cse_terr_shipping + cse_terr_fgas + cse_terr_waste

pc_diff_main <- 100*(cse_terr_diff_main/(sumCSETerr_kt - sumBEIS_kt))

pc_tot_diff <- 100*((sumCSETerr_kt-sumBEIS_kt)/sumBEIS_kt)

Thus, if we focus on CSE territorial all GHG emissions, 75% of emissions are due to:

  • Road transport: 4,055 T CO2e (33 % of total)
  • Housing (domestic) gas: 1,657 T CO2e (14 % of total)
  • Aviation: 1,203 T CO2e - flights and freight (10 % of total)
  • Industrial & commercial electricity: 1,110 T CO2e (9 % of total)
  • Domestic electricity: 841 T CO2e (7 % of total)

These figures draw attention to the significant emissions due to aviation which are not included in the BEIS LA level data. They also draw attention to the level of all GHG emissions from waste management. Indeed, 73 % of the 45 % increase from the BEIS figure comprises emissions from:

  • Aviation (1,203 kT CO2e - i.e. flights & freight - 10 % of total);
  • Waste management (704 kT CO2e - 6 % of total);
  • Shipping (479 kT CO2e - 4 % of total) and
  • F-Gases (374 kT CO2e - 3 % of total)

Note that under the CSE approach, Agriculture - Livestock and crop-related emissions amount to 457 T CO2e compared to the BEIS value for Cropland at 138 T CO2e which gives some indication of the additional emissions due to methane (noting that fuel used for agriculture is already in a separate category under the CSE approach - see methodology, p15).

6 CSE: Consumption-based all GHG emissions

These are calculated under the consumption emissions method and include all greenhouse gas emissions. They are also therefore presented in kT CO2e.

The following code loads the data and reports basic checks. A full data description can be found in Section 10.3.

cse_consumption_abs_DT <- data.table::fread(paste0(params$dataPath,
 "cse/cse_ImpactTool/",                                "local-authority-all-consumption-absolute.csv.gz"))
cse_cons_orig <- copy(cse_consumption_abs_DT)

cse_consumption_abs_DT[, la_name := name]
hampshire_cse_consumption_abs_DT <- getSolent(cse_consumption_abs_DT)

# make long form for easy summary etc
hampshire_cse_consumption_abs_DT <- melt(hampshire_cse_consumption_abs_DT)
hampshire_cse_consumption_abs_DT[, widerHampshire := ifelse(la_name == "Southampton" |
                                                      la_name == "Portsmouth" |
                                                      la_name == "Isle of Wight",
                         "Wider Hampshire",
                         "Hampshire CC")]
message("Number of emissions categories: ", uniqueN(hampshire_cse_consumption_abs_DT$variable))
## Number of emissions categories: 15
message("Number of districts: ", uniqueN(hampshire_cse_consumption_abs_DT$la_name))
## Number of districts: 14
message("Total emissions check: ", round(sum(hampshire_cse_consumption_abs_DT$value)/1000), " kT CO2e")
## Total emissions check: 13633 kT CO2e

6.1 2019 baseline

Table 6.1 shows the total emissions for 2019.

t <- hampshire_cse_consumption_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000)]
makeFlexTable(t, cap = "CSE consumption emissions (Hampshire, 2019)")
sumCSECons_kt <- sum(hampshire_cse_consumption_abs_DT$value)/1000

Table 6.2 shows the total emissions for 2019 by category. Figure 6.1 shows the data as a bar plot. Note that most of the categories do not exactly match those used in the BEIS/CSE territorial-based data but again, the colour palettes have been kept as similar as possible.

The largest emissions sources under this method are clearly visible (purchased goods, services and food/diet and gas-use).

Ignore the (t CO2e) in the label - the plot shows kT for easy comparison (labels to be fixed).

hampshire_cse_cons_Totals <- hampshire_cse_consumption_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000), keyby = .(variable)]

absTotal <- sum(hampshire_cse_consumption_abs_DT[, abs(value)])/1000
                
hampshire_cse_cons_Totals[, `% of gross` := 100*(`Total kT CO2e`/absTotal)]

makeFlexTable(hampshire_cse_cons_Totals[, .(Source = variable,
                                            `Total kT CO2e`, `% of gross`)], cap = "CSE all consumption emissions ordered by category (Hampshire, 2019)")
library(stringr)
hampshire_cse_cons_Totals[, variable_n := stringr::str_remove(variable, "Consumption of goods and services - ")]


# set up the colours

# colours borrowed from https://git.soton.ac.uk/twr1m15/la_emissions_viz/-/blob/master/shiny/app.R
# for details, use set for each sector


cse_cons_cons_pal <- RColorBrewer::brewer.pal(n = 8, name = "YlOrBr")[3:5]    # consumption, 3 categories 

cse_cons_food_pal <- RColorBrewer::brewer.pal(n = 8, name = "Purples")[3:4]    # food , 2 categories 

cse_cons_domestic_pal <- RColorBrewer::brewer.pal(n = 8, name = "Blues")[3:8]    # domestic blues, 6 categories

cse_cons_travel_pal <- RColorBrewer::brewer.pal(n = 9, name = "Oranges")[6:8] # transport  3 categories

cse_cons_waste_pal <- "#C51B8A" # pick a purple

# for details, combine sets
cse_cons_colours <- c(cse_cons_cons_pal, 
                      cse_cons_food_pal,
                      cse_cons_domestic_pal, 
                      cse_cons_travel_pal,
                      cse_cons_waste_pal)

hampshire_cse_cons_Totals[, variableFact := factor(variable_n)] # has to be this one to match the names

cse_cons_catList <- unique(hampshire_cse_cons_Totals$variableFact) # correct order

names(cse_cons_colours) <- cse_cons_catList # associate the names (in this order) with the colours

p <- ggplot2::ggplot(hampshire_cse_cons_Totals, aes(x = reorder(variable_n, -`Total kT CO2e`), 
                       y = `Total kT CO2e`,
                       fill = variable_n)) +
  geom_col() +
  scale_fill_manual(values = cse_cons_colours) +
  theme(legend.position = "none") +
  labs(x = "Emissions source") +
  coord_flip()

ggplot2::ggsave(here::here("plots", "cseCons_col.png"), plot = p)
## Saving 7 x 5 in image
p
CSE all territorial emissions ordered by category value (Hampshire, 2019 ordered by emissions value)

Figure 6.1: CSE all territorial emissions ordered by category value (Hampshire, 2019 ordered by emissions value)

Figure 6.2 shows a cumulative emissions plot for the CSE territorial data ordered by the emissions source’s magnitude. The largest increments are therefore due to consumption of goods and services, food and diet (meat & fish) and mains gas use. The plot shows the sources which comprise 50%, 75% and 90% of the total emissions.

t <- hampshire_cse_cons_Totals[order(-`Total kT CO2e`)]
t[, cumulative := cumsum(`Total kT CO2e`)]

pc_50 <- 0.5*(sum(t$`Total kT CO2e`))
pc_75 <- 0.75*(sum(t$`Total kT CO2e`))
pc_90 <- 0.90*(sum(t$`Total kT CO2e`))

p <- ggplot2::ggplot(t, aes(x = reorder(variable_n, -`Total kT CO2e`), 
                       y = cumulative,
                       colour = variable_n)) +
  geom_point() +
  scale_colour_manual(values = cse_cons_colours) +
  ylim(0,NA) +
  theme(legend.position = "none") +
  labs(x = "Emissions source",
       y = "Cumulative kT CO2e/annum",
       cap = "Vertical lines % of net emissions") +
  coord_flip()

# add reference lines
p <- p + 
  geom_hline(aes(yintercept = pc_50), colour = "grey") +
  geom_hline(aes(yintercept = pc_75), colour = "grey") +
  geom_hline(aes(yintercept = pc_90), colour = "grey") +
  annotate("text", x = "Housing - Oil (t CO2e)", y = pc_50, label = "50%", colour = "grey") +
  annotate("text", x = "Housing - Oil (t CO2e)", y = pc_75, label = "75%", colour = "grey") +
  annotate("text", x = "Housing - Oil (t CO2e)", y = pc_90, label = "90%", colour = "grey")

ggplot2::ggsave(here::here("plots", "cseCons_cumulative.png"), plot = p)
## Saving 7 x 5 in image
p
Plot of cumulative emissions (BEIS, 2019)

Figure 6.2: Plot of cumulative emissions (BEIS, 2019)

cse_cons_purch <- hampshire_cse_cons_Totals[variable %like% "Purchase of goods"]$`Total kT CO2`
cse_cons_food_meat <- hampshire_cse_cons_Totals[variable %like% "Meat and fish"]$`Total kT CO2`
cse_cons_DomGas <- hampshire_cse_cons_Totals[variable %like% "Housing - Mains gas"]$`Total kT CO2`
cse_cons_food_other <- hampshire_cse_cons_Totals[variable %like% "Other food and drink"]$`Total kT CO2`
cse_cons_private_trans <- hampshire_cse_cons_Totals[variable %like% "Private transport"]$`Total kT CO2`
cse_cons_use <- hampshire_cse_cons_Totals[variable %like% "Use of"]$`Total kT CO2`

cse_cons_flights <- hampshire_cse_cons_Totals[variable %like% "Flights"]$`Total kT CO2`

cons_sum <- cse_cons_purch + cse_cons_food_meat + cse_cons_DomGas + cse_cons_food_other + cse_cons_private_trans

con_sum_pc <- 100*(cons_sum/sumCSECons_kt)

Thus, if we focus on CSE consumption-based emissions which include emissions ‘outsourced’ to other geographical areas (including overseas), 75% of emissions sources are due to:

  • Purchased goods: 2,623 kT CO2e ( 19 %)
  • Food and diet - meat & fish: 1,722 kT CO2e ( 13 %)
  • Domestic gas: 1,657 kT CO2e as before ( 12 %)
  • Food and diet - other: 1,414 kT CO2e ( 10 %)
  • Private transport:1,378 kT CO2e ( 10 %)
  • Use of services: 1,195 kT CO2e ( 9 %)

Emissions due to Flights (970 kT CO2e) are lower than the territorial based Aviation emissions values since emissions due to freight are included under ‘Goods and services.’

This approach to emissions accounting shows the extent to which the consumption of goods and services, diet and food as well as transport and domestic gas use dominate Hampshire’s ‘consumption’ emissions footprint.

7 District level total emissions by method

Table 7.1 and Figure 7.1 show the total emissions under each method and source per district. As expected, in all cases CSE territorial emissions are higher than BEIS territorial emissions. Similarly, in most cases CSE consumption emissions are higher than territorial emissions except for Winchester, Test Valley, Basingstoke and Deane and New Forest. More detailed analysis of the underlying data would be required to understand the reasons for this.

# save the totals out at LA level for comparison with other data
districts_beis_2019 <- hampshire_beis_la_co2_DT[`Calendar Year` == 2019, .(`BEIS territorial emissions (kt CO2, 2019)` = sum(`Territorial emissions (kt CO2)`),
                                                                           `Mid-year population (thousands, 2019)` = mean(`Mid-year Population (thousands)`)),
                                                keyby = .(District = la_name)]

districts_cse_terr <- hampshire_cse_territorial_abs_DT[, .(`CSE territorial emissions (kt CO2e)` = sum(value)/1000),
                                                keyby = .(District = la_name)]


districts_cse_cons <- hampshire_cse_consumption_abs_DT[, .(`CSE consumption emissions (kt CO2e)` = sum(value)/1000),
                                                keyby = .(District = la_name)]

districts <- districts_beis_2019[districts_cse_terr][districts_cse_cons]

t <- districts[, .(District, `BEIS territorial emissions (kt CO2, 2019)`,
                        `CSE territorial emissions (kt CO2e)`,
                        `CSE consumption emissions (kt CO2e)`)]
               
makeFlexTable(t,cap = "Totals per district by method and source (kT)")
data.table::fwrite(districts,
                   here::here("data", "outputs","all_hampshire_districts_sum_ktCO2(e)_v1_methods.csv"))

plotDT <- melt(districts[, .( District, `BEIS territorial emissions (kt CO2, 2019)`, `CSE territorial emissions (kt CO2e)`, `CSE consumption emissions (kt CO2e)`)])

p <- ggplot2::ggplot(plotDT, aes(x = reorder(District, -value), y = value, fill = variable)) +
  geom_col(position = "dodge") +
  scale_fill_discrete(name = "Method") +
  coord_flip() +
  theme(legend.position="bottom") +
  labs(x = "District",
         y = "kT CO2(e)",
         cap = "Ordered by CSE consumption emissions")

ggplot2::ggsave(here::here("plots", "allMethodsComparison_by_districts.png"), plot = p)
## Saving 7 x 5 in image
p
Total emissions per district by method

Figure 7.1: Total emissions per district by method

8 Discussion

sumBEIS_hcc_kt <- sum(hampshire_beis_la_co2_DT[widerHampshire != "Wider Hampshire" & `Calendar Year` == 2019, `Territorial emissions (kt CO2)`])

Overall, the total GHG emissions for Hampshire under different methodologies were found to be:

  • Carbon Trust analysis (11 districts excluding Portsmouth, Southampton and the Isle of Wight): 8,446 kT CO2
  • BEIS territorial CO2 only:
    • 6,484 kT CO2 (11 districts excluding Portsmouth, Southampton and the Isle of Wight),
    • 8,421 kT CO2 (14 districts including Portsmouth, Southampton and the Isle of Wight)
  • CSE territorial emissions (all GHG, all 14 districts): 12,216 kT CO2e - 45 % higher than the BEIS total
  • CSE consumption emissions (all GHG, all 14 districts): 13,633 kT CO2e

Given that the Carbon Trust area excludes Portsmouth, Southampton and the Isle of Wight it is unclear why this total is similar to the ‘14 local authorities’ BEIS data.

Which of these accounting methods we choose to focus on depends what we want to show and what we want to achieve. The same is true of the emissions subcategories. The BEIS data gives a partial view on territorial emissions as it excludes all non-CO2 emissions and also excludes aviation (flights & freight) and shipping. The CSE territorial emissions data includes these ‘missing’ emissions and so gives a much larger total. The CSE consumption emissions are (generally) larger still because they include emissions ‘off-shored’ by our consumption of goods and services produced outside the Hampshire area.

Table 8.1 compares the Carbon Trust, BEIS and CSE data to the extent that it is possible to do so from the data reported here.

hampshire_beis_terr_Totals[, compareLab := ifelse(subSectorLabelFact %like% "Transport", "Transport", "Other")]
hampshire_beis_terr_Totals[, compareLab := ifelse(subSectorLabelFact %like% "Domestic", "Residential", compareLab)]
hampshire_beis_terr_Totals[, compareLab := ifelse(subSectorLabelFact %like% "Commercial" | subSectorLabelFact %like% "Industry", "Industry & Commercial", compareLab)]
# NB - Public is coded to Other
hampshire_beis_Compare <- hampshire_beis_terr_Totals[, .(ktco2_beis = sum(`Total kT CO2`)), keyby = .(compareLab)]
hampshire_beis_Compare[, ktco2_beis_pc := 100*(ktco2_beis / sum(hampshire_beis_Compare$ktco2_beis))]

hampshire_cse_terr_Totals[, compareLab := ifelse(variable %like% "Transport", "Transport", "Other")]
hampshire_cse_terr_Totals[, compareLab := ifelse(variable %like% "Housing", "Residential", compareLab)]
hampshire_cse_terr_Totals[, compareLab := ifelse(variable %like% "Industrial" | variable %like% "Power", "Industry & Commercial", compareLab)]
hampshire_cse_terr_Totals[, compareLab := ifelse(variable %like% "Aviation", "Aviation", compareLab)]
hampshire_cse_terr_Compare <- hampshire_cse_terr_Totals[, .(ktco2_cse_terr = sum(`Total kT CO2e`)), keyby = .(compareLab)]
hampshire_cse_terr_Compare[, ktco2_cse_terr_pc := 100*(ktco2_cse_terr / sum(hampshire_cse_terr_Compare$ktco2_cse_terr))]

hampshire_cse_cons_Totals[, compareLab := ifelse(variable %like% "Travel", "Transport", "Other")]
hampshire_cse_cons_Totals[, compareLab := ifelse(variable %like% "Housing", "Residential", compareLab)]
hampshire_cse_cons_Totals[, compareLab := ifelse(variable %like% "Consumption", "Consumption of goods & services", compareLab)]
hampshire_cse_cons_Totals[, compareLab := ifelse(variable %like% "Food", "Food & diet", compareLab)]
hampshire_cse_cons_Totals[, compareLab := ifelse(variable %like% "Travel - Flights", "Aviation", compareLab)]

hampshire_cse_cons_Compare <- hampshire_cse_cons_Totals[, .(ktco2_cse_cons = sum(`Total kT CO2e`)), keyby = .(compareLab)]
hampshire_cse_cons_Compare[, ktco2_cse_cons_pc := 100*(ktco2_cse_cons / sum(hampshire_cse_cons_Compare$ktco2_cse))]


setkey(hampshire_beis_Compare, compareLab)
setkey(hampshire_cse_terr_Compare, compareLab)
setkey(hampshire_cse_cons_Compare, compareLab)
setkey(hampshire_CT_terr_Totals, compareLab)

dt <- hampshire_CT_terr_Totals[hampshire_beis_Compare][hampshire_cse_terr_Compare]

t <- merge(dt, hampshire_cse_cons_Compare, all = TRUE)

makeFlexTable(t[,.(Source = compareLab,
                   CarbonTrust = ktco2_CT,
                   `Carbon Trust %` = ktco2_CT_pc,
                   BEIS = ktco2_beis,
                   `BEIS %` = ktco2_beis_pc,
                   `CSE Territorial` = ktco2_cse_terr,
                   `CSE Territorial %` = ktco2_cse_terr_pc,
                   `CSE Consumption` = ktco2_cse_cons,
                   `CSE Consumption %` = ktco2_cse_cons_pc)][order(CarbonTrust)], cap = "Comparing emissions baselines (values = kT CO2e or %)")

The table shows that the two main policy foci of the Hampshire County Council Climate Change Strategy - Transport and Residential - contribute at least 30% of emissions irrespective of the emissions accounting method used.

The Carbon Trust estimate for Industrial & Commercial emissions for the ‘11 districts’ appears to be considerably larger than the comparable BEIS ‘14 districts’ value. This may be due to the exclusion in the BEIS data of single large power stations whose emissions are ‘shared’ across all grid electricity users, not just those in the relevant district. As a result the BEIS proportions for Transport and Residential emissions are higher (77% combined) compared to 58% in the Carbon Trust estimates for 11 districts.

Although the ‘14 districts’ BEIS and CSE (territorial) main categories are broadly similar in terms of kT CO2(e), the percentage contribution of Transport and Residential emissions are considerably lower (56%) for the CSE data. This is due to the inclusion of additional sources in the CSE data such as Aviation (10%, shown) shipping and F-gases as well as all GHG emissions (not just CO2) from transport, waste, agriculture, and others (see Table 5.2 for details). Collectively these represent over 20% of county-wide emissions under the CSE territorial methodology.

Finally, the CSE consumption emissions data demonstrates the significant contribution that consumption of services as well as food and diet make to our ‘extended’ emissions footprint if we consider the emissions we have effectively off-shored to other geographical areas. This method transfers all of the industrial/commercial emissions and a significant proportion of the Transport/Aviation emissions to ‘Good and services’ and ‘Food and diet’ (i.e. supply chain transportation and distribution). As a result emissions from homes and private transport comprise only 33% of the total under this approach, flights a further 7% while the total for consumption of goods and services & food is ~58%

9 Recommendations and future work

Based on the preceding discussion, this report makes the following recommendations to HCC:

  • adopt the annually updated BEIS district level emissions data as the benchmark for:
    • estimation of baseline emissions;
    • transparent modelling of the potential impact of HCC programmes on CO2 emissions;
    • annual assessment of the district and county level emissions reduction progress;
    • assessment of the impact of district and county level emissions reduction policies where feasible;
  • work with BEIS to ensure the inclusion of all territorial emissions (e.g. due to aviation, shipping, F-gases) and all GHGs (i.e. carbon dioxide, methane, nitrous oxide and fluorinated gases) in the annual BEIS district level dataset. This would enable the complete territorial emissions of the area to be estimated and bring the district level data into line with the national and sector level data reporting as well as with the CSE data reported here. This will enable:
    • robust baselining of emissions for all territorial GHGs, not just CO2;
    • transparent modelling of the potential impact of HCC programmes on all territorial GHGs;
    • effective monitoring of reductions in emissions of all territorial GHGs over time.
  • include a section in the HCC’s annual Climate Change Report which:
    • reviews the mapping between current HCC programmes and the major emissions sources under each emissions accounting method;
    • reviews the capability and capacity of County and District Authorities to influence the emissions sources for which no current programmes exist (c.f. the Committee on Climate Change’s recommendations as part of the 6th Carbon Budget and the more recent National Audit Office 2021 report on local government capabilities with respect to net zero in England);

Future work could:

  • use the BEIS district level and (aggregated to) county level data to establish Science Based Targets for emissions reduction that align with or improve upon national ‘net-zero’ targets;
  • analyse the district level emissions to understand their distributions according to the different methodologies and hence inform district level prioritisation where this is not already in hand;
  • use the underlying LULUCF data to investigate the relatively low sequestration attributed to wetlands in the Hampshire area;
  • compare the results reported here with a similar analysis of the CREDS Place-Based Carbon Calculator consumption-based footprint data.

10 Appendix: Data

10.1 Data details: BEIS

Original data (all districts)

skimr::skim(beis_orig)
Table 10.1: Data summary
Name beis_orig
Number of rows 129388
Number of columns 14
Key NULL
_______________________
Column type frequency:
character 9
numeric 5
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Country 0 1 0 16 153 5 0
Country Code 0 1 0 9 153 5 0
Region 0 1 0 24 153 13 0
Region Code 0 1 0 9 153 13 0
Second Tier Authority 0 1 0 28 153 152 0
Local Authority 0 1 4 54 0 382 0
Local Authority Code 0 1 0 9 123 381 0
LA CO2 Sector 0 1 6 13 0 6 0
LA CO2 Sub-sector 0 1 11 45 0 25 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Calendar Year 0 1 2012.00 4.32 2005.00 2008.00 2012.00 2016.00 2019.00 ▇▇▇▇▇
Territorial emissions (kt CO2) 0 1 51.33 169.69 -3256.72 1.67 15.38 65.51 9529.02 ▁▇▁▁▁
Emissions within the scope of influence of LAs (kt CO2) 0 1 42.80 83.15 0.00 0.00 8.34 54.76 4025.26 ▇▁▁▁▁
Mid-year Population (thousands) 153 1 169.41 114.48 2.21 97.61 134.93 208.18 1141.82 ▇▂▁▁▁
Area (km2) 153 1 660.72 1637.80 3.15 97.96 275.62 661.06 26473.95 ▇▁▁▁▁

10.2 Data details: CSE territorial

Original data (all districts)

skimr::skim(cse_terr_orig)
Table 10.2: Data summary
Name cse_terr_orig
Number of rows 331
Number of columns 23
Key NULL
_______________________
Column type frequency:
character 2
numeric 21
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
id 0 1 9 9 0 331 0
name 0 1 4 35 0 331 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Housing - Mains gas (t CO2e) 0 1 190852.62 182673.33 0.00 97220.00 131038.45 223354.21 1385272.76 ▇▁▁▁▁
Housing - Electricity (t CO2e) 0 1 86663.13 83524.18 1943.34 44655.72 63196.10 93121.88 663982.08 ▇▁▁▁▁
Housing - Oil (t CO2e) 0 1 37606.39 69741.81 1.04 714.59 8789.51 48160.27 441375.15 ▇▁▁▁▁
Housing - LPG (t CO2e) 0 1 4167.07 7371.96 0.00 469.25 1778.23 4239.50 61245.83 ▇▁▁▁▁
Housing - Biomass (t CO2e) 0 1 771.86 1168.18 0.52 159.88 405.37 853.88 8950.32 ▇▁▁▁▁
Housing - Coal (t CO2e) 0 1 1829.39 2952.05 0.00 427.02 845.21 1835.48 20794.73 ▇▁▁▁▁
Industrial and commercial - Electricity (t CO2e) 0 1 132300.07 137891.68 2252.58 59765.86 86400.95 141105.07 923959.45 ▇▁▁▁▁
Industrial and commercial - Mains gas (t CO2e) 0 1 113795.30 125630.61 0.00 42721.85 70456.50 130151.33 858852.28 ▇▁▁▁▁
Industrial and commercial - Other Fuels (t CO2e) 0 1 53872.07 68865.42 1180.35 19306.49 33291.08 54312.41 475748.40 ▇▁▁▁▁
Industrial and commercial - Large industrial consumers (t CO2e) 0 1 73703.57 409783.50 0.00 20.27 551.86 7433.72 6255114.95 ▇▁▁▁▁
Power generation (t CO2e) 0 1 202476.76 820528.91 0.09 7.46 1783.81 13920.26 8217271.92 ▇▁▁▁▁
Agriculture - Fuel (t CO2e) 0 1 16214.05 31376.01 19.35 1050.88 5662.08 17396.81 263250.12 ▇▁▁▁▁
Agriculture - Livestock and crop-related emissions (t CO2e) 0 1 110524.88 240350.88 0.16 3302.14 28357.92 99250.50 2100904.13 ▇▁▁▁▁
Aviation (t CO2e) 0 1 130491.98 134944.30 1357.78 62146.89 85907.73 154781.14 1118247.31 ▇▁▁▁▁
Shipping (t CO2e) 0 1 51973.77 53747.08 540.79 24752.54 34216.27 61647.92 445387.71 ▇▁▁▁▁
Diesel fuelled railways (t CO2e) 0 1 6482.85 9255.80 0.00 786.59 2905.88 7627.29 66721.19 ▇▁▁▁▁
F-gases (t CO2e) 0 1 44589.47 46474.02 759.20 20143.06 29119.96 47557.04 311404.67 ▇▁▁▁▁
Road Transport (t CO2e) 0 1 418242.72 490108.99 491.38 181517.18 295469.30 440058.82 4070305.68 ▇▁▁▁▁
Other Transport (t CO2e) 0 1 7998.78 14329.64 194.29 1348.54 2844.33 8448.24 118796.62 ▇▁▁▁▁
Waste management (t CO2e) 0 1 87630.55 118715.34 47.04 21207.78 45799.40 93602.67 811864.78 ▇▁▁▁▁
Land use, land-use change, and forestry (t CO2e) 0 1 -21778.97 79199.08 -1114266.33 -22216.81 -5665.84 -1378.72 290789.88 ▁▁▁▇▁

10.3 Data details: CSE consumption

Original data (all districts)

skimr::skim(cse_cons_orig)
Table 10.3: Data summary
Name cse_cons_orig
Number of rows 331
Number of columns 17
Key NULL
_______________________
Column type frequency:
character 2
numeric 15
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
id 0 1 9 9 0 331 0
name 0 1 4 35 0 331 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Consumption of goods and services - Purchase of goods (t CO2e) 0 1 268862.96 254028.37 3253.64 137135.19 187813.51 297865.53 2009457.74 ▇▁▁▁▁
Consumption of goods and services - Use of services (t CO2e) 0 1 122686.78 115963.99 1703.23 62807.03 83275.82 138173.10 916269.26 ▇▁▁▁▁
Consumption of goods and services - Other consumption related emissions (t CO2e) 0 1 103039.49 98010.77 680.97 53703.24 72993.60 112484.27 786593.11 ▇▁▁▁▁
Food and diet - Meat and fish (t CO2e) 0 1 180030.07 169391.00 2258.79 89337.21 123557.75 206969.04 1335364.18 ▇▁▁▁▁
Food and diet - Other food and drink (t CO2e) 0 1 146601.40 138141.41 1707.71 73927.36 101001.71 166610.40 1093305.47 ▇▁▁▁▁
Housing - Mains gas (t CO2e) 0 1 190852.62 182673.33 0.00 97220.00 131038.45 223354.21 1385272.76 ▇▁▁▁▁
Housing - Electricity (t CO2e) 0 1 86663.13 83524.18 1943.34 44655.72 63196.10 93121.88 663982.08 ▇▁▁▁▁
Housing - Oil (t CO2e) 0 1 37606.39 69741.81 1.04 714.59 8789.51 48160.27 441375.15 ▇▁▁▁▁
Housing - LPG (t CO2e) 0 1 4167.07 7371.96 0.00 469.25 1778.23 4239.50 61245.83 ▇▁▁▁▁
Housing - Biomass (t CO2e) 0 1 771.86 1168.18 0.52 159.88 405.37 853.88 8950.32 ▇▁▁▁▁
Housing - Coal (t CO2e) 0 1 1829.39 2952.05 0.00 427.02 845.21 1835.48 20794.73 ▇▁▁▁▁
Travel - Flights (t CO2e) 0 1 99293.70 97880.76 1263.94 49836.38 70791.32 104950.66 755526.40 ▇▁▁▁▁
Travel - Public transport (t CO2e) 0 1 42579.54 40346.20 650.93 21713.78 29766.72 46779.59 316474.05 ▇▁▁▁▁
Travel - Private transport (t CO2e) 0 1 145632.98 140132.03 2106.17 75665.79 105668.52 151288.59 1113486.12 ▇▁▁▁▁
Waste - Waste (t CO2e) 0 1 6970.62 9644.02 98.62 2610.51 4438.13 8138.54 107477.57 ▇▁▁▁▁

11 Appendix: R environment

Analysis completed in 12.56 seconds ( 0.21 minutes) using knitr in RStudio with R version 4.1.2 (2021-11-01) running on x86_64-apple-darwin17.0.

11.1 R packages used

  • base R (R Core Team 2016)
  • bookdown (Xie 2016a)
  • data.table (Dowle et al. 2015)
  • flextable (Gohel 2021)
  • knitr (Xie 2016b)
  • rmarkdown (Allaire et al. 2018)
  • skimr [skimr]

Appendix: References

Allaire, JJ, Yihui Xie, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, Hadley Wickham, Joe Cheng, and Winston Chang. 2018. Rmarkdown: Dynamic Documents for r. https://CRAN.R-project.org/package=rmarkdown.
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.
Gohel, David. 2021. Flextable: Functions for Tabular Reporting. https://CRAN.R-project.org/package=flextable.
R Core Team. 2016. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Xie, Yihui. 2016a. Bookdown: Authoring Books and Technical Documents with R Markdown. Boca Raton, Florida: Chapman; Hall/CRC. https://github.com/rstudio/bookdown.
———. 2016b. Knitr: A General-Purpose Package for Dynamic Report Generation in r. https://CRAN.R-project.org/package=knitr.