add release notes; rename artificial to synthetic

This commit is contained in:
Fabian Neumann 2024-03-15 14:28:01 +01:00
parent f50ee2f225
commit e459c3c89d
7 changed files with 65 additions and 14 deletions

View File

@ -292,7 +292,7 @@ load:
manual_adjustments: true # false manual_adjustments: true # false
scaling_factor: 1.0 scaling_factor: 1.0
fixed_year: false # false or year (e.g. 2013) fixed_year: false # false or year (e.g. 2013)
supplement_missing_data_artificially: true supplement_synthetic: true
# docs # docs
# TODO: PyPSA-Eur merge issue in prepare_sector_network.py # TODO: PyPSA-Eur merge issue in prepare_sector_network.py

View File

@ -4,4 +4,4 @@ time_shift_for_large_gaps,string,string,"Periods which are used for copying time
manual_adjustments,bool,"{true, false}","Whether to adjust the load data manually according to the function in :func:`manual_adjustment`." manual_adjustments,bool,"{true, false}","Whether to adjust the load data manually according to the function in :func:`manual_adjustment`."
scaling_factor,--,float,"Global correction factor for the load time series." scaling_factor,--,float,"Global correction factor for the load time series."
fixed_year,--,Year or False,"To specify a fixed year for the load time series that deviates from the snapshots' year" fixed_year,--,Year or False,"To specify a fixed year for the load time series that deviates from the snapshots' year"
supplement_missing_data_artificially,bool,"{true, false}","Whether to supplement missing data for selected time period should be supplemented by artificial data from https://zenodo.org/record/7070438/files/demand_hourly.csv." supplement_synthetic,bool,"{true, false}","Whether to supplement missing data for selected time period should be supplemented by synthetic data from https://zenodo.org/record/10820928."

1 Unit Values Description
4 manual_adjustments bool {true, false} Whether to adjust the load data manually according to the function in :func:`manual_adjustment`.
5 scaling_factor -- float Global correction factor for the load time series.
6 fixed_year -- Year or False To specify a fixed year for the load time series that deviates from the snapshots' year
7 supplement_missing_data_artificially supplement_synthetic bool {true, false} Whether to supplement missing data for selected time period should be supplemented by artificial data from https://zenodo.org/record/7070438/files/demand_hourly.csv. Whether to supplement missing data for selected time period should be supplemented by synthetic data from https://zenodo.org/record/10820928.

View File

@ -10,6 +10,52 @@ Release Notes
Upcoming Release Upcoming Release
================ ================
* Enhanced support for choosing different weather years
(https://github.com/PyPSA/pypsa-eur/pull/204):
- Processed energy statistics from eurostat (1990-2021) and IDEES (2000-2015)
are now initially stored for all available years and filtered by the year
given in ``energy: energy_totals_year:``.
- Added option to supplement electricity load data with synthetic time series
for years not contained in OPSD (from https://zenodo.org/records/10820928,
``load: supplement_synthetic:``).
- The total annual heat demand for years not contained in the energy
statistics by eurostat (1990-2021) or IDEES (2000-2015) are scaled based on
a regression between the total number of heating degree days and the total
annual heat demand between the years 2007-2021, assuming a similar building
stock.
- Added option to scale annual hydro-electricity generation data for years not
contained in the in EIA (1980-2021) based on a regression between annual
generation and total runoff per country for the years 1980-2021
(``renewable: hydro: eia_approximate_missing:``)
- Added option to normalize annual hydro generation data by the associated
installed capacity reported by EIA (1980-2021) in order to eliminate changes
in generation due to newly built capacity (``renewable: hydro:
eia_approximate_missing: eia_correct_by_capacity:``).
- Added option to make hydro generation data independent of weather year
(``renewable: hydro: eia_approximate_missing: eia_norm_year:``).
- Added option to drop leap days (``enable: drop_leap_day:``).
- Added option to make electric load data independent of weather year
(``load: fixed_year:``).
- Include time series of Swiss number of passenger vehicles from the `Swiss
Federal Statistical Office
<https://www.bfs.admin.ch/bfs/en/home/statistics/mobility-transport/transport-infrastructure-vehicles/vehicles/road-vehicles-stock-level-motorisation.html>`_.
- Updated hydro-electricity generation and capacity data from EIA.
- The easiest way to sweep over multiple weather years is to use the new
scenario management. An example for the necessary `create_scenarios.py`
script can be found in this `Github gist
<https://gist.github.com/fneum/47b857862dd9148a22eca5a2e85caa9a>`_.
* Upgrade to Snakemake v8.5+. This version is the new minimum version required. * Upgrade to Snakemake v8.5+. This version is the new minimum version required.
To upgrade an existing environment, run ``conda install -c bioconda To upgrade an existing environment, run ``conda install -c bioconda
snakemake-minimal">=8.5"`` and ``pip install snakemake-storage-plugin-http`` snakemake-minimal">=8.5"`` and ``pip install snakemake-storage-plugin-http``

View File

@ -56,6 +56,11 @@ Rule ``build_energy_totals``
.. automodule:: build_energy_totals .. automodule:: build_energy_totals
Rule ``build_heat_totals``
==============================================================================
.. automodule:: build_heat_totals
Rule ``build_gas_input_locations`` Rule ``build_gas_input_locations``
============================================================================== ==============================================================================

View File

@ -26,9 +26,9 @@ rule build_electricity_demand:
load=config_provider("load"), load=config_provider("load"),
input: input:
reported=ancient("data/electricity_demand_raw.csv"), reported=ancient("data/electricity_demand_raw.csv"),
artificial=lambda w: ( synthetic=lambda w: (
ancient("data/load_artificial_raw.csv") ancient("data/load_synthetic_raw.csv")
if config_provider("load", "supplement_missing_data_artificially")(w) if config_provider("load", "supplement_synthetic")(w)
else [] else []
), ),
output: output:

View File

@ -196,15 +196,15 @@ if config["enable"]["retrieve"]:
if config["enable"]["retrieve"]: if config["enable"]["retrieve"]:
rule retrieve_artificial_load_data: rule retrieve_synthetic_electricity_demand:
input: input:
storage( storage(
"https://zenodo.org/records/10820928/files/demand_hourly.csv", "https://zenodo.org/records/10820928/files/demand_hourly.csv",
), ),
output: output:
"data/load_artificial_raw.csv", "data/load_synthetic_raw.csv",
log: log:
"logs/retrieve_artificial_load_data.log", "logs/retrieve_synthetic_electricity_demand.log",
resources: resources:
mem_mb=5000, mem_mb=5000,
retries: 2 retries: 2

View File

@ -307,12 +307,12 @@ if __name__ == "__main__":
) )
load = load.apply(fill_large_gaps, shift=time_shift) load = load.apply(fill_large_gaps, shift=time_shift)
if snakemake.params.load["supplement_missing_data_artificially"]: if snakemake.params.load["supplement_synthetic"]:
logger.info("Supplement missing data with artificial data.") logger.info("Supplement missing data with synthetic data.")
fn = snakemake.input.artificial fn = snakemake.input.synthetic
artificial_load = pd.read_csv(fn, index_col=0, parse_dates=True) synthetic_load = pd.read_csv(fn, index_col=0, parse_dates=True)
artificial_load = artificial_load.loc[snapshots, countries] synthetic_load = synthetic_load.loc[snapshots, countries]
load = load.combine_first(artificial_load) load = load.combine_first(synthetic_load)
assert not load.isna().any().any(), ( assert not load.isna().any().any(), (
"Load data contains nans. Adjust the parameters " "Load data contains nans. Adjust the parameters "