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
scaling_factor: 1.0
fixed_year: false # false or year (e.g. 2013)
supplement_missing_data_artificially: true
supplement_synthetic: true
# docs
# 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`."
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"
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
================
* 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.
To upgrade an existing environment, run ``conda install -c bioconda
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
Rule ``build_heat_totals``
==============================================================================
.. automodule:: build_heat_totals
Rule ``build_gas_input_locations``
==============================================================================

View File

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

View File

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

View File

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