diff --git a/data/ch_industrial_production_per_subsector.csv b/data/ch_industrial_production_per_subsector.csv new file mode 100644 index 00000000..acb7ed81 --- /dev/null +++ b/data/ch_industrial_production_per_subsector.csv @@ -0,0 +1,16 @@ +sector,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023 +Nahrung,19035,17728,16486,16782,16261,17062,17132,17335,15625,15713 +Textil / Leder,1845,1742,1450,1497,1433,1488,1331,1496,1371,1112 +Papier / Druck,12407,12257,11100,11086,9530,9436,8482,9186,8850,7657 +Chemie / Pharma,27253,27050,27501,26953,26506,26055,24889,25595,25028,23240 +Zement / Beton,15513,13307,13576,13429,13263,13221,12612,12843,12919,11400 +Andere NE-Mineralien,4029,3820,3884,4254,3546,3577,3475,3602,3603,3178 +Metall / Eisen,7841,7889,7638,8049,8053,7188,7051,6872,6782,5531 +NE-Metall,3386,3037,2833,2813,2743,2931,2719,2992,2896,2653 +Metall / Geräte,14652,14993,14272,14689,14300,15037,13946,15042,13862,12578 +Maschinen,4561,4724,4861,4957,4365,4364,4061,4290,3698,3545 +Andere Industrien,10750,10825,10225,9833,9689,9545,8696,9371,8823,8157 +current electricity,55142,53760,51302,52173,51604,51389,48933,51730,50926,46969 +,,,,,,,,,, +,,,,,,,,,, +"source: https://pubdb.bfe.admin.ch/de/publication/download/11817, accessed August 2024",,,,,,,,,, diff --git a/rules/build_sector.smk b/rules/build_sector.smk index c89e3cd6..4227422c 100644 --- a/rules/build_sector.smk +++ b/rules/build_sector.smk @@ -502,6 +502,7 @@ rule build_industrial_production_per_country: industry=config_provider("industry"), countries=config_provider("countries"), input: + ch_industrial_production="data/ch_industrial_production_per_subsector.csv", ammonia_production=resources("ammonia_production.csv"), jrc="data/jrc-idees-2021", eurostat="data/eurostat/Balances-April2023", diff --git a/scripts/build_industrial_production_per_country.py b/scripts/build_industrial_production_per_country.py index 4a9c43ed..5b691be6 100644 --- a/scripts/build_industrial_production_per_country.py +++ b/scripts/build_industrial_production_per_country.py @@ -31,7 +31,7 @@ The industrial production is taken from the `JRC-IDEES ` dataset. The industrial production is calculated for the year specified in the config["industry"]["reference_year"]. -The ammonia production is provided by the rule `build_ammonia_production `. Since Switzerland is not part of the EU28 nor reported by eurostat, the energy consumption in the industrial sectors is taken from the `BFE dataset. +The ammonia production is provided by the rule `build_ammonia_production `. Since Switzerland is not part of the EU28 nor reported by eurostat, the energy consumption in the industrial sectors is taken from the `BFE dataset. After the industrial production is calculated, the basic chemicals are separated into ammonia, chlorine, methanol and HVC. The production of these chemicals is assumed to be proportional to the production of basic chemicals without ammonia. The following subcategories [kton/a] are considered: @@ -167,27 +167,19 @@ eb_sectors = { } -# TODO: this should go in a csv in `data` -# Annual energy consumption in Switzerland by sector in 2015 (in TJ) -# From: Energieverbrauch in der Industrie und im Dienstleistungssektor, Der Bundesrat -# http://www.bfe.admin.ch/themen/00526/00541/00543/index.html?lang=de&dossier_id=00775 -e_switzerland = pd.Series( - { - "Iron and steel": 7889.0, - "Chemical industry": 26871.0, - "Non-metallic mineral products": 15513.0 + 3820.0, - "Pulp, paper and printing": 12004.0, - "Food, beverages and tobacco": 17728.0, - "Non Ferrous Metals": 3037.0, - "Transport equipment": 14993.0, - "Machinery equipment": 4724.0, - "Textiles and leather": 1742.0, - "Wood and wood products": 0.0, - "Other industrial sectors": 10825.0, - "current electricity": 53760.0, +ch_mapping = { + "Nahrung": "Food, beverages and tobacco", + "Textil / Leder": "Textiles and leather", + "Papier / Druck": "Pulp, paper and printing", + "Chemie / Pharma": "Chemical industry", + "Zement / Beton": "Non-metallic mineral products", + "Andere NE-Mineralien": "Other non-ferrous metals", + "Metall / Eisen": "Iron and steel", + "NE-Metall": "Non Ferrous Metals", + "Metall / Geräte" : "Transport equipment", + "Maschinen": "Machinery equipment", + "Andere Industrien": "Other industrial sectors", } -) - def find_physical_output(df): start = np.where(df.index.str.contains("Physical output", na=""))[0][0] @@ -198,11 +190,14 @@ def find_physical_output(df): def get_energy_ratio(country, eurostat_dir, jrc_dir, year): if country == "CH": - e_country = e_switzerland * tj_to_ktoe + # data ranges between 2014-2023 + e_country = pd.read_csv(snakemake.input.ch_industrial_production, + index_col=0).dropna() + e_country = e_country.rename(index=ch_mapping).groupby(level=0).sum() + e_country = e_country[str(min(2019, year))] + e_country *= tj_to_ktoe else: ct_eurostat = country.replace("GB", "UK") - if ct_eurostat == "UK": - logger.info("Assume Eurostat data for GB from 2019.") # estimate physical output, energy consumption in the sector and country fn = f"{eurostat_dir}/{ct_eurostat}-Energy-balance-sheets-April-2023-edition.xlsb" df = pd.read_excel(