energy_totals: co2 calculation with eurostat 2021 data

This commit is contained in:
Fabian Neumann 2022-07-23 17:05:56 +02:00
parent ba8b3f9ce7
commit f70f006a47

View File

@ -606,23 +606,26 @@ def build_eea_co2(year=1990):
return emissions / 1e3 return emissions / 1e3
def build_eurostat_co2(countries, year=1990): def build_eurostat_co2(countries, eurostat=None, year=1990):
eurostat = build_eurostat(countries, year) if eurostat is None:
df = build_eurostat(countries, year)
else:
df = eurostat.xs(year, level='year')
specific_emissions = pd.Series(index=eurostat.columns, dtype=float) specific_emissions = pd.Series(index=df.columns, dtype=float)
# emissions in tCO2_equiv per MWh_th # emissions in tCO2_equiv per MWh_th
specific_emissions["Solid fuels"] = 0.36 # Approximates coal specific_emissions["Solid fossil fuels"] = 0.36 # Approximates coal
specific_emissions["Oil (total)"] = 0.285 # Average of distillate and residue specific_emissions["Oil and petroleum products"] = 0.285 # Average of distillate and residue
specific_emissions["Gas"] = 0.2 # For natural gas specific_emissions["Natural gas"] = 0.2 # For natural gas
# oil values from https://www.eia.gov/tools/faqs/faq.cfm?id=74&t=11 # oil values from https://www.eia.gov/tools/faqs/faq.cfm?id=74&t=11
# Distillate oil (No. 2) 0.276 # Distillate oil (No. 2) 0.276
# Residual oil (No. 6) 0.298 # Residual oil (No. 6) 0.298
# https://www.eia.gov/electricity/annual/html/epa_a_03.html # https://www.eia.gov/electricity/annual/html/epa_a_03.html
return eurostat.multiply(specific_emissions).sum(axis=1) return df.multiply(specific_emissions).sum(axis=1)
def build_co2_totals(countries, eea_co2, eurostat_co2): def build_co2_totals(countries, eea_co2, eurostat_co2):
@ -632,19 +635,19 @@ def build_co2_totals(countries, eea_co2, eurostat_co2):
for ct in countries.intersection(["BA", "RS", "AL", "ME", "MK"]): for ct in countries.intersection(["BA", "RS", "AL", "ME", "MK"]):
mappings = { mappings = {
"electricity": (ct, "+", "Conventional Thermal Power Stations", "of which From Coal"), "electricity": (ct, "Transformation input", "Electricity & heat generation", "Main"),
"residential non-elec": (ct, "+", "+", "Residential"), "residential non-elec": (ct, "Final energy consumption", "Other sectors", "Households"),
"services non-elec": (ct, "+", "+", "Services"), "services non-elec": (ct, "Final energy consumption", "Other sectors", "Commercial & public services"),
"road non-elec": (ct, "+", "+", "Road"), "road non-elec": (ct, "Final energy consumption", "Transport sector", "Road"),
"rail non-elec": (ct, "+", "+", "Rail"), "rail non-elec": (ct, "Final energy consumption", "Transport sector", "Rail"),
"domestic navigation": (ct, "+", "+", "Domestic Navigation"), "domestic navigation": (ct, "Final energy consumption", "Transport sector", "Domestic navigation"),
"international navigation": (ct, "-", "Bunkers"), "international navigation": (ct, "Main", "International maritime bunkers"),
"domestic aviation": (ct, "+", "+", "Domestic aviation"), "domestic aviation": (ct, "Final energy consumption", "Transport sector", "Domestic aviation"),
"international aviation": (ct, "+", "+", "International aviation"), "international aviation": (ct, "Main", "International aviation"),
# does not include industrial process emissions or fuel processing/refining # does not include industrial process emissions or fuel processing/refining
"industrial non-elec": (ct, "+", "Industry"), "industrial non-elec": (ct, "Final energy consumption", "Industry sector", "Non-energy use in industry sector"),
# does not include non-energy emissions # does not include non-energy emissions
"agriculture": (eurostat_co2.index.get_level_values(0) == ct) & eurostat_co2.index.isin(["Agriculture / Forestry", "Fishing"], level=3), "agriculture": (eurostat_co2.index.get_level_values(0) == ct) & eurostat_co2.index.isin(["Agriculture & forestry", "Fishing"], level=3),
} }
for i, mi in mappings.items(): for i, mi in mappings.items():
@ -709,7 +712,7 @@ if __name__ == "__main__":
base_year_emissions = config["base_emissions_year"] base_year_emissions = config["base_emissions_year"]
eea_co2 = build_eea_co2(base_year_emissions) eea_co2 = build_eea_co2(base_year_emissions)
eurostat_co2 = build_eurostat_co2(countries, base_year_emissions) eurostat_co2 = build_eurostat_co2(countries, eurostat, base_year_emissions)
co2 = build_co2_totals(countries, eea_co2, eurostat_co2) co2 = build_co2_totals(countries, eea_co2, eurostat_co2)
co2.to_csv(snakemake.output.co2_name) co2.to_csv(snakemake.output.co2_name)