add coke oven transformation output

This commit is contained in:
lisazeyen 2024-08-09 14:14:02 +02:00
parent fe9185ef3f
commit c5256c1f37
3 changed files with 48 additions and 1 deletions

View File

@ -301,6 +301,7 @@ rule build_energy_totals:
eurostat="data/eurostat/Balances-April2023",
eurostat_households="data/eurostat/eurostat-household_energy_balances-february_2024.csv",
output:
transformation_output_coke=resources("transformation_output_coke.csv"),
energy_name=resources("energy_totals.csv"),
co2_name=resources("co2_totals.csv"),
transport_name=resources("transport_data.csv"),
@ -666,6 +667,7 @@ rule build_industrial_energy_demand_per_country_today:
countries=config_provider("countries"),
industry=config_provider("industry"),
input:
transformation_output_coke=resources("transformation_output_coke.csv"),
jrc="data/jrc-idees-2021",
industrial_production_per_country=resources(
"industrial_production_per_country.csv"

View File

@ -1473,6 +1473,31 @@ def update_residential_from_eurostat(energy: pd.DataFrame) -> pd.DataFrame:
)
def build_transformation_output_coke(eurostat, fn):
"""
Extracts and builds the transformation output data for coke ovens from the
Eurostat dataset.
This function specifically filters the Eurostat data to extract
transformation output related to coke ovens.
Since the transformation output for coke ovens
is not included in the final energy consumption of the iron and steel sector,
it needs to be processed and added separately. The filtered data is saved
as a CSV file.
Parameters:
eurostat (pd.DataFrame): A pandas DataFrame containing Eurostat data with
a multi-level index
fn (str): The file path where the resulting CSV file should be saved.
Output:
The resulting transformation output data for coke ovens is saved as a CSV
file at the path specified in fn.
"""
slicer = pd.IndexSlice[:,:,:, "Coke ovens", "Other sources", :]
df = eurostat.loc[slicer, :].droplevel(level=[2,3,4,5])
df.to_csv(fn)
# %%
if __name__ == "__main__":
if "snakemake" not in globals():
@ -1498,6 +1523,10 @@ if __name__ == "__main__":
nprocesses=snakemake.threads,
disable_progressbar=snakemake.config["run"].get("disable_progressbar", False),
)
build_transformation_output_coke(eurostat,
snakemake.output.transformation_output_coke)
swiss = build_swiss()
idees = build_idees(idees_countries)

View File

@ -227,6 +227,18 @@ def industrial_energy_demand(countries, year):
return pd.concat(demand_l, keys=countries)
def add_coke_ovens(demand, fn, year):
df = pd.read_csv(fn, index_col=[0,1]).xs(year, level=1)
df = df.rename(columns={'Total all products':'Total'})[fuels.keys()]
df = df.rename(columns=fuels).T.groupby(level=0).sum().T
df["other"] = df["all"] - df.loc[:,df.columns != "all"].sum(axis=1)
df = df.T.reindex_like(demand.xs("Integrated steelworks", axis=1, level=1)).fillna(0)
sel = demand.columns.get_level_values(1)=="Integrated steelworks"
demand.loc[:,sel] += 0.75 * df.values
return demand
if __name__ == "__main__":
if "snakemake" not in globals():
from _helpers import mock_snakemake
@ -252,7 +264,11 @@ if __name__ == "__main__":
# for format compatibility
demand = demand.stack(future_stack=True).unstack(level=[0, 2])
# add energy consumption of coke ovens
demand = add_coke_ovens(demand, snakemake.input.transformation_output_coke,
year)
# style and annotation
demand.index.name = "TWh/a"
demand.sort_index(axis=1, inplace=True)