update industry to new JRC-idees
This commit is contained in:
parent
c99cd72727
commit
201889424c
@ -716,7 +716,7 @@ industry:
|
||||
MWh_CH4_per_tMeOH: 10.25
|
||||
MWh_MeOH_per_tMeOH: 5.528
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
reference_year: 2021
|
||||
|
||||
|
||||
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#costs
|
||||
|
@ -509,7 +509,7 @@ rule build_industrial_production_per_country:
|
||||
countries=config_provider("countries"),
|
||||
input:
|
||||
ammonia_production=resources("ammonia_production.csv"),
|
||||
jrc="data/bundle/jrc-idees-2015",
|
||||
jrc="data/bundle/jrc-idees-2021",
|
||||
eurostat="data/eurostat/Balances-April2023",
|
||||
output:
|
||||
industrial_production_per_country=resources(
|
||||
@ -656,7 +656,7 @@ rule build_industrial_energy_demand_per_country_today:
|
||||
countries=config_provider("countries"),
|
||||
industry=config_provider("industry"),
|
||||
input:
|
||||
jrc="data/bundle/jrc-idees-2015",
|
||||
jrc="data/bundle/jrc-idees-2021",
|
||||
industrial_production_per_country=resources(
|
||||
"industrial_production_per_country.csv"
|
||||
),
|
||||
|
@ -8,7 +8,7 @@ Build industrial energy demand per country.
|
||||
Inputs
|
||||
-------
|
||||
|
||||
- ``data/bundle/jrc-idees-2015``
|
||||
- ``data/bundle/jrc-idees-2021``
|
||||
- ``industrial_production_per_country.csv``
|
||||
|
||||
Outputs
|
||||
@ -120,7 +120,7 @@ jrc_names = {"GR": "EL", "GB": "UK"}
|
||||
|
||||
def industrial_energy_demand_per_country(country, year, jrc_dir):
|
||||
jrc_country = jrc_names.get(country, country)
|
||||
fn = f"{jrc_dir}/JRC-IDEES-2015_EnergyBalance_{jrc_country}.xlsx"
|
||||
fn = f"{jrc_dir}/{jrc_country}/JRC-IDEES-2021_EnergyBalance_{jrc_country}.xlsx"
|
||||
|
||||
sheets = list(sector_sheets.values())
|
||||
df_dict = pd.read_excel(fn, sheet_name=sheets, index_col=0)
|
||||
|
@ -16,7 +16,7 @@ Relevant Settings
|
||||
Inputs
|
||||
-------
|
||||
- ``resources/ammonia_production.csv``
|
||||
- ``data/bundle-sector/jrc-idees-2015``
|
||||
- ``data/bundle-sector/jrc-idees-2021``
|
||||
- ``data/eurostat``
|
||||
|
||||
Outputs
|
||||
@ -50,11 +50,11 @@ The following subcategories [kton/a] are considered:
|
||||
- Aluminium - primary production
|
||||
- Aluminium - secondary production
|
||||
- Other non-ferrous metals
|
||||
- Transport Equipment
|
||||
- Machinery Equipment
|
||||
- Transport equipment
|
||||
- Machinery equipment
|
||||
- Textiles and leather
|
||||
- Wood and wood products
|
||||
- Other Industrial Sectors
|
||||
- Other industrial sectors
|
||||
- Ammonia
|
||||
- HVC
|
||||
- Chlorine
|
||||
@ -79,25 +79,25 @@ ktoe_to_twh = 0.01163
|
||||
|
||||
sub_sheet_name_dict = {
|
||||
"Iron and steel": "ISI",
|
||||
"Chemicals Industry": "CHI",
|
||||
"Chemical industry": "CHI",
|
||||
"Non-metallic mineral products": "NMM",
|
||||
"Pulp, paper and printing": "PPA",
|
||||
"Food, beverages and tobacco": "FBT",
|
||||
"Non Ferrous Metals": "NFM",
|
||||
"Transport Equipment": "TRE",
|
||||
"Machinery Equipment": "MAE",
|
||||
"Transport equipment": "TRE",
|
||||
"Machinery equipment": "MAE",
|
||||
"Textiles and leather": "TEL",
|
||||
"Wood and wood products": "WWP",
|
||||
"Other Industrial Sectors": "OIS",
|
||||
"Other industrial sectors": "OIS",
|
||||
}
|
||||
|
||||
eu28 = cc.EU28as("ISO2").ISO2.values
|
||||
eu27 = cc.EU27as("ISO2").ISO2.values
|
||||
|
||||
jrc_names = {"GR": "EL", "GB": "UK"}
|
||||
|
||||
sect2sub = {
|
||||
"Iron and steel": ["Electric arc", "Integrated steelworks"],
|
||||
"Chemicals Industry": [
|
||||
"Chemical industry": [
|
||||
"Basic chemicals",
|
||||
"Other chemicals",
|
||||
"Pharmaceutical products etc.",
|
||||
@ -119,11 +119,11 @@ sect2sub = {
|
||||
"Aluminium - secondary production",
|
||||
"Other non-ferrous metals",
|
||||
],
|
||||
"Transport Equipment": ["Transport Equipment"],
|
||||
"Machinery Equipment": ["Machinery Equipment"],
|
||||
"Transport equipment": ["Transport equipment"],
|
||||
"Machinery equipment": ["Machinery equipment"],
|
||||
"Textiles and leather": ["Textiles and leather"],
|
||||
"Wood and wood products": ["Wood and wood products"],
|
||||
"Other Industrial Sectors": ["Other Industrial Sectors"],
|
||||
"Other industrial sectors": ["Other industrial sectors"],
|
||||
}
|
||||
|
||||
sub2sect = {v: k for k, vv in sect2sub.items() for v in vv}
|
||||
@ -145,27 +145,29 @@ fields = {
|
||||
"Aluminium - primary production": "Aluminium - primary production",
|
||||
"Aluminium - secondary production": "Aluminium - secondary production",
|
||||
"Other non-ferrous metals": "Other non-ferrous metals (kt lead eq.)",
|
||||
"Transport Equipment": "Physical output (index)",
|
||||
"Machinery Equipment": "Physical output (index)",
|
||||
"Transport equipment": "Physical output (index)",
|
||||
"Machinery equipment": "Physical output (index)",
|
||||
"Textiles and leather": "Physical output (index)",
|
||||
"Wood and wood products": "Physical output (index)",
|
||||
"Other Industrial Sectors": "Physical output (index)",
|
||||
"Other industrial sectors": "Physical output (index)",
|
||||
}
|
||||
|
||||
eb_sectors = {
|
||||
"Iron & steel": "Iron and steel",
|
||||
"Chemical & petrochemical": "Chemicals Industry",
|
||||
"Chemical & petrochemical": "Chemical industry",
|
||||
"Non-ferrous metals": "Non-metallic mineral products",
|
||||
"Paper, pulp & printing": "Pulp, paper and printing",
|
||||
"Food, beverages & tobacco": "Food, beverages and tobacco",
|
||||
"Non-metallic minerals": "Non Ferrous Metals",
|
||||
"Transport equipment": "Transport Equipment",
|
||||
"Machinery": "Machinery Equipment",
|
||||
"Transport equipment": "Transport equipment",
|
||||
"Machinery": "Machinery equipment",
|
||||
"Textile & leather": "Textiles and leather",
|
||||
"Wood & wood products": "Wood and wood products",
|
||||
"Not elsewhere specified (industry)": "Other Industrial Sectors",
|
||||
"Not elsewhere specified (industry)": "Other industrial 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
|
||||
@ -173,16 +175,16 @@ eb_sectors = {
|
||||
e_switzerland = pd.Series(
|
||||
{
|
||||
"Iron and steel": 7889.0,
|
||||
"Chemicals Industry": 26871.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,
|
||||
"Transport equipment": 14993.0,
|
||||
"Machinery equipment": 4724.0,
|
||||
"Textiles and leather": 1742.0,
|
||||
"Wood and wood products": 0.0,
|
||||
"Other Industrial Sectors": 10825.0,
|
||||
"Other industrial sectors": 10825.0,
|
||||
"current electricity": 53760.0,
|
||||
}
|
||||
)
|
||||
@ -199,8 +201,12 @@ def get_energy_ratio(country, eurostat_dir, jrc_dir, year):
|
||||
if country == "CH":
|
||||
e_country = e_switzerland * tj_to_ktoe
|
||||
else:
|
||||
ct_eurostat = country.replace("GB","UK")
|
||||
if ct_eurostat == "UK":
|
||||
year=2019
|
||||
logger.info("Assume Eurostat data for GB from 2019.")
|
||||
# estimate physical output, energy consumption in the sector and country
|
||||
fn = f"{eurostat_dir}/{country}-Energy-balance-sheets-April-2023-edition.xlsb"
|
||||
fn = f"{eurostat_dir}/{ct_eurostat}-Energy-balance-sheets-April-2023-edition.xlsb"
|
||||
df = pd.read_excel(
|
||||
fn,
|
||||
sheet_name=str(min(2021, year)),
|
||||
@ -210,19 +216,19 @@ def get_energy_ratio(country, eurostat_dir, jrc_dir, year):
|
||||
)
|
||||
e_country = df.loc[eb_sectors.keys(), "Total"].rename(eb_sectors)
|
||||
|
||||
fn = f"{jrc_dir}/JRC-IDEES-2015_Industry_EU28.xlsx"
|
||||
fn = f"{jrc_dir}/EU27/JRC-IDEES-2021_Industry_EU27.xlsx"
|
||||
|
||||
with mute_print():
|
||||
df = pd.read_excel(fn, sheet_name="Ind_Summary", index_col=0, header=0).squeeze(
|
||||
"columns"
|
||||
)
|
||||
|
||||
assert df.index[48] == "by sector"
|
||||
assert df.index[49] == "by sector"
|
||||
year_i = df.columns.get_loc(year)
|
||||
e_eu28 = df.iloc[49:76, year_i]
|
||||
e_eu28.index = e_eu28.index.str.lstrip()
|
||||
e_eu27 = df.iloc[50:77, year_i]
|
||||
e_eu27.index = e_eu27.index.str.lstrip()
|
||||
|
||||
e_ratio = e_country / e_eu28
|
||||
e_ratio = e_country / e_eu27
|
||||
|
||||
return pd.Series({k: e_ratio[v] for k, v in sub2sect.items()})
|
||||
|
||||
@ -230,7 +236,7 @@ def get_energy_ratio(country, eurostat_dir, jrc_dir, year):
|
||||
def industry_production_per_country(country, year, eurostat_dir, jrc_dir):
|
||||
def get_sector_data(sector, country):
|
||||
jrc_country = jrc_names.get(country, country)
|
||||
fn = f"{jrc_dir}/JRC-IDEES-2015_Industry_{jrc_country}.xlsx"
|
||||
fn = f"{jrc_dir}/{jrc_country}/JRC-IDEES-2021_Industry_{jrc_country}.xlsx"
|
||||
sheet = sub_sheet_name_dict[sector]
|
||||
with mute_print():
|
||||
df = pd.read_excel(fn, sheet_name=sheet, index_col=0, header=0).squeeze(
|
||||
@ -245,10 +251,10 @@ def industry_production_per_country(country, year, eurostat_dir, jrc_dir):
|
||||
|
||||
return df
|
||||
|
||||
ct = "EU28" if country not in eu28 else country
|
||||
ct = "EU27" if country not in eu27 else country
|
||||
demand = pd.concat([get_sector_data(s, ct) for s in sect2sub])
|
||||
|
||||
if country not in eu28:
|
||||
if country not in eu27:
|
||||
demand *= get_energy_ratio(country, eurostat_dir, jrc_dir, year)
|
||||
|
||||
demand.name = country
|
||||
|
Loading…
Reference in New Issue
Block a user