From fd1121af4a45f203ce97bd6c8fe1af23a9165f4e Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Fri, 2 Jul 2021 11:07:35 +0200 Subject: [PATCH] add rule for build_biomass_transport_costs --- Snakefile | 18 +++++- scripts/build_biomass_transport_costs.py | 70 ++++++++++++++++++++++ scripts/convert_biomass_transport_costs.py | 62 ------------------- 3 files changed, 85 insertions(+), 65 deletions(-) create mode 100644 scripts/build_biomass_transport_costs.py delete mode 100644 scripts/convert_biomass_transport_costs.py diff --git a/Snakefile b/Snakefile index aba8ff71..45c33da9 100644 --- a/Snakefile +++ b/Snakefile @@ -180,6 +180,18 @@ rule build_biomass_potentials: script: 'scripts/build_biomass_potentials.py' +rule build_biomass_transport_costs: + input: "data/biomass/biomass potentials in europe_web rev.pdf" + output: + supply_chain1="resources/biomass_transport_costs_supply_chain1.csv", + supply_chain2="resources/biomass_transport_costs_supply_chain2.csv", + transport_costs="resources/biomass_transport_costs.csv", + threads: 1 + resources: mem_mb=1000 + benchmark: "benchmarks/build_biomass_transport_costs" + script: 'scripts/build_biomass_transport_costs.py' + + rule build_ammonia_production: input: usgs="data/myb1-2017-nitro.xls" @@ -321,10 +333,10 @@ rule prepare_sector_network: energy_totals_name='resources/energy_totals.csv', co2_totals_name='resources/co2_totals.csv', transport_name='resources/transport_data.csv', - traffic_data_KFZ = "data/emobility/KFZ__count", - traffic_data_Pkw = "data/emobility/Pkw__count", + traffic_data_KFZ="data/emobility/KFZ__count", + traffic_data_Pkw="data/emobility/Pkw__count", biomass_potentials='resources/biomass_potentials.csv', - biomass_transport='data/biomass/biomass_transport_costs.csv', + biomass_transport="resources/biomass_transport_costs.csv", heat_profile="data/heat_load_profile_BDEW.csv", costs=CDIR + "costs_{planning_horizons}.csv", profile_offwind_ac=pypsaeur("resources/profile_offwind-ac.nc"), diff --git a/scripts/build_biomass_transport_costs.py b/scripts/build_biomass_transport_costs.py new file mode 100644 index 00000000..ee681566 --- /dev/null +++ b/scripts/build_biomass_transport_costs.py @@ -0,0 +1,70 @@ +""" +Reads biomass transport costs for different countries of the JRC report + + "The JRC-EU-TIMES model. + Bioenergy potentials + for EU and neighbouring countries." + (2015) + +converts them from units 'EUR per km/ton' -> 'EUR/ (km MWh)' + +assuming as an approximation energy content of wood pellets + +@author: bw0928 +""" + +import pandas as pd +import tabula as tbl + +ENERGY_CONTENT = 4.8 # unit MWh/tonne (assuming wood pellets) + + +def build_biomass_transport_costs(): + + df_list = tbl.read_pdf( + snakemake.input[0], + pages="145-147", + multiple_tables=True, + ) + + countries = df_list[0][0].iloc[6:].rename(index=lambda x: x + 1) + + # supply chain 1 + df = df_list[1].copy().rename(index=countries.to_dict()) + df.rename( + columns=df.iloc[:6].apply(lambda col: col.str.cat(sep=" "), axis=0).to_dict(), + inplace=True, + ) + df = df.iloc[6:] + df.loc[6] = df.loc[6].str.replace("€", "EUR") + + # supply chain 2 + df2 = df_list[2].copy().rename(index=countries.to_dict()) + df2.rename( + columns=df2.iloc[:6].apply(lambda col: col.str.cat(sep=" "), axis=0).to_dict(), + inplace=True, + ) + df2 = df2.iloc[6:] + df2.loc[6] = df2.loc[6].str.replace("€", "EUR") + + df.to_csv(snakemake.output.supply_chain1) + df2.to_csv(snakemake.output.supply_chain1) + + transport_costs = pd.concat([df["per km/ton"], df2["per km/ton"]], axis=1).drop(6) + transport_costs = transport_costs.astype(float, errors="ignore").mean(axis=1) + + # convert unit to EUR/MWh + transport_costs /= ENERGY_CONTENT + transport_costs = pd.DataFrame(transport_costs, columns=["cost [EUR/(km MWh)]"]) + + # rename + transport_costs.rename({"UK": "GB", "XK": "KO", "EL": "GR"}, inplace=True) + + # add missing Norway + transport_costs.loc["NO"] = transport_costs.loc["SE"] + transport_costs.to_csv(snakemake.output.transport_costs) + + +if __name__ == "__main__": + + prepare_biomass_transport_costs() diff --git a/scripts/convert_biomass_transport_costs.py b/scripts/convert_biomass_transport_costs.py deleted file mode 100644 index 57bd455f..00000000 --- a/scripts/convert_biomass_transport_costs.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Thu Mar 12 19:11:20 2020 - -reads biomass transport costs for different countries of the JRC report - - "The JRC-EU-TIMES model. - Bioenergy potentials - for EU and neighbouring countries." - (2015) - -converts them from units 'EUR per km/ton' -> 'EUR/ (km MWh)' - -assuming as an approximation energy content of wood pellets - -@author: bw0928 -""" - -import pandas as pd -from tabula import read_pdf -import numpy as np - -# read pdf file -df_list = read_pdf("biomass potentials in europe_web rev.pdf", - pages="145-147", - multiple_tables=True) -energy_content = 4.8 # unit MWh/tonne (assuming wood pellets) -# %% -columns = ["Komponente", "Größe", "Einheit", 2020, 2025, 2030, 2035, 2040, - 2045, 2050] -countries = df_list[0][0].iloc[6:].rename(index=lambda x: x+1) - -# supply chain 1 -df = df_list[1].copy().rename(index=countries.to_dict()) -df.rename(columns= df.iloc[:6].apply(lambda col: col.str.cat(sep=" "), - axis=0).to_dict(), inplace=True) -df = df.iloc[6:] -df.loc[6]=df.loc[6].str.replace("€", "EUR") - -# supply chain 2 -df2 = df_list[2].copy().rename(index=countries.to_dict()) -df2.rename(columns= df2.iloc[:6].apply(lambda col: col.str.cat(sep=" "), - axis=0).to_dict(), inplace=True) -df2 = df2.iloc[6:] -df2.loc[6]=df2.loc[6].str.replace("€", "EUR") - -#%% -df.to_csv("biomass_transport_costs_supply_chain1.csv") -df2.to_csv("biomass_transport_costs_supply_chain2.csv") - -transport_costs = pd.concat([df['per km/ton'], df2['per km/ton']],axis=1).drop(6) -transport_costs = transport_costs.astype(float, errors="ignore").mean(axis=1) - -# convert unit to EUR/MWh -transport_costs /= energy_content -transport_costs = pd.DataFrame(transport_costs, columns=["cost [EUR/(km MWh)]"]) -# rename -transport_costs.rename({"UK": "GB", "XK": "KO", "EL": "GR"}, inplace=True) -# add missing Norway -transport_costs.loc["NO"] = transport_costs.loc["SE"] -transport_costs.to_csv("biomass_transport_final.csv")