Merge branch 'master' into land-transport-fix
This commit is contained in:
commit
d7fedc6235
2
.github/workflows/ci.yaml
vendored
2
.github/workflows/ci.yaml
vendored
@ -31,7 +31,7 @@ jobs:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- macos-latest
|
||||
- windows-latest
|
||||
# - windows-latest
|
||||
inhouse:
|
||||
- stable
|
||||
- master
|
||||
|
@ -51,7 +51,7 @@ repos:
|
||||
|
||||
# Formatting with "black" coding style
|
||||
- repo: https://github.com/psf/black-pre-commit-mirror
|
||||
rev: 24.2.0
|
||||
rev: 24.3.0
|
||||
hooks:
|
||||
# Format Python files
|
||||
- id: black
|
||||
|
39
Snakefile
39
Snakefile
@ -2,26 +2,18 @@
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
from os.path import normpath, exists
|
||||
from shutil import copyfile, move, rmtree
|
||||
from pathlib import Path
|
||||
import yaml
|
||||
|
||||
from os.path import normpath, exists
|
||||
from shutil import copyfile, move, rmtree
|
||||
from snakemake.utils import min_version
|
||||
|
||||
min_version("8.5")
|
||||
|
||||
from scripts._helpers import path_provider
|
||||
from scripts._helpers import path_provider, copy_default_files, get_scenarios, get_rdir
|
||||
|
||||
default_files = {
|
||||
"config/config.default.yaml": "config/config.yaml",
|
||||
"config/scenarios.template.yaml": "config/scenarios.yaml",
|
||||
}
|
||||
for template, target in default_files.items():
|
||||
target = os.path.join(workflow.current_basedir, target)
|
||||
template = os.path.join(workflow.current_basedir, template)
|
||||
if not exists(target) and exists(template):
|
||||
copyfile(template, target)
|
||||
|
||||
copy_default_files(workflow)
|
||||
|
||||
|
||||
configfile: "config/config.default.yaml"
|
||||
@ -29,17 +21,8 @@ configfile: "config/config.yaml"
|
||||
|
||||
|
||||
run = config["run"]
|
||||
scenarios = run.get("scenarios", {})
|
||||
if run["name"] and scenarios.get("enable"):
|
||||
fn = Path(scenarios["file"])
|
||||
scenarios = yaml.safe_load(fn.read_text())
|
||||
RDIR = "{run}/"
|
||||
if run["name"] == "all":
|
||||
config["run"]["name"] = list(scenarios.keys())
|
||||
elif run["name"]:
|
||||
RDIR = run["name"] + "/"
|
||||
else:
|
||||
RDIR = ""
|
||||
scenarios = get_scenarios(run)
|
||||
RDIR = get_rdir(run)
|
||||
|
||||
logs = path_provider("logs/", RDIR, run["shared_resources"])
|
||||
benchmarks = path_provider("benchmarks/", RDIR, run["shared_resources"])
|
||||
@ -56,9 +39,9 @@ localrules:
|
||||
wildcard_constraints:
|
||||
simpl="[a-zA-Z0-9]*",
|
||||
clusters="[0-9]+(m|c)?|all",
|
||||
ll="(v|c)([0-9\.]+|opt)",
|
||||
opts="[-+a-zA-Z0-9\.]*",
|
||||
sector_opts="[-+a-zA-Z0-9\.\s]*",
|
||||
ll=r"(v|c)([0-9\.]+|opt)",
|
||||
opts=r"[-+a-zA-Z0-9\.]*",
|
||||
sector_opts=r"[-+a-zA-Z0-9\.\s]*",
|
||||
|
||||
|
||||
include: "rules/common.smk"
|
||||
@ -127,7 +110,7 @@ rule dag:
|
||||
conda:
|
||||
"envs/environment.yaml"
|
||||
shell:
|
||||
"""
|
||||
r"""
|
||||
snakemake --rulegraph all | sed -n "/digraph/,\$p" > {output.dot}
|
||||
dot -Tpdf -o {output.pdf} {output.dot}
|
||||
dot -Tpng -o {output.png} {output.dot}
|
||||
|
@ -76,6 +76,7 @@ enable:
|
||||
build_natura_raster: false
|
||||
retrieve_natura_raster: true
|
||||
custom_busmap: false
|
||||
drop_leap_day: true
|
||||
|
||||
|
||||
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#co2-budget
|
||||
@ -238,6 +239,9 @@ renewable:
|
||||
flatten_dispatch: false
|
||||
flatten_dispatch_buffer: 0.2
|
||||
clip_min_inflow: 1.0
|
||||
eia_norm_year: false
|
||||
eia_correct_by_capacity: false
|
||||
eia_approximate_missing: false
|
||||
|
||||
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#conventional
|
||||
conventional:
|
||||
@ -283,11 +287,12 @@ transformers:
|
||||
|
||||
# docs-load in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#load
|
||||
load:
|
||||
power_statistics: true
|
||||
interpolate_limit: 3
|
||||
time_shift_for_large_gaps: 1w
|
||||
manual_adjustments: true # false
|
||||
scaling_factor: 1.0
|
||||
fixed_year: false # false or year (e.g. 2013)
|
||||
supplement_synthetic: true
|
||||
|
||||
# docs
|
||||
# TODO: PyPSA-Eur merge issue in prepare_sector_network.py
|
||||
@ -350,6 +355,7 @@ solar_thermal:
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
cutout: default
|
||||
|
||||
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#existing-capacities
|
||||
existing_capacities:
|
||||
@ -382,6 +388,7 @@ sector:
|
||||
2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
cluster_heat_buses: true
|
||||
heat_demand_cutout: default
|
||||
bev_dsm_restriction_value: 0.75
|
||||
bev_dsm_restriction_time: 7
|
||||
transport_heating_deadband_upper: 20.
|
||||
@ -816,6 +823,7 @@ solving:
|
||||
mem_mb: 30000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
runtime: 6h #runtime in humanfriendly style https://humanfriendly.readthedocs.io/en/latest/
|
||||
|
||||
|
||||
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#plotting
|
||||
plotting:
|
||||
map:
|
||||
|
@ -69,9 +69,6 @@ conventional:
|
||||
biomass:
|
||||
p_max_pu: 0.65
|
||||
|
||||
load:
|
||||
power_statistics: false
|
||||
|
||||
lines:
|
||||
s_max_pu: 0.23
|
||||
under_construction: 'remove'
|
||||
|
53
data/eia_hydro_annual_capacity.csv
Normal file
53
data/eia_hydro_annual_capacity.csv
Normal file
@ -0,0 +1,53 @@
|
||||
# https://www.eia.gov/international/data/world/electricity/electricity-generation?pd=2&p=00000000000000000000008&u=1&f=A&v=mapbubble&a=-&i=none&vo=value&t=R&g=000000000000002&l=73-1028i008017kg6368g80a4k000e0ag00gg0004g8g0ho00g000400008&l=72-00000000000000000000000000080000000000000000000g&s=315532800000&e=1609459200000&ev=false&
|
||||
Report generated on: 03-14-2024 13:39:49
|
||||
"API","","1980","1981","1982","1983","1984","1985","1986","1987","1988","1989","1990","1991","1992","1993","1994","1995","1996","1997","1998","1999","2000","2001","2002","2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019","2020","2021"
|
||||
"","hydroelectricity installed capacity (million kW)","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
|
||||
"INTL.33-7-EURO-MK.A"," Europe","136.143","137.425","141.734","143.763","142.894","144.738","147.631","150.428","153.428","153.345","139.346","134.524","137.463","138.338","139.688","141.47","142.121","143.595","143.957","146.4204","147.3512","147.736","152.173","152.938","150.4894","151.424","152.276","154.198","155.405","156.988","159.495","162.112","165.452","170.146","171.588","174.906","176.998","178.221","180.212","181.039","184.728","185.46"
|
||||
"INTL.33-7-ALB-MK.A"," Albania","0.5","0.525","0.55","0.6","0.625","0.65","0.675","0.68","0.69","0.69","1.668","1.668","1.668","1.668","1.668","1.445","1.445","1.445","1.445","1.445","1.445","1.445","1.445","1.445","1.445","1.432","1.432","1.432","1.45","1.45","1.461","1.508","1.628","1.781","1.725","1.798","1.913","2.047","2.105","2.193","2.39","2.39"
|
||||
"INTL.33-7-AUT-MK.A"," Austria","8.206","9.157","9.51","9.582","10.034","10.171","10.423","10.691","10.762","10.858","7.028","7.129","7.204","7.202","7.245","7.323","7.385","7.54","7.685","7.669","7.676","7.703","7.567","7.607","7.613","7.667","7.684","7.845","7.848","7.827","7.913","7.947","7.97","8.272","8.321","8.457","8.493","8.506","8.591","8.63","9.001","9.151"
|
||||
"INTL.33-7-BEL-MK.A"," Belgium","0.073","0.08","0.086","0.086","0.086","0.087","0.089","0.09","0.093","0.095","0.094","0.094","0.094","0.095","0.095","0.096","0.096","0.096","0.097","0.103","0.103","0.111","0.111","0.11","0.115","0.105","0.107","0.11","0.111","0.11","0.118","0.119","0.12","0.119","0.121","0.112","0.115","0.107","0.108","0.108","0.12","0.12"
|
||||
"INTL.33-7-BIH-MK.A"," Bosnia and Herzegovina","--","--","--","--","--","--","--","--","--","--","--","--","1.2","1.2","1.139","1.219","1.219","1.219","1.624","1.983","1.983","1.993","2.38","2.38","2.38","2.38","2.411","2.411","2.117","2.117","2.117","2.117","2.12","2.12","2.049","2.055","2.084","2.084","2.09","2.09","2.093","1.747"
|
||||
"INTL.33-7-BGR-MK.A"," Bulgaria","1.895","1.895","1.895","1.975","1.975","1.975","1.975","1.975","1.975","1.973","1.973","1.401","1.401","1.401","1.401","1.401","1.401","1.803","1.803","1.803","1.881","1.706","1.948","1.984","1.984","1.984","1.984","2.012","2.12","2.137","2.184","2.035","2.095","2.165","2.19","2.206","2.206","2.21","1.725","1.725","1.725","1.725"
|
||||
"INTL.33-7-HRV-MK.A"," Croatia","--","--","--","--","--","--","--","--","--","--","--","--","1.769","1.77","1.77","1.781","1.785","1.785","1.785","1.785","1.785","1.785","1.775","1.783","1.79","1.804","1.804","1.782","1.782","1.799","1.848","1.848","1.848","1.897","1.9","1.915","1.912","1.912","1.913","1.913","1.848","1.874"
|
||||
"INTL.33-7-CYP-MK.A"," Cyprus","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"
|
||||
"INTL.33-7-CZE-MK.A"," Czechia","--","--","--","--","--","--","--","--","--","--","--","--","--","0.911","0.906","0.908","0.868","0.905","0.888","1.008","0.952","1","1","1.004","1.015","1.02","1.016","1.024","1.029","1.037","1.049","1.05","1.065","1.08","1.08","1.088","1.09","1.093","1.094","1.096","1.097","1.109"
|
||||
"INTL.33-7-DNK-MK.A"," Denmark","0.008","0.008","0.01","0.009","0.009","0.009","0.009","0.009","0.009","0.011","0.01","0.01","0.01","0.01","0.008","0.01","0.01","0.01","0.011","0.011","0.01","0.011","0.011","0.011","0.011","0.011","0.009","0.009","0.009","0.009","0.009","0.009","0.009","0.009","0.009","0.007","0.009","0.009","0.009","0.009","0.009","0.007"
|
||||
"INTL.33-7-EST-MK.A"," Estonia","--","--","--","--","--","--","--","--","--","--","--","--","0.001","0.001","0.001","0.001","0.001","0.001","0.001","0.0012","0.0012","0.003","0.003","0.004","0.004","0.005","0.005","0.005","0.005","0.007","0.006","0.005","0.008","0.008","0.005","0.006","0.006","0.007","0.007","0.007","0.008","0.004"
|
||||
"INTL.33-7-FRO-MK.A"," Faroe Islands","0.018","0.018","0.018","0.018","0.018","0.018","0.018","0.031","0.031","0.031","0.031","0.031","0.031","0.031","0.031","0.031","0.031","0.031","0.031","0.0314","0.032","0.032","0.032","0.032","0.0314","0.031","0.031","0.031","0.031","0.031","0.031","0.031","0.039","0.039","0.04","0.04","0.04","0.04","0.04","0.04","0.039","0.039"
|
||||
"INTL.33-7-FIN-MK.A"," Finland","2.42","2.467","2.474","2.503","2.497","2.505","2.555","2.586","2.597","2.586","2.621","2.648","2.679","2.731","2.736","2.777","2.785","2.861","2.881","2.881","2.882","2.926","2.964","2.966","2.999","3.035","3.062","3.102","3.122","3.145","3.155","3.196","3.196","3.224","3.248","3.249","3.249","3.272","3.287","3.287","3.263","3.263"
|
||||
"INTL.33-7-CSK-MK.A"," Former Czechoslovakia","2.578","2.832","2.84","2.84","2.875","2.897","2.89","2.975","2.988","3.042","3.036","3.061","3.061","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--"
|
||||
"INTL.33-7-SCG-MK.A"," Former Serbia and Montenegro","--","--","--","--","--","--","--","--","--","--","--","--","2.25","2.25","2.25","2.25","2.25","2.25","2.25","2.296","2.296","2.296","2.296","2.296","2.206","2.206","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--"
|
||||
"INTL.33-7-YUG-MK.A"," Former Yugoslavia","6.2","6.25","5.886","5.886","6.386","6.736","7.086","7.386","7.625","7.686","7.386","7.386","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--"
|
||||
"INTL.33-7-FRA-MK.A"," France","17.431","17.63","18.247","18.4","18.661","19.034","19.786","19.991","20.174","20.338","17.717","17.655","17.767","17.837","17.902","17.898","18","18.018","18.024","17.947","17.646","17.674","17.775","17.927","17.812","17.808","17.82","17.832","17.922","18.009","18.156","18.373","18.388","18.379","18.392","18.415","18.486","18.561","18.857","18.88","19.671","19.657"
|
||||
"INTL.33-7-DEU-MK.A"," Germany","--","--","--","--","--","--","--","--","--","--","--","3.31","3.317","3.385","3.471","3.624","3.563","3.569","3.642","3.802","4.086","4.101","4.193","4.088","4.209","4.134","4.117","4.083","4.104","4.283","4.252","4.469","4.451","4.433","4.424","4.433","4.442","4.449","4.456","4.456","4.658","4.684"
|
||||
"INTL.33-7-DDR-MK.A"," Germany, East","1.852","1.845","1.852","1.851","1.845","1.844","1.844","1.844","1.844","1.844","1.844","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--"
|
||||
"INTL.33-7-DEUW-MK.A"," Germany, West","6.45","6.509","6.531","6.631","6.668","6.71","6.71","6.71","6.85","6.86","6.86","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--"
|
||||
"INTL.33-7-GIB-MK.A"," Gibraltar","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"
|
||||
"INTL.33-7-GRC-MK.A"," Greece","1.415","1.714","1.714","1.714","1.714","1.822","1.822","1.822","1.836","1.986","2.093","2.197","2.208","2.208","2.208","2.208","2.207","2.412","2.241","2.344","2.373","2.377","2.379","2.38","2.4","2.407","2.435","2.451","2.477","2.502","2.516","2.525","2.537","2.539","2.69","2.693","2.693","2.693","2.71","2.71","2.697","2.722"
|
||||
"INTL.33-7-HUN-MK.A"," Hungary","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.048","0.054","0.049","0.049","0.049","0.049","0.051","0.053","0.053","0.055","0.056","0.057","0.057","0.057","0.057","0.057","0.057","0.057","0.056","0.058"
|
||||
"INTL.33-7-ISL-MK.A"," Iceland","0.545","0.615","0.755","0.755","0.755","0.755","0.756","0.756","0.756","0.756","0.756","0.779","0.879","0.879","0.884","0.884","0.884","0.923","0.956","1.016","1.064","1.109","1.155","1.155","1.163","1.163","1.163","1.758","1.879","1.875","1.883","1.884","1.877","1.984","1.984","1.987","1.987","1.995","2.099","2.099","2.086","2.086"
|
||||
"INTL.33-7-IRL-MK.A"," Ireland","0.224","0.224","0.225","0.225","0.226","0.226","0.221","0.222","0.222","0.222","0.223","0.226","0.226","0.226","0.227","0.227","0.232","0.233","0.233","0.236","0.236","0.238","0.24","0.24","0.24","0.234","0.234","0.234","0.234","0.234","0.237","0.237","0.237","0.237","0.237","0.237","0.237","0.237","0.237","0.237","0.237","0.216"
|
||||
"INTL.33-7-ITA-MK.A"," Italy","15.826","15.766","16.877","17.125","12.166","12.16","12.419","12.435","12.495","12.547","12.582","12.692","12.718","12.788","12.864","12.964","12.999","13.06","13.058","13.417","13.389","13.456","13.557","13.703","13.789","13.89","13.528","13.573","13.732","13.827","13.976","14.193","14.325","14.454","14.506","14.628","14.991","15.109","15.182","15.583","14.908","14.908"
|
||||
"INTL.33-7-XKS-MK.A"," Kosovo","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","0.043","0.043","0.045","0.046","0.046","0.046","0.046","0.046","0.078","0.08","0.096","0.096","0.092","0.092"
|
||||
"INTL.33-7-LVA-MK.A"," Latvia","--","--","--","--","--","--","--","--","--","--","--","--","1.499","1.504","1.506","1.521","1.521","1.487","1.517","1.523","1.523","1.565","1.565","1.537","1.536","1.536","1.536","1.536","1.536","1.536","1.576","1.576","1.576","1.587","1.588","1.588","1.564","1.564","1.565","1.565","1.576","1.588"
|
||||
"INTL.33-7-LTU-MK.A"," Lithuania","--","--","--","--","--","--","--","--","--","--","--","--","0.106","0.106","0.108","0.108","0.108","0.108","0.108","0.112","0.112","0.113","0.103","0.109","0.11","0.117","0.117","0.115","0.115","0.116","0.116","0.116","0.116","0.116","0.117","0.117","0.117","0.117","0.117","0.117","0.116","0.128"
|
||||
"INTL.33-7-LUX-MK.A"," Luxembourg","0.029","0.029","0.029","0.032","0.032","0.032","0.032","0.032","0.032","0.032","0.034","0.034","0.034","0.034","0.034","0.034","0.034","0.039","0.039","0.039","0.039","0.034","0.034","0.034","0.034","0.034","0.034","0.034","0.034","0.034","0.034","0.034","0.034","0.034","0.034","0.034","0.034","0.035","0.034","0.034","0.034","0.037"
|
||||
"INTL.33-7-MLT-MK.A"," Malta","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"
|
||||
"INTL.33-7-MNE-MK.A"," Montenegro","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","0.658","0.658","0.658","0.658","0.658","0.658","0.658","0.651","0.651","0.651","0.651","0.652","0.652","0.652","0.658","0.649"
|
||||
"INTL.33-7-NLD-MK.A"," Netherlands","0","0","0","0","0","0.002","0.002","0.002","0.002","0.025","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.037","0.038","0.038"
|
||||
"INTL.33-7-MKD-MK.A"," North Macedonia","--","--","--","--","--","--","--","--","--","--","--","--","0.426","0.426","0.413","0.423","0.423","0.434","0.434","0.4338","0.434","0.436","0.436","0.448","0.516","0.54","0.545","0.546","0.552","0.553","0.555","0.556","0.595","0.603","0.617","0.632","0.66","0.674","0.674","0.674","0.674","0.644"
|
||||
"INTL.33-7-NOR-MK.A"," Norway","19.443","20.963","21.789","22.37","22.628","23.076","23.555","24.358","24.453","25.728","25.817","25.823","25.963","25.983","26.215","27.379","27.494","27.327","26.982","27.54","26.766","26.319","26.604","26.947","26.721","27.222","27.398","27.647","28.062","28.188","28.367","28.618","29.158","29.682","29.889","29.939","30.281","30.382","31.12","31.182","31.556","31.952"
|
||||
"INTL.33-7-POL-MK.A"," Poland","0.647","0.647","0.647","0.647","0.645","0.646","0.646","0.646","0.772","0.647","0.467","0.467","0.468","0.475","0.489","0.482","0.492","0.495","0.501","0.505","0.509","0.517","0.517","0.524","0.535","0.542","0.549","0.546","0.553","0.556","0.56","0.564","0.569","0.573","0.582","0.588","0.597","0.591","0.592","0.592","0.605","0.605"
|
||||
"INTL.33-7-PRT-MK.A"," Portugal","2.516","2.615","2.854","2.944","3.016","2.721","2.818","2.82","2.722","2.799","2.783","2.772","3.146","3.613","3.697","3.848","3.867","3.877","3.94","3.93","3.918","3.943","3.966","3.966","3.974","3.968","4.004","4.012","4.009","4.042","4.057","4.49","4.414","4.363","4.368","4.446","4.458","4.462","4.484","4.484","4.373","4.372"
|
||||
"INTL.33-7-ROU-MK.A"," Romania","3.455","3.533","3.734","3.885","4.062","4.42","4.706","5.057","5.421","5.583","5.666","5.723","5.687","5.872","5.938","6.011","6.038","6.074","6.081","6.082","6.12","6.122","6.242","6.248","6.279","6.289","6.282","6.331","6.362","6.358","6.382","6.391","6.456","6.249","6.256","6.359","6.377","6.328","6.328","6.328","6.221","6.221"
|
||||
"INTL.33-7-SRB-MK.A"," Serbia","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","2.206","2.206","2.206","2.221","2.293","2.322","2.352","2.317","2.403","2.408","2.416","2.424","2.424","2.424","2.484","2.491"
|
||||
"INTL.33-7-SVK-MK.A"," Slovakia","--","--","--","--","--","--","--","--","--","--","--","--","--","0.925","1.208","1.525","1.655","1.664","1.682","1.684","1.685","1.586","1.586","1.588","1.602","1.596","1.597","1.599","1.632","1.571","1.6","1.607","1.606","1.607","1.607","1.606","1.608","1.607","1.612","1.612","1.505","1.505"
|
||||
"INTL.33-7-SVN-MK.A"," Slovenia","--","--","--","--","--","--","--","--","--","--","--","--","0.755","0.755","0.756","0.757","0.734","0.734","0.861","0.846","0.846","0.839","0.983","0.974","0.974","0.979","1.009","1.018","1.027","1.07","1.074","1.073","1.074","1.119","1.116","1.115","1.113","1.167","1.163","1.163","1.163","1.121"
|
||||
"INTL.33-7-ESP-MK.A"," Spain","13.473","10.869","10.945","10.917","10.935","10.959","11.153","10.556","10.984","11.597","11.32","11.429","11.484","11.484","11.545","11.689","11.793","11.596","11.537","11.802","12.672","12.744","15.55","15.525","12.82","12.808","12.907","12.961","13.04","13.069","13.275","13.283","13.293","14.076","14.081","14.086","14.053","14.052","14.053","14.053","14.292","14.308"
|
||||
"INTL.33-7-SWE-MK.A"," Sweden","14.859","14.919","15.215","15.29","15.445","15.69","15.813","15.996","16.112","15.759","15.904","15.891","16.021","15.867","16.072","15.725","15.776","16.371","16.169","16.432","16.506","16.523","16.187","16.098","16.302","16.302","16.234","16.592","16.352","16.544","16.624","16.478","16.315","16.395","15.897","16.23","16.367","16.403","16.332","16.332","16.379","16.379"
|
||||
"INTL.33-7-CHE-MK.A"," Switzerland","11.45","11.46","11.47","11.47","11.48","11.48","11.51","11.51","11.52","11.58","3.474","3.484","3.504","3.509","3.526","3.541","3.55","3.553","3.584","3.614","3.636","3.642","3.653","3.669","3.65","3.682","3.694","3.7","3.709","3.749","3.81","3.852","3.882","3.896","3.948","3.996","4.06","4.112","4.193","4.193","4.193","4.193"
|
||||
"INTL.33-7-TUR-MK.A"," Turkiye","2.131","2.356","3.082","3.239","3.875","3.875","3.878","5.003","6.219","6.598","6.764","7.114","8.379","9.682","9.865","9.863","9.935","10.102","10.307","10.537","11.175","11.673","12.241","12.579","12.645","12.906","13.063","13.395","13.829","14.553","15.831","17.137","19.609","22.289","23.643","25.868","26.681","27.273","28.291","28.503","30.984","31.497"
|
||||
"INTL.33-7-GBR-MK.A"," United Kingdom","2.451","2.451","2.451","2.721","4.188","4.19","4.192","4.197","4.196","1.424","1.11","1.415","1.423","1.425","1.425","1.432","1.455","1.488","1.475","1.477","1.485","1.629","1.59","1.486","1.499","1.501","1.515","1.522","1.626","1.638","1.637","1.673","1.693","1.709","1.73","1.777","1.836","1.873","1.878","1.878","1.879","1.88"
|
||||
""," Eurasia","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
|
||||
"INTL.33-7-MDA-MK.A"," Moldova","--","--","--","--","--","--","--","--","--","--","--","--","0.064","0.064","0.064","0.056","0.056","0.064","0.064","0.064","0.064","0.06","0.06","0.06","0.059","0.059","0.056","0.056","0.064","0.064","0.064","0.064","0.064","0.064","0.064","0.064","0.064","0.064","0.064","0.064","0.076","0.076"
|
||||
"INTL.33-7-UKR-MK.A"," Ukraine","--","--","--","--","--","--","--","--","--","--","--","--","4.705","4.706","4.706","4.706","4.706","4.706","4.706","4.7","4.7","4.731","4.758","4.766","4.781","4.717","4.746","4.731","4.798","4.795","4.596","4.607","4.608","4.632","4.665","4.697","4.658","4.668","4.668","4.668","4.666","4.43"
|
Can't render this file because it has a wrong number of fields in line 3.
|
@ -1,53 +1,53 @@
|
||||
https://www.eia.gov/international/data/world/electricity/electricity-generation?pd=2&p=000000000000000000000000000000g&u=1&f=A&v=mapbubble&a=-&i=none&vo=value&t=R&g=000000000000002&l=73-1028i008017kg6368g80a4k000e0ag00gg0004g8g0ho00g000400008&l=72-00000000000000000000000000080000000000000000000g&s=315532800000&e=1609459200000&ev=false&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Report generated on: 01-06-2023 21:17:46,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
API,,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021
|
||||
,hydroelectricity net generation (billion kWh),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
INTL.33-12-EURO-BKWH.A, Europe,"458,018","464,155","459,881","473,685","481,241","476,739","459,535","491,085","534,517","465,365","474,466","475,47","509,041","526,448","531,815","543,743","529,114164","543,845616","562,491501","566,861453","588,644662","584,806195","539,051405","503,7067","542,112443","542,974669","535,006084","538,449707","565,143111","561,761402","617,547148","540,926277","598,055253","629,44709","617,111295","613,079848","627,720566217","560,362524","616,5081462","606,5997419","644,1106599","628,1390143"
|
||||
INTL.33-12-ALB-BKWH.A, Albania,"2,919","3,018","3,093","3,167","3,241","3,315","3,365","3,979","3,713","3,846","2,82","3,483","3,187","3,281","3,733","4,162","5,669","4,978","4,872","5,231","4,548","3,519","3,477","5,117","5,411","5,319","4,951","2,76","3,759","5,201","7,49133","4,09068","4,67775","6,88941","4,67676","5,83605","7,70418","4,47975","8,46648","5,15394","5,281","8,891943"
|
||||
INTL.33-12-AUT-BKWH.A, Austria,"28,501","30,008","29,893","29,577","28,384","30,288","30,496","25,401","35,151","34,641","31,179","31,112","34,483","36,336","35,349","36,696","33,874","35,744","36,792","40,292","41,418","40,05","39,825","32,883","36,394","36,31","35,48","36,732","37,969","40,487","36,466","32,511","41,862","40,138","39,001","35,255","37,954","36,462","35,73","40,43655","41,9356096","38,75133"
|
||||
INTL.33-12-BEL-BKWH.A, Belgium,"0,274","0,377","0,325","0,331","0,348","0,282","0,339","0,425","0,354","0,3","0,263","0,226","0,338","0,252","0,342","0,335","0,237","0,30195","0,38511","0,338","0,455","0,437","0,356","0,245","0,314","0,285","0,355","0,385","0,406","0,325","0,298","0,193","0,353","0,376","0,289","0,314","0,367","0,268","0,3135","0,302","0,2669","0,3933"
|
||||
INTL.33-12-BIH-BKWH.A, Bosnia and Herzegovina,--,--,--,--,--,--,--,--,--,--,--,--,"3,374","2,343","3,424","3,607","5,104","4,608","4,511","5,477","5,043","5,129","5,215","4,456","5,919","5,938","5,798","3,961","4,818","6,177","7,946","4,343","4,173","7,164","5,876","5,495","5,585","3,7521","6,35382","6,02019","4,58","6,722"
|
||||
INTL.33-12-BGR-BKWH.A, Bulgaria,"3,674","3,58","3,018","3,318","3,226","2,214","2,302","2,512","2,569","2,662","1,859","2,417","2,042","1,923","1,453","2,291","2,89","2,726","3,066","2,725","2,646","1,72","2,172","2,999","3,136","4,294","4,196","2,845","2,796","3,435","4,98168","2,84328","3,14622","3,99564","4,55598","5,59845","3,8412","2,79972","5,09553","2,929499","2,820398","4,819205"
|
||||
INTL.33-12-HRV-BKWH.A, Croatia,--,--,--,--,--,--,--,--,--,--,--,--,"4,298","4,302","4,881","5,212","7,156","5,234","5,403","6,524","5,794","6,482","5,311","4,827","6,888","6,27","5,94","4,194","5,164","6,663","9,035","4,983","4,789","8,536","8,917","6,327","6,784","5,255","7,62399","5,87268","5,6624","7,1277"
|
||||
INTL.33-12-CYP-BKWH.A, Cyprus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
INTL.33-12-CZE-BKWH.A, Czechia,--,--,--,--,--,--,--,--,--,--,--,--,--,"1,355","1,445","1,982","1,949","1,68201","1,382","1,664","1,7404","2,033","2,467","1,369","1,999","2,356","2,525","2,068","2,004","2,405","2,775","1,95","2,107","2,704","1,909","1,779","1,983","1,852","1,615","1,98792","2,143884","2,40852"
|
||||
INTL.33-12-DNK-BKWH.A, Denmark,"0,03","0,031","0,028","0,036","0,028","0,027","0,029","0,029","0,032","0,027","0,027","0,026","0,028","0,027","0,033","0,03","0,019","0,019","0,02673","0,031","0,03","0,028","0,032","0,021","0,027","0,023","0,023","0,028","0,026","0,019","0,021","0,017","0,017","0,013","0,015","0,01803","0,01927","0,017871","0,0148621","0,0172171","0,017064","0,016295"
|
||||
INTL.33-12-EST-BKWH.A, Estonia,--,--,--,--,--,--,--,--,--,--,--,--,"0,001","0,001","0,003","0,002","0,002","0,003","0,004","0,004","0,005","0,007","0,006","0,013","0,022","0,022","0,014","0,021","0,028","0,032","0,027","0,029999","0,042","0,026","0,027","0,027","0,035","0,025999","0,0150003","0,0189999","0,03","0,0248"
|
||||
INTL.33-12-FRO-BKWH.A, Faroe Islands,"0,049","0,049","0,049","0,049","0,049","0,049","0,049","0,049","0,062","0,071","0,074","0,074","0,083","0,073","0,075","0,075","0,069564","0,075066","0,076501","0,069453","0,075262","0,075195","0,095535","0,08483","0,093443","0,097986","0,099934","0,103407","0,094921","0,091482","0,06676","0,092","0,099","0,091","0,121","0,132","0,105","0,11","0,107","0,102","0,11","0,11"
|
||||
INTL.33-12-FIN-BKWH.A, Finland,"10,115","13,518","12,958","13,445","13,115","12,211","12,266","13,658","13,229","12,9","10,75","13,065","14,956","13,341","11,669","12,796","11,742","12,11958","14,9","12,652","14,513","13,073","10,668","9,495","14,919","13,646","11,379","14,035","16,941","12,559","12,743","12,278001","16,666998","12,672","13,240001","16,583999","15,634127","14,609473","13,1369998","12,2454823","15,883","15,766"
|
||||
INTL.33-12-CSK-BKWH.A, Former Czechoslovakia,"4,8","4,2","3,7","3,9","3,2","4,3",4,"4,853","4,355","4,229","3,919","3,119","3,602",--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--
|
||||
INTL.33-12-SCG-BKWH.A, Former Serbia and Montenegro,--,--,--,--,--,--,--,--,--,--,--,--,"11,23","10,395","11,016","12,071","14,266","12,636","12,763","13,243","11,88","12,326","11,633","9,752","11,01","11,912",--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--
|
||||
INTL.33-12-YUG-BKWH.A, Former Yugoslavia,"27,868","25,044","23,295","21,623","25,645","24,363","27,474","25,98","25,612","23,256","19,601","18,929",--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--
|
||||
INTL.33-12-FRA-BKWH.A, France,"68,253","70,358","68,6","67,515","64,01","60,248","60,953","68,623","73,952","45,744","52,796","56,277","68,313","64,3","78,057","72,196","64,43","63,151","61,479","71,832","66,466","73,888","59,992","58,567","59,276","50,965","55,741","57,029","63,017","56,428","61,945","45,184","59,099","71,042","62,993","54,876","60,094","49,389","64,485","56,913891","62,06191","58,856657"
|
||||
INTL.33-12-DEU-BKWH.A, Germany,--,--,--,--,--,--,--,--,--,--,--,"14,742","17,223","17,699","19,731","21,562","21,737","17,18343","17,044","19,451","21,515","22,506","22,893","19,071","20,866","19,442","19,808","20,957","20,239","18,841","20,678","17,323","21,331","22,66","19,31","18,664","20,214","19,985","17,694","19,731","18,322","19,252"
|
||||
INTL.33-12-DDR-BKWH.A," Germany, East","1,658","1,718","1,748","1,683","1,748","1,758","1,767","1,726","1,719","1,551","1,389",--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--
|
||||
INTL.33-12-DEUW-BKWH.A," Germany, West","17,125","17,889","17,694","16,713","16,434","15,354","16,526","18,36","18,128","16,482","15,769",--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--
|
||||
INTL.33-12-GIB-BKWH.A, Gibraltar,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
INTL.33-12-GRC-BKWH.A, Greece,"3,396","3,398","3,551","2,331","2,852","2,792","3,222","2,768","2,354","1,888","1,751","3,068","2,181","2,26","2,573","3,494","4,305","3,84318","3,68","4,546","3,656","2,076","2,772","4,718","4,625","4,967","5,806","2,565","3,279","5,32","7,431","3,998","4,387","6,337","4,464","5,782","5,543","3,962","5,035","3,9798","3,343687","5,909225"
|
||||
INTL.33-12-HUN-BKWH.A, Hungary,"0,111","0,166","0,158","0,153","0,179","0,153","0,152","0,167","0,167","0,156","0,176","0,192","0,156","0,164","0,159","0,161","0,205","0,21384","0,15345","0,179","0,176","0,184","0,192","0,169","0,203","0,2","0,184","0,208","0,211","0,226","0,184","0,215999","0,205999","0,207999","0,294001","0,226719","0,253308","0,213999","0,216","0,2129999","0,238","0,202379"
|
||||
INTL.33-12-ISL-BKWH.A, Iceland,"3,053","3,085","3,407","3,588","3,738","3,667","3,846","3,918","4,169","4,217","4,162","4,162","4,267","4,421","4,47","4,635","4,724","5,15493","5,565","5,987","6,292","6,512","6,907","7,017","7,063","6,949","7,22","8,31","12,303","12,156","12,509999","12,381999","12,213999","12,747001","12,554","13,541","13,091609","13,891929","13,679377","13,32911","12,9196201","13,5746171"
|
||||
INTL.33-12-IRL-BKWH.A, Ireland,"0,833","0,855","0,792","0,776","0,68","0,824","0,91","0,673","0,862","0,684","0,69","0,738","0,809","0,757","0,911","0,706","0,715","0,67122","0,907","0,838","0,838","0,59","0,903","0,592","0,624","0,625","0,717","0,66","0,959","0,893","0,593","0,699","0,795","0,593","0,701","0,798","0,674","0,685","0,687","0,87813","0,932656","0,750122"
|
||||
INTL.33-12-ITA-BKWH.A, Italy,"44,997","42,782","41,216","40,96","41,923","40,616","40,626","39,05","40,205","33,647","31,31","41,817","41,778","41,011","44,212","37,404","41,617","41,18697","40,808","44,911","43,763","46,343","39,125","33,303","41,915","35,706","36,624","32,488","41,207","48,647","50,506","45,36477","41,45625","52,24626","57,95955","45,08163","42,00768","35,83701","48,29913","45,31824","47,551784","44,739"
|
||||
INTL.33-12-XKS-BKWH.A, Kosovo,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,"0,075","0,119","0,154","0,104","0,095","0,142","0,149","0,139","0,243","0,177","0,27027","0,2079","0,262826","0,300635"
|
||||
INTL.33-12-LVA-BKWH.A, Latvia,--,--,--,--,--,--,--,--,--,--,--,--,"2,498","2,846","3,272","2,908","1,841","2,922","2,99","2,729","2,791","2,805","2,438","2,243","3,078","3,293","2,671","2,706","3,078","3,422","3,487998","2,8568","3,677","2,838","1,953","1,841","2,522819","4,355513","2,4170639","2,0958919","2,5840101","2,6889293"
|
||||
INTL.33-12-LTU-BKWH.A, Lithuania,--,--,--,--,--,--,--,--,--,--,--,--,"0,308","0,389","0,447","0,369","0,323","0,291","0,413","0,409","0,336","0,322","0,35","0,323","0,417","0,446193","0,393","0,417","0,398","0,42","0,535","0,475","0,419","0,516","0,395","0,346","0,45","0,597","0,427","0,34254","0,3006","0,3837"
|
||||
INTL.33-12-LUX-BKWH.A, Luxembourg,"0,086","0,095","0,084","0,083","0,088","0,071","0,084","0,101","0,097","0,072","0,07","0,083","0,069","0,066","0,117","0,087","0,059","0,082","0,114","0,084","0,119","0,117","0,098","0,078","0,103","0,093","0,11","0,116","0,131","0,105","0,104","0,061","0,095","0,114","0,104","0,095","0,111","0,082","0,089","0,10593","0,091602","0,1068"
|
||||
INTL.33-12-MLT-BKWH.A, Malta,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
INTL.33-12-MNE-BKWH.A, Montenegro,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,"1,733","1,271","1,524","2,05","2,723","1,192","1,462","2,479","1,734","1,476","1,825","1,014","1,693443","1,262781","0,867637","1,212652"
|
||||
INTL.33-12-NLD-BKWH.A, Netherlands,0,0,0,0,0,"0,003","0,003","0,001","0,002","0,037","0,119","0,079","0,119","0,091","0,1","0,087","0,079","0,09108","0,111","0,089","0,141","0,116","0,109","0,071","0,094","0,087","0,105","0,106","0,101","0,097","0,105","0,057","0,104389","0,11431","0,112202","0,0927","0,100078","0,060759","0,0723481","0,074182","0,0462851","0,0838927"
|
||||
INTL.33-12-MKD-BKWH.A, North Macedonia,--,--,--,--,--,--,--,--,--,--,--,--,"0,817","0,517","0,696","0,793","0,842","0,891","1,072","1,375","1,158","0,62","0,749","1,36","1,467","1,477","1,634",1,"0,832","1,257","2,407","1,419","1,031","1,568","1,195","1,846","1,878","1,099","1,773","1,15236","1,277144","1,451623"
|
||||
INTL.33-12-NOR-BKWH.A, Norway,"82,717","91,876","91,507","104,704","104,895","101,464","95,321","102,341","107,919","117,369","119,933","109,032","115,505","118,024","110,398","120,315","102,823","108,677","114,546","120,237","140,4","119,258","128,078","104,425","107,693","134,331","118,175","132,319","137,654","124,03","116,257","119,78","141,189","127,551","134,844","136,662","142,244","141,651","138,202","123,66288","141,69",144
|
||||
INTL.33-12-POL-BKWH.A, Poland,"2,326","2,116","1,528","1,658","1,394","1,833","1,534","1,644","1,775","1,593","1,403","1,411","1,492","1,473","1,716","1,868","1,912","1,941","2,286","2,133","2,085","2,302","2,256","1,654","2,06","2,179","2,022","2,328","2,13","2,351","2,9","2,313","2,02","2,421","2,165","1,814","2,117","2,552","1,949","1,93842","2,118337","2,339192"
|
||||
INTL.33-12-PRT-BKWH.A, Portugal,"7,873","4,934","6,82","7,897","9,609","10,512","8,364","9,005","12,037","5,72","9,065","8,952","4,599","8,453","10,551","8,26","14,613","12,97395","12,853","7,213","11,21","13,894","7,722","15,566","9,77","4,684","10,892","9,991","6,73","8,201","15,954","11,423","5,589","13,652","15,471","8,615","15,608","5,79","12,316","8,6526","12,082581","11,846464"
|
||||
INTL.33-12-ROU-BKWH.A, Romania,"12,506","12,605","11,731","9,934","11,208","11,772","10,688","11,084","13,479","12,497","10,87","14,107","11,583","12,64","12,916","16,526","15,597","17,334","18,69","18,107","14,63","14,774","15,886","13,126","16,348","20,005","18,172","15,806","17,023","15,379","19,684","14,581","11,945","14,807","18,618","16,467","17,848","14,349","17,48736","15,580622","15,381243","17,376933"
|
||||
INTL.33-12-SRB-BKWH.A, Serbia,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,"10,855","9,937","9,468","10,436","11,772","8,58","9,193","10,101","10,893","9,979","10,684","9,061","10,53261","9,457175","9,034496","11,284232"
|
||||
INTL.33-12-SVK-BKWH.A, Slovakia,--,--,--,--,--,--,--,--,--,--,--,--,--,"3,432","4,311","4,831","4,185","4,023","4,224","4,429","4,569","4,878","5,215","3,4452","4,059","4,592","4,355","4,406",4,"4,324","5,184","3,211","3,687","4,329","3,762","3,701","4,302","4,321","3,506","4,27383","4,517","4,17"
|
||||
INTL.33-12-SVN-BKWH.A, Slovenia,--,--,--,--,--,--,--,--,--,--,--,--,"3,379","2,974","3,348","3,187","3,616","3,046","3,4","3,684","3,771","3,741","3,265","2,916","4,033","3,426","3,555","3,233","3,978","4,666","4,452","3,506","3,841","4,562","6,011","3,75","4,443","3,814","4,643","4,43421","4,93406","4,711944"
|
||||
INTL.33-12-ESP-BKWH.A, Spain,"29,16","21,64","25,99","26,696","31,088","30,895","26,105","27,016","34,76","19,046","25,16","27,01","18,731","24,133","27,898","22,881","39,404","34,43","33,665","22,634","29,274","40,617","22,691","40,643","31,359","18,209","25,699","27,036","23,13","26,147","41,576","30,07","20,192","36,45","38,815","27,656","35,77","18,007","33,743","24,23025","30,507","29,626"
|
||||
INTL.33-12-SWE-BKWH.A, Sweden,"58,133","59,006","54,369","62,801","67,106","70,095","60,134","70,95","69,016","70,911","71,778","62,603","73,588","73,905","58,508","67,421","51,2226","68,365","74,25","70,974","77,798","78,269","65,696","53,005","59,522","72,075","61,106","65,497","68,378","65,193","66,279","66,047","78,333","60,81","63,227","74,734","61,645","64,651","61,79","64,46583","71,6","71,086"
|
||||
INTL.33-12-CHE-BKWH.A, Switzerland,"32,481","35,13","35,974","35,069","29,871","31,731","32,576","34,328","35,437","29,477","29,497","31,756","32,373","35,416","38,678","34,817","28,458","33,70257","33,136","37,104","33,854","38,29","32,323","31,948","30,938","28,664","28,273","32,362","33,214","32,833","33,261","29,906","35,783","35,628","35,122","35,378","31,984","31,47968","32,095881","35,156989","37,867647","36,964485"
|
||||
INTL.33-12-TUR-BKWH.A, Turkey,"11,159","12,308","13,81","11,13","13,19","11,822","11,637","18,314","28,447","17,61","22,917","22,456","26,302","33,611","30,28","35,186","40,07","39,41784","41,80671","34,33","30,57","23,77","33,346","34,977","45,623","39,165","43,802","35,492","32,937","35,598","51,423001","51,154999","56,668998","58,225","39,750001","65,856","66,685883","57,823851","59,490211","88,2094218","78,094369","55,1755392"
|
||||
INTL.33-12-GBR-BKWH.A, United Kingdom,"3,921","4,369","4,543","4,548","3,992","4,08","4,767","4,13","4,915","4,732","5,119","4,534","5,329","4,237","5,043","4,79","3,359","4,127","5,117","5,336","5,085","4,055","4,78787","3,22767","4,844","4,92149","4,59315","5,0773","5,14119","5,22792","3,59138","5,69175","5,30965","4,70147","5,8878","6,29727","5,370412217","5,88187","5,44327","5,84628","6,75391","5,0149"
|
||||
, Eurasia,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
INTL.33-12-MDA-BKWH.A, Moldova,--,--,--,--,--,--,--,--,--,--,--,--,"0,255","0,371","0,275","0,321","0,362","0,378","0,387","0,363","0,392","0,359","0,348","0,358","0,35","0,359","0,365","0,354","0,385","0,354","0,403","0,348","0,266","0,311","0,317","0,265","0,228","0,282","0,27324","0,29799","0,276","0,316"
|
||||
INTL.33-12-UKR-BKWH.A, Ukraine,--,--,--,--,--,--,--,--,--,--,--,--,"7,725","10,929","11,997","9,853","8,546","9,757","15,756","14,177","11,161","11,912","9,531","9,146","11,635","12,239","12,757","10,042","11,397","11,817","13,02","10,837","10,374","13,663","8,393","5,343","7,594","8,856","10,32372","6,5083","7,5638","10,3326"
|
||||
# https://www.eia.gov/international/data/world/electricity/electricity-generation?pd=2&p=000000000000000000000000000000g&u=1&f=A&v=mapbubble&a=-&i=none&vo=value&t=R&g=000000000000002&l=73-1028i008017kg6368g80a4k000e0ag00gg0004g8g0ho00g000400008&l=72-00000000000000000000000000080000000000000000000g&s=315532800000&e=1609459200000&ev=false&
|
||||
Report generated on: 03-14-2024 13:40:38
|
||||
"API","","1980","1981","1982","1983","1984","1985","1986","1987","1988","1989","1990","1991","1992","1993","1994","1995","1996","1997","1998","1999","2000","2001","2002","2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019","2020","2021"
|
||||
"","hydroelectricity net generation (billion kWh)","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
|
||||
"INTL.33-12-EURO-BKWH.A"," Europe","458.018","464.155","459.881","473.685","481.241","476.739","459.535","491.085","534.517","465.365","474.466","475.47","509.041","526.448","531.815","543.743","529.114164","543.845616","562.491501","566.861453","588.644662","584.806195","539.051405","503.7067","542.112443","542.974669","535.006084","538.449707","565.143111","561.761402","617.547148","540.926277","598.055253","629.44709","617.111295","613.079848","627.720566217","560.362524","616.5081462","606.5997419","644.1106599","628.1390143"
|
||||
"INTL.33-12-ALB-BKWH.A"," Albania","2.919","3.018","3.093","3.167","3.241","3.315","3.365","3.979","3.713","3.846","2.82","3.483","3.187","3.281","3.733","4.162","5.669","4.978","4.872","5.231","4.548","3.519","3.477","5.117","5.411","5.319","4.951","2.76","3.759","5.201","7.49133","4.09068","4.67775","6.88941","4.67676","5.83605","7.70418","4.47975","8.46648","5.15394","5.281","8.891943"
|
||||
"INTL.33-12-AUT-BKWH.A"," Austria","28.501","30.008","29.893","29.577","28.384","30.288","30.496","25.401","35.151","34.641","31.179","31.112","34.483","36.336","35.349","36.696","33.874","35.744","36.792","40.292","41.418","40.05","39.825","32.883","36.394","36.31","35.48","36.732","37.969","40.487","36.466","32.511","41.862","40.138","39.001","35.255","37.954","36.462","35.73","40.43655","41.9356096","38.75133"
|
||||
"INTL.33-12-BEL-BKWH.A"," Belgium","0.274","0.377","0.325","0.331","0.348","0.282","0.339","0.425","0.354","0.3","0.263","0.226","0.338","0.252","0.342","0.335","0.237","0.30195","0.38511","0.338","0.455","0.437","0.356","0.245","0.314","0.285","0.355","0.385","0.406","0.325","0.298","0.193","0.353","0.376","0.289","0.314","0.367","0.268","0.3135","0.302","0.2669","0.3933"
|
||||
"INTL.33-12-BIH-BKWH.A"," Bosnia and Herzegovina","--","--","--","--","--","--","--","--","--","--","--","--","3.374","2.343","3.424","3.607","5.104","4.608","4.511","5.477","5.043","5.129","5.215","4.456","5.919","5.938","5.798","3.961","4.818","6.177","7.946","4.343","4.173","7.164","5.876","5.495","5.585","3.7521","6.35382","6.02019","4.58","6.722"
|
||||
"INTL.33-12-BGR-BKWH.A"," Bulgaria","3.674","3.58","3.018","3.318","3.226","2.214","2.302","2.512","2.569","2.662","1.859","2.417","2.042","1.923","1.453","2.291","2.89","2.726","3.066","2.725","2.646","1.72","2.172","2.999","3.136","4.294","4.196","2.845","2.796","3.435","4.98168","2.84328","3.14622","3.99564","4.55598","5.59845","3.8412","2.79972","5.09553","2.929499","2.820398","4.819205"
|
||||
"INTL.33-12-HRV-BKWH.A"," Croatia","--","--","--","--","--","--","--","--","--","--","--","--","4.298","4.302","4.881","5.212","7.156","5.234","5.403","6.524","5.794","6.482","5.311","4.827","6.888","6.27","5.94","4.194","5.164","6.663","9.035","4.983","4.789","8.536","8.917","6.327","6.784","5.255","7.62399","5.87268","5.6624","7.1277"
|
||||
"INTL.33-12-CYP-BKWH.A"," Cyprus","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"
|
||||
"INTL.33-12-CZE-BKWH.A"," Czechia","--","--","--","--","--","--","--","--","--","--","--","--","--","1.355","1.445","1.982","1.949","1.68201","1.382","1.664","1.7404","2.033","2.467","1.369","1.999","2.356","2.525","2.068","2.004","2.405","2.775","1.95","2.107","2.704","1.909","1.779","1.983","1.852","1.615","1.98792","2.143884","2.40852"
|
||||
"INTL.33-12-DNK-BKWH.A"," Denmark","0.03","0.031","0.028","0.036","0.028","0.027","0.029","0.029","0.032","0.027","0.027","0.026","0.028","0.027","0.033","0.03","0.019","0.019","0.02673","0.031","0.03","0.028","0.032","0.021","0.027","0.023","0.023","0.028","0.026","0.019","0.021","0.017","0.017","0.013","0.015","0.01803","0.01927","0.017871","0.0148621","0.0172171","0.017064","0.016295"
|
||||
"INTL.33-12-EST-BKWH.A"," Estonia","--","--","--","--","--","--","--","--","--","--","--","--","0.001","0.001","0.003","0.002","0.002","0.003","0.004","0.004","0.005","0.007","0.006","0.013","0.022","0.022","0.014","0.021","0.028","0.032","0.027","0.029999","0.042","0.026","0.027","0.027","0.035","0.025999","0.0150003","0.0189999","0.03","0.0248"
|
||||
"INTL.33-12-FRO-BKWH.A"," Faroe Islands","0.049","0.049","0.049","0.049","0.049","0.049","0.049","0.049","0.062","0.071","0.074","0.074","0.083","0.073","0.075","0.075","0.069564","0.075066","0.076501","0.069453","0.075262","0.075195","0.095535","0.08483","0.093443","0.097986","0.099934","0.103407","0.094921","0.091482","0.06676","0.092","0.099","0.091","0.121","0.132","0.105","0.11","0.107","0.102","0.11","0.11"
|
||||
"INTL.33-12-FIN-BKWH.A"," Finland","10.115","13.518","12.958","13.445","13.115","12.211","12.266","13.658","13.229","12.9","10.75","13.065","14.956","13.341","11.669","12.796","11.742","12.11958","14.9","12.652","14.513","13.073","10.668","9.495","14.919","13.646","11.379","14.035","16.941","12.559","12.743","12.278001","16.666998","12.672","13.240001","16.583999","15.634127","14.609473","13.1369998","12.2454823","15.883","15.766"
|
||||
"INTL.33-12-CSK-BKWH.A"," Former Czechoslovakia","4.8","4.2","3.7","3.9","3.2","4.3","4","4.853","4.355","4.229","3.919","3.119","3.602","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--"
|
||||
"INTL.33-12-SCG-BKWH.A"," Former Serbia and Montenegro","--","--","--","--","--","--","--","--","--","--","--","--","11.23","10.395","11.016","12.071","14.266","12.636","12.763","13.243","11.88","12.326","11.633","9.752","11.01","11.912","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--"
|
||||
"INTL.33-12-YUG-BKWH.A"," Former Yugoslavia","27.868","25.044","23.295","21.623","25.645","24.363","27.474","25.98","25.612","23.256","19.601","18.929","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--"
|
||||
"INTL.33-12-FRA-BKWH.A"," France","68.253","70.358","68.6","67.515","64.01","60.248","60.953","68.623","73.952","45.744","52.796","56.277","68.313","64.3","78.057","72.196","64.43","63.151","61.479","71.832","66.466","73.888","59.992","58.567","59.276","50.965","55.741","57.029","63.017","56.428","61.945","45.184","59.099","71.042","62.993","54.876","60.094","49.389","64.485","56.913891","62.06191","58.856657"
|
||||
"INTL.33-12-DEU-BKWH.A"," Germany","--","--","--","--","--","--","--","--","--","--","--","14.742","17.223","17.699","19.731","21.562","21.737","17.18343","17.044","19.451","21.515","22.506","22.893","19.071","20.866","19.442","19.808","20.957","20.239","18.841","20.678","17.323","21.331","22.66","19.31","18.664","20.214","19.985","17.694","19.731","18.322","19.252"
|
||||
"INTL.33-12-DDR-BKWH.A"," Germany, East","1.658","1.718","1.748","1.683","1.748","1.758","1.767","1.726","1.719","1.551","1.389","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--"
|
||||
"INTL.33-12-DEUW-BKWH.A"," Germany, West","17.125","17.889","17.694","16.713","16.434","15.354","16.526","18.36","18.128","16.482","15.769","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--"
|
||||
"INTL.33-12-GIB-BKWH.A"," Gibraltar","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"
|
||||
"INTL.33-12-GRC-BKWH.A"," Greece","3.396","3.398","3.551","2.331","2.852","2.792","3.222","2.768","2.354","1.888","1.751","3.068","2.181","2.26","2.573","3.494","4.305","3.84318","3.68","4.546","3.656","2.076","2.772","4.718","4.625","4.967","5.806","2.565","3.279","5.32","7.431","3.998","4.387","6.337","4.464","5.782","5.543","3.962","5.035","3.9798","3.343687","5.909225"
|
||||
"INTL.33-12-HUN-BKWH.A"," Hungary","0.111","0.166","0.158","0.153","0.179","0.153","0.152","0.167","0.167","0.156","0.176","0.192","0.156","0.164","0.159","0.161","0.205","0.21384","0.15345","0.179","0.176","0.184","0.192","0.169","0.203","0.2","0.184","0.208","0.211","0.226","0.184","0.215999","0.205999","0.207999","0.294001","0.226719","0.253308","0.213999","0.216","0.2129999","0.238","0.202379"
|
||||
"INTL.33-12-ISL-BKWH.A"," Iceland","3.053","3.085","3.407","3.588","3.738","3.667","3.846","3.918","4.169","4.217","4.162","4.162","4.267","4.421","4.47","4.635","4.724","5.15493","5.565","5.987","6.292","6.512","6.907","7.017","7.063","6.949","7.22","8.31","12.303","12.156","12.509999","12.381999","12.213999","12.747001","12.554","13.541","13.091609","13.891929","13.679377","13.32911","12.9196201","13.5746171"
|
||||
"INTL.33-12-IRL-BKWH.A"," Ireland","0.833","0.855","0.792","0.776","0.68","0.824","0.91","0.673","0.862","0.684","0.69","0.738","0.809","0.757","0.911","0.706","0.715","0.67122","0.907","0.838","0.838","0.59","0.903","0.592","0.624","0.625","0.717","0.66","0.959","0.893","0.593","0.699","0.795","0.593","0.701","0.798","0.674","0.685","0.687","0.87813","0.932656","0.750122"
|
||||
"INTL.33-12-ITA-BKWH.A"," Italy","44.997","42.782","41.216","40.96","41.923","40.616","40.626","39.05","40.205","33.647","31.31","41.817","41.778","41.011","44.212","37.404","41.617","41.18697","40.808","44.911","43.763","46.343","39.125","33.303","41.915","35.706","36.624","32.488","41.207","48.647","50.506","45.36477","41.45625","52.24626","57.95955","45.08163","42.00768","35.83701","48.29913","45.31824","47.551784","44.739"
|
||||
"INTL.33-12-XKS-BKWH.A"," Kosovo","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","0.075","0.119","0.154","0.104","0.095","0.142","0.149","0.139","0.243","0.177","0.27027","0.2079","0.262826","0.300635"
|
||||
"INTL.33-12-LVA-BKWH.A"," Latvia","--","--","--","--","--","--","--","--","--","--","--","--","2.498","2.846","3.272","2.908","1.841","2.922","2.99","2.729","2.791","2.805","2.438","2.243","3.078","3.293","2.671","2.706","3.078","3.422","3.487998","2.8568","3.677","2.838","1.953","1.841","2.522819","4.355513","2.4170639","2.0958919","2.5840101","2.6889293"
|
||||
"INTL.33-12-LTU-BKWH.A"," Lithuania","--","--","--","--","--","--","--","--","--","--","--","--","0.308","0.389","0.447","0.369","0.323","0.291","0.413","0.409","0.336","0.322","0.35","0.323","0.417","0.446193","0.393","0.417","0.398","0.42","0.535","0.475","0.419","0.516","0.395","0.346","0.45","0.597","0.427","0.34254","0.3006","0.3837"
|
||||
"INTL.33-12-LUX-BKWH.A"," Luxembourg","0.086","0.095","0.084","0.083","0.088","0.071","0.084","0.101","0.097","0.072","0.07","0.083","0.069","0.066","0.117","0.087","0.059","0.082","0.114","0.084","0.119","0.117","0.098","0.078","0.103","0.093","0.11","0.116","0.131","0.105","0.104","0.061","0.095","0.114","0.104","0.095","0.111","0.082","0.089","0.10593","0.091602","0.1068"
|
||||
"INTL.33-12-MLT-BKWH.A"," Malta","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"
|
||||
"INTL.33-12-MNE-BKWH.A"," Montenegro","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","1.733","1.271","1.524","2.05","2.723","1.192","1.462","2.479","1.734","1.476","1.825","1.014","1.693443","1.262781","0.867637","1.212652"
|
||||
"INTL.33-12-NLD-BKWH.A"," Netherlands","0","0","0","0","0","0.003","0.003","0.001","0.002","0.037","0.119","0.079","0.119","0.091","0.1","0.087","0.079","0.09108","0.111","0.089","0.141","0.116","0.109","0.071","0.094","0.087","0.105","0.106","0.101","0.097","0.105","0.057","0.104389","0.11431","0.112202","0.0927","0.100078","0.060759","0.0723481","0.074182","0.0462851","0.0838927"
|
||||
"INTL.33-12-MKD-BKWH.A"," North Macedonia","--","--","--","--","--","--","--","--","--","--","--","--","0.817","0.517","0.696","0.793","0.842","0.891","1.072","1.375","1.158","0.62","0.749","1.36","1.467","1.477","1.634","1","0.832","1.257","2.407","1.419","1.031","1.568","1.195","1.846","1.878","1.099","1.773","1.15236","1.277144","1.451623"
|
||||
"INTL.33-12-NOR-BKWH.A"," Norway","82.717","91.876","91.507","104.704","104.895","101.464","95.321","102.341","107.919","117.369","119.933","109.032","115.505","118.024","110.398","120.315","102.823","108.677","114.546","120.237","140.4","119.258","128.078","104.425","107.693","134.331","118.175","132.319","137.654","124.03","116.257","119.78","141.189","127.551","134.844","136.662","142.244","141.651","138.202","123.66288","141.69","144"
|
||||
"INTL.33-12-POL-BKWH.A"," Poland","2.326","2.116","1.528","1.658","1.394","1.833","1.534","1.644","1.775","1.593","1.403","1.411","1.492","1.473","1.716","1.868","1.912","1.941","2.286","2.133","2.085","2.302","2.256","1.654","2.06","2.179","2.022","2.328","2.13","2.351","2.9","2.313","2.02","2.421","2.165","1.814","2.117","2.552","1.949","1.93842","2.118337","2.339192"
|
||||
"INTL.33-12-PRT-BKWH.A"," Portugal","7.873","4.934","6.82","7.897","9.609","10.512","8.364","9.005","12.037","5.72","9.065","8.952","4.599","8.453","10.551","8.26","14.613","12.97395","12.853","7.213","11.21","13.894","7.722","15.566","9.77","4.684","10.892","9.991","6.73","8.201","15.954","11.423","5.589","13.652","15.471","8.615","15.608","5.79","12.316","8.6526","12.082581","11.846464"
|
||||
"INTL.33-12-ROU-BKWH.A"," Romania","12.506","12.605","11.731","9.934","11.208","11.772","10.688","11.084","13.479","12.497","10.87","14.107","11.583","12.64","12.916","16.526","15.597","17.334","18.69","18.107","14.63","14.774","15.886","13.126","16.348","20.005","18.172","15.806","17.023","15.379","19.684","14.581","11.945","14.807","18.618","16.467","17.848","14.349","17.48736","15.580622","15.381243","17.376933"
|
||||
"INTL.33-12-SRB-BKWH.A"," Serbia","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","10.855","9.937","9.468","10.436","11.772","8.58","9.193","10.101","10.893","9.979","10.684","9.061","10.53261","9.457175","9.034496","11.284232"
|
||||
"INTL.33-12-SVK-BKWH.A"," Slovakia","--","--","--","--","--","--","--","--","--","--","--","--","--","3.432","4.311","4.831","4.185","4.023","4.224","4.429","4.569","4.878","5.215","3.4452","4.059","4.592","4.355","4.406","4","4.324","5.184","3.211","3.687","4.329","3.762","3.701","4.302","4.321","3.506","4.27383","4.517","4.17"
|
||||
"INTL.33-12-SVN-BKWH.A"," Slovenia","--","--","--","--","--","--","--","--","--","--","--","--","3.379","2.974","3.348","3.187","3.616","3.046","3.4","3.684","3.771","3.741","3.265","2.916","4.033","3.426","3.555","3.233","3.978","4.666","4.452","3.506","3.841","4.562","6.011","3.75","4.443","3.814","4.643","4.43421","4.93406","4.711944"
|
||||
"INTL.33-12-ESP-BKWH.A"," Spain","29.16","21.64","25.99","26.696","31.088","30.895","26.105","27.016","34.76","19.046","25.16","27.01","18.731","24.133","27.898","22.881","39.404","34.43","33.665","22.634","29.274","40.617","22.691","40.643","31.359","18.209","25.699","27.036","23.13","26.147","41.576","30.07","20.192","36.45","38.815","27.656","35.77","18.007","33.743","24.23025","30.507","29.626"
|
||||
"INTL.33-12-SWE-BKWH.A"," Sweden","58.133","59.006","54.369","62.801","67.106","70.095","60.134","70.95","69.016","70.911","71.778","62.603","73.588","73.905","58.508","67.421","51.2226","68.365","74.25","70.974","77.798","78.269","65.696","53.005","59.522","72.075","61.106","65.497","68.378","65.193","66.279","66.047","78.333","60.81","63.227","74.734","61.645","64.651","61.79","64.46583","71.6","71.086"
|
||||
"INTL.33-12-CHE-BKWH.A"," Switzerland","32.481","35.13","35.974","35.069","29.871","31.731","32.576","34.328","35.437","29.477","29.497","31.756","32.373","35.416","38.678","34.817","28.458","33.70257","33.136","37.104","33.854","38.29","32.323","31.948","30.938","28.664","28.273","32.362","33.214","32.833","33.261","29.906","35.783","35.628","35.122","35.378","31.984","31.47968","32.095881","35.156989","37.867647","36.964485"
|
||||
"INTL.33-12-TUR-BKWH.A"," Turkiye","11.159","12.308","13.81","11.13","13.19","11.822","11.637","18.314","28.447","17.61","22.917","22.456","26.302","33.611","30.28","35.186","40.07","39.41784","41.80671","34.33","30.57","23.77","33.346","34.977","45.623","39.165","43.802","35.492","32.937","35.598","51.423001","51.154999","56.668998","58.225","39.750001","65.856","66.685883","57.823851","59.490211","88.2094218","78.094369","55.1755392"
|
||||
"INTL.33-12-GBR-BKWH.A"," United Kingdom","3.921","4.369","4.543","4.548","3.992","4.08","4.767","4.13","4.915","4.732","5.119","4.534","5.329","4.237","5.043","4.79","3.359","4.127","5.117","5.336","5.085","4.055","4.78787","3.22767","4.844","4.92149","4.59315","5.0773","5.14119","5.22792","3.59138","5.69175","5.30965","4.70147","5.8878","6.29727","5.370412217","5.88187","5.44327","5.84628","6.75391","5.0149"
|
||||
""," Eurasia","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
|
||||
"INTL.33-12-MDA-BKWH.A"," Moldova","--","--","--","--","--","--","--","--","--","--","--","--","0.255","0.371","0.275","0.321","0.362","0.378","0.387","0.363","0.392","0.359","0.348","0.358","0.35","0.359","0.365","0.354","0.385","0.354","0.403","0.348","0.266","0.311","0.317","0.265","0.228","0.282","0.27324","0.29799","0.276","0.316"
|
||||
"INTL.33-12-UKR-BKWH.A"," Ukraine","--","--","--","--","--","--","--","--","--","--","--","--","7.725","10.929","11.997","9.853","8.546","9.757","15.756","14.177","11.161","11.912","9.531","9.146","11.635","12.239","12.757","10.042","11.397","11.817","13.02","10.837","10.374","13.663","8.393","5.343","7.594","8.856","10.32372","6.5083","7.5638","10.3326"
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
34
data/era5-annual-HDD-per-country.csv
Normal file
34
data/era5-annual-HDD-per-country.csv
Normal file
@ -0,0 +1,34 @@
|
||||
name,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023
|
||||
AL,73,70,62,70,74,64,59,65,62,57,56,58,65,67,55,70,58,59,61,54,54,62,62,62,68,59,60,57,57,58,61,57,64,60,61,61,54,63,57,65,63,58,61,57,57,58,61,62,56,53,67,62,62,53,61,61,60,60,56,58,57,53,61,58,65,64,55,55,54,53,58,58,50,46,54,50,54,47,49,50,54,74,47
|
||||
AT,448,429,391,433,413,406,403,399,376,383,374,416,379,422,419,449,387,393,378,389,367,437,425,406,424,376,385,400,409,413,394,407,408,379,384,400,380,414,405,428,397,384,377,411,420,406,409,378,369,372,415,373,383,334,380,416,371,373,368,343,371,337,370,370,384,362,333,340,351,388,337,353,358,302,324,336,347,315,320,322,358,456,307
|
||||
BE,107,109,89,104,96,100,101,90,92,101,95,105,94,102,109,113,91,97,88,89,84,111,114,100,100,91,94,101,102,101,96,102,101,90,97,97,92,103,108,105,99,94,96,99,112,107,108,85,84,83,101,92,94,82,89,110,90,89,84,79,89,78,89,90,87,86,76,87,87,107,75,90,99,69,81,88,82,81,80,71,89,107,74
|
||||
BG,358,373,318,329,339,331,304,319,305,299,283,294,334,367,295,363,306,283,320,268,277,303,324,313,323,259,297,292,320,286,300,306,323,303,296,314,287,310,293,326,301,312,295,306,326,313,333,320,276,272,332,303,318,266,307,335,325,303,273,275,284,272,322,277,298,296,259,266,266,273,313,295,258,250,261,265,281,261,232,250,277,372,228
|
||||
BA,192,189,158,181,181,174,168,168,167,155,144,164,167,183,158,194,157,157,152,143,141,173,180,176,176,155,162,157,165,165,163,154,170,156,153,168,145,170,153,176,163,154,157,159,167,160,166,158,146,139,174,152,162,143,157,171,156,158,147,132,145,130,156,146,164,148,134,132,139,147,144,147,133,113,137,134,144,128,125,127,141,179,116
|
||||
CH,245,231,213,239,230,222,215,217,210,212,214,225,210,226,221,240,211,215,203,214,200,234,231,214,229,213,217,219,225,227,217,221,224,213,216,220,208,219,220,229,216,208,208,227,224,217,217,200,202,200,217,204,208,183,206,217,195,205,203,192,200,189,199,204,209,193,187,194,193,213,179,196,204,178,181,189,191,174,184,176,197,245,171
|
||||
CZ,373,366,311,341,326,330,353,313,299,316,297,344,307,351,350,377,313,322,301,314,294,358,361,345,351,297,296,320,342,336,319,326,322,282,296,315,299,330,328,347,316,308,298,323,350,326,346,297,280,283,333,299,316,279,312,364,319,296,288,265,309,285,308,302,311,300,269,275,289,338,281,298,306,242,261,283,287,262,255,259,302,378,248
|
||||
DE,1563,1537,1250,1388,1316,1354,1464,1255,1205,1315,1254,1428,1237,1416,1484,1567,1282,1342,1229,1266,1183,1486,1528,1390,1399,1269,1211,1341,1447,1429,1300,1388,1356,1184,1258,1339,1221,1377,1433,1433,1348,1288,1273,1384,1492,1425,1491,1201,1156,1135,1367,1241,1312,1155,1295,1548,1288,1220,1172,1085,1250,1168,1269,1236,1239,1198,1072,1159,1202,1459,1112,1232,1305,992,1095,1188,1148,1092,1070,1019,1230,1509,1021
|
||||
DK,200,198,151,167,158,171,185,158,142,164,160,176,152,175,186,190,163,178,154,169,154,184,194,176,182,181,153,170,182,186,159,166,159,147,147,172,161,171,190,177,175,164,155,162,191,181,190,151,137,132,160,147,166,154,162,191,162,154,147,134,161,148,158,151,150,144,134,137,150,193,144,159,160,125,138,145,139,142,134,125,150,193,138
|
||||
ES,1045,986,927,1012,830,994,860,807,904,853,962,911,927,948,785,1092,934,848,821,890,742,952,981,967,949,878,890,839,933,899,971,961,943,931,928,928,797,906,887,911,793,787,807,920,860,891,781,783,684,767,911,852,889,724,627,759,605,735,796,750,757,677,746,813,856,714,776,785,736,856,673,810,830,649,684,722,688,768,708,672,728,933,655
|
||||
EE,373,352,266,284,307,298,320,274,250,285,297,310,283,297,321,336,278,310,281,305,253,298,323,292,306,324,283,310,333,317,285,285,289,256,245,327,302,324,299,313,289,278,260,271,328,294,332,281,232,240,257,257,285,288,265,306,281,278,262,235,273,271,278,270,270,260,250,230,268,315,253,286,259,254,225,261,255,254,235,209,270,365,246
|
||||
FI,3989,3729,3012,3160,3611,3348,3577,3151,3012,3213,3285,3442,3085,3179,3880,3819,3296,3626,3180,3386,3065,3513,3467,3329,3526,3873,3284,3693,3640,3494,3572,3178,3458,2963,3074,3691,3490,3743,3419,3607,3572,3331,3296,3192,3894,3516,3793,3402,2888,3075,3209,3163,3319,3341,3213,3343,3302,3468,3259,2915,3303,3307,3231,3159,2998,3101,3018,3009,3219,3604,2961,3351,2985,2983,2795,3030,3127,3061,3116,2726,3260,4325,3109
|
||||
FR,1671,1578,1350,1586,1458,1490,1421,1336,1381,1447,1430,1480,1422,1489,1396,1633,1338,1378,1240,1332,1196,1584,1630,1499,1471,1331,1408,1412,1473,1469,1475,1453,1545,1356,1462,1445,1312,1454,1502,1545,1396,1315,1424,1484,1599,1518,1520,1269,1237,1227,1501,1375,1389,1168,1280,1454,1222,1337,1263,1190,1299,1132,1294,1346,1376,1263,1199,1301,1277,1522,1060,1300,1408,1034,1143,1266,1236,1150,1165,1043,1279,1535,1075
|
||||
GB,946,965,835,869,773,860,910,819,781,890,906,934,809,901,925,935,813,890,787,849,825,1000,1046,912,970,917,839,874,894,869,805,880,862,842,838,851,863,873,972,880,896,823,824,838,923,944,903,801,764,746,859,824,857,793,794,886,738,752,745,771,816,726,751,743,748,734,706,790,777,930,707,832,841,683,759,769,720,764,750,725,764,985,690
|
||||
GR,218,222,205,217,223,201,166,200,192,177,166,162,210,211,160,215,184,169,196,164,172,182,184,192,199,162,185,176,171,164,184,185,195,186,188,190,160,186,172,191,184,192,190,179,174,180,194,193,176,165,206,197,195,161,179,191,192,180,167,177,174,164,191,172,184,189,161,158,155,143,188,179,148,136,165,150,164,139,146,148,156,230,138
|
||||
HR,160,166,131,147,151,147,145,138,127,131,116,140,140,155,137,166,131,132,122,119,114,149,158,152,144,124,133,129,143,138,137,131,144,124,124,139,121,140,130,149,133,132,130,133,148,141,144,128,118,114,143,123,138,115,126,145,132,129,124,106,120,109,135,127,140,123,109,110,116,130,123,123,118,92,114,116,119,111,102,105,119,153,96
|
||||
HU,304,332,268,281,302,285,297,277,251,262,236,291,282,321,289,333,272,273,246,248,235,288,321,309,298,244,272,268,293,283,276,264,283,244,255,281,267,287,271,311,272,282,265,274,313,294,305,274,243,238,299,262,288,240,271,310,291,272,267,232,269,243,300,267,289,265,229,230,243,275,267,259,250,198,235,251,255,234,211,228,259,331,211
|
||||
IE,219,217,194,196,175,204,220,191,176,210,216,215,191,208,213,211,190,204,184,205,195,234,250,208,232,210,216,213,222,214,190,226,204,213,198,211,210,205,239,212,209,204,201,211,229,241,217,200,192,192,209,209,213,201,195,219,180,186,191,204,206,189,192,193,187,188,173,202,204,241,192,205,210,186,205,199,184,200,191,194,189,258,166
|
||||
IT,806,757,663,758,734,704,693,675,666,652,652,683,660,700,615,778,640,653,616,631,587,715,726,674,710,665,655,656,682,672,678,639,695,659,655,670,604,681,675,729,684,645,657,695,688,671,676,630,616,610,712,626,650,555,623,639,578,618,619,563,585,546,629,612,675,597,548,568,590,637,562,602,587,481,541,528,570,529,540,520,577,746,495
|
||||
LT,439,424,323,336,358,357,382,323,303,336,344,371,342,368,368,405,318,353,329,346,303,355,386,362,371,354,322,365,401,372,330,345,339,312,289,388,348,370,370,382,342,326,301,326,393,352,397,335,275,272,313,311,336,329,325,377,335,325,306,274,323,313,328,324,325,316,299,277,316,366,305,332,314,298,273,308,296,302,267,252,327,431,273
|
||||
LU,10,10,8,9,9,9,9,8,8,9,8,9,8,9,10,10,8,9,8,8,7,10,10,9,9,8,8,9,9,9,9,9,9,8,9,9,8,9,10,10,9,9,9,9,10,10,10,8,8,8,9,8,9,8,8,10,8,8,8,7,8,7,8,8,8,8,7,8,8,9,7,8,9,6,7,8,8,7,7,7,8,10,7
|
||||
LV,489,461,348,366,392,389,413,352,325,369,383,402,372,394,407,439,351,391,361,384,326,386,420,385,402,401,360,401,434,407,361,372,371,337,316,424,385,411,392,411,372,357,330,354,425,379,428,362,300,301,334,337,366,366,348,402,365,358,334,302,353,346,357,352,354,337,324,300,346,402,330,365,342,329,297,337,330,328,297,272,351,473,308
|
||||
MK,83,80,72,80,83,75,69,73,72,67,64,66,74,79,66,79,67,66,71,63,64,72,73,70,77,66,69,66,67,67,70,67,75,69,70,69,62,72,66,73,71,69,70,67,69,67,70,71,65,63,76,68,69,59,69,70,71,68,64,65,65,62,69,64,70,68,60,59,61,59,67,66,56,53,61,58,62,54,55,57,63,85,54
|
||||
ME,52,48,43,48,49,45,43,46,46,41,40,43,45,48,41,50,42,42,42,39,39,44,45,45,48,43,43,42,42,43,43,41,44,43,42,45,39,45,42,46,45,41,43,42,42,41,44,44,42,39,47,43,43,38,43,44,42,43,39,39,40,37,42,41,45,43,38,38,38,38,39,40,36,32,37,36,39,34,35,35,39,53,34
|
||||
NL,132,136,106,120,109,119,129,107,106,119,113,126,110,121,130,137,108,118,107,107,104,132,141,121,120,114,105,119,124,122,111,120,116,104,111,116,107,120,133,122,118,112,110,118,134,127,130,99,99,94,119,106,113,102,109,138,111,102,97,93,106,98,109,103,100,100,87,102,103,131,93,108,117,82,95,104,96,98,93,85,105,128,87
|
||||
NO,3658,3823,3379,3441,3537,3479,3726,3442,3268,3480,3339,3541,3020,3307,3639,3731,3315,3547,3122,3353,3400,3807,3641,3496,3783,3951,3259,3533,3425,3431,3339,3128,3312,3028,3094,3405,3369,3436,3457,3380,3502,3181,3141,3117,3541,3359,3449,3200,2890,2848,3057,3032,3196,3207,3170,3301,3060,3203,3062,2878,3166,3028,2983,2943,2874,2828,2918,2954,3018,3442,2796,3157,2946,2754,2793,2859,2963,2930,2981,2711,3035,4108,3040
|
||||
PL,1615,1584,1275,1356,1364,1378,1517,1290,1230,1296,1249,1438,1294,1478,1446,1586,1279,1349,1269,1305,1215,1435,1527,1450,1467,1280,1193,1321,1504,1431,1293,1347,1314,1200,1184,1419,1270,1393,1431,1491,1336,1265,1178,1304,1494,1377,1507,1255,1077,1078,1312,1252,1310,1197,1302,1512,1326,1249,1171,1052,1268,1192,1296,1230,1262,1244,1117,1092,1220,1426,1177,1274,1251,1068,1063,1163,1158,1120,1019,1017,1252,1599,1033
|
||||
PT,114,114,102,113,86,110,95,79,94,96,107,103,99,109,80,131,106,93,93,97,78,106,104,115,103,98,103,97,112,110,115,116,106,109,109,109,99,139,107,102,89,90,95,104,99,108,85,89,75,87,104,96,104,85,66,88,62,82,96,90,90,78,87,97,103,90,91,91,84,96,80,101,100,81,79,87,79,96,81,72,78,98,75
|
||||
RO,931,939,801,813,874,851,839,815,799,780,736,811,883,948,822,968,810,789,826,731,744,826,890,867,873,706,791,776,858,792,787,798,838,782,752,855,772,836,780,880,801,811,763,807,917,815,882,827,710,700,846,801,848,701,806,869,842,805,740,710,760,721,844,754,799,780,684,695,695,757,793,781,709,662,681,721,720,690,624,648,740,973,611
|
||||
RS,292,305,246,274,285,276,265,263,261,239,222,252,273,300,249,313,248,249,254,231,226,270,283,271,274,233,253,243,267,254,251,246,272,242,243,265,233,265,241,273,251,255,244,253,275,256,268,254,231,220,275,243,263,223,250,270,259,250,237,217,234,217,262,238,265,247,217,214,222,229,251,244,214,192,222,223,232,211,197,212,234,306,192
|
||||
SK,221,219,199,207,209,201,212,202,189,189,178,210,195,217,208,228,192,193,185,185,178,208,213,211,219,179,187,192,203,200,192,188,195,178,178,197,188,204,193,215,191,190,180,193,212,198,207,187,172,173,202,186,191,171,186,204,193,184,177,162,184,174,190,184,191,182,163,161,170,188,175,179,174,142,161,170,176,157,152,158,180,231,150
|
||||
SI,81,77,66,74,72,71,72,69,61,65,61,72,67,73,69,78,65,66,62,61,59,75,75,73,73,62,65,67,71,69,67,68,71,62,61,69,62,71,68,74,67,65,65,69,73,71,71,63,59,58,70,61,63,55,61,71,63,62,62,54,59,55,65,63,67,61,54,57,57,65,58,59,59,46,55,57,58,53,52,53,61,77,51
|
||||
SE,4509,4537,3713,3939,4134,4059,4374,3918,3633,4015,3891,4219,3560,3919,4426,4488,3950,4223,3662,3988,3814,4451,4260,4021,4358,4613,3929,4280,4255,4254,4043,3806,3975,3634,3625,4238,4132,4314,4246,4287,4301,3913,3840,3819,4588,4139,4376,3931,3476,3446,3785,3695,3893,3991,3916,4073,3757,3950,3781,3446,3898,3778,3755,3769,3632,3561,3606,3590,3806,4397,3474,3935,3675,3452,3421,3635,3693,3705,3689,3247,3807,5084,3769
|
|
34
data/era5-annual-runoff-per-country.csv
Normal file
34
data/era5-annual-runoff-per-country.csv
Normal file
@ -0,0 +1,34 @@
|
||||
name,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023
|
||||
AL,18102.536984526414,9362.260840506311,6061.862820153789,14283.904408113205,9819.184491956023,10228.254519456263,13788.284450369407,9581.270108803017,7938.384836547995,9040.045836743586,9921.845743062182,13900.722955927391,9710.931748556879,10574.663320350839,19341.246363906943,17818.135264440367,11442.713887022777,18086.801216289034,15090.128262650946,21363.26299103702,9091.698545327283,15645.252953546536,26744.08978638467,15193.032691775385,15984.127347228396,21350.165383112253,12855.252167834218,13420.929958145927,18491.92173822311,23127.97840031047,15647.322475185589,18621.138651647332,15899.845988546795,17394.46706381624,9941.517004312835,15056.517227865626,13546.145796746823,19078.487245825123,21734.889469128113,18681.018783118114,17330.7404590047,11854.58505075189,8621.019687739607,10958.633158319248,11928.114867207425,14053.437518158384,11478.547049310142,9794.162917024925,9309.704198107493,7531.383319836307,13417.032891488734,9396.693750356952,9409.269914411027,9602.245346872442,13721.093186096236,18546.848247572612,10075.274288997707,13160.130634381218,14979.3178626011,11173.442130939595,10656.167120597063,11333.102860367679,12218.649211273396,16968.134523176956,13531.444805168734,12351.485474236735,7777.709342414358,9395.578415692386,13162.74078695902,21279.522933687273,7131.262505063414,9979.8596278608,14852.708775826433,10550.911120633964,9976.081734060937,14930.01135394502,8322.107101243482,14871.511785547276,8735.240828081134,9201.521447196284,15965.927842545672,17077.541703886527,14104.446634983404
|
||||
AT,86531.51734236983,70042.82795415918,55673.922583448926,73201.56141483008,77917.51024365649,61393.73261184873,55048.20583071285,91666.41522182143,63572.87951011166,70463.32537160354,82083.36248472283,77811.80736180999,72623.28291775129,92135.9214601233,96990.37023646115,85097.60090834703,90540.2512560922,87926.80279582532,87840.33332785149,95771.51050456028,80100.0597367668,89961.83970292915,94250.95465501286,83836.27750897587,127502.64206362939,114305.16098508416,109841.9915507258,94950.56912780282,78607.44609072198,109558.29937241938,70075.51296406337,91798.91825728992,87743.39136454638,99172.3185471974,112079.92282492586,77403.35720896415,141634.05110901658,127491.44958971704,103513.31397365611,94072.4808516721,90719.06004331182,74178.70850428617,71954.43763473642,75430.93523721115,83080.51606488624,68680.54577957527,88997.37641681913,78365.83036558417,88108.35920540475,70055.7892534604,83590.790849829,80943.05621285089,88054.73669568839,64323.72991620271,76516.31784700113,88537.52869871816,74980.7275243927,76703.23963260197,90699.65433828124,82618.46892777775,70279.06284438398,76864.90473420777,38883.771847486016,64333.37459685728,71147.24783545699,61897.64030624322,56722.92181769331,64364.47029441406,80300.64217575881,73731.45518976511,60840.309523971024,77575.9681355992,74925.98195655535,87076.27014563217,55659.14157544586,71826.27744178762,65790.17399828041,62758.61938425757,63451.07652587882,63443.71962749899,60531.78695214822,73567.34222821795,63977.67627260971
|
||||
BE,1961.4766789766115,1152.2739476527088,818.2925521347668,792.0469723263222,1593.7272156934505,1164.481755817633,873.079191781097,1304.591358175381,1034.616549532147,1222.8331458954544,2265.3933295931465,2299.7187477495568,1601.6287456097295,903.9162052526016,1681.6717933948885,1553.0826978024484,2040.8513201770277,2596.453742857211,1572.1256345899858,1777.5813929080084,2626.96550179367,2109.9419394561014,1095.552430877252,1153.3090754765356,2926.2047527605378,3273.3444811813465,2455.1462895729287,2709.4254348359373,2044.223080485547,3206.6821776003253,1403.4368531879622,1739.01009962226,1509.0861879549796,2489.4865224203572,2440.1073430603583,1152.6261514941527,2218.937185944037,2759.156597708309,2657.6330859359005,2904.764428136616,3657.83503348807,2493.2486286738635,2917.270148862828,2660.3113890881846,1897.0141168954808,2027.0116832611525,2822.5902787959144,2964.8457470488684,1943.761175974426,1192.1713008070133,1419.0119225208746,1475.2557281855488,1769.9742186132778,2647.8931490311224,2842.9882619071104,880.5015070232031,1197.5019163599245,2093.4616667083587,2614.387699318041,2455.605567526133,2964.8707630509653,2512.265466519676,1585.2842393930487,929.2255532772314,1281.2863306004592,1121.936801130382,2183.018089275124,2209.175694512598,1603.8823576630593,1544.7801250586733,1495.8450265096008,1698.4561860883377,1826.3476500921734,1803.4120415623293,1828.4613155494794,2424.4009518987536,1091.1596112517386,1814.2183897620703,1171.4609814371709,2056.8674333110275,2031.8962335362714,2907.836627473,2067.170862372187
|
||||
BG,17071.604805088016,14499.026058918833,7232.927769745818,11963.806716811183,6134.985167502051,6976.20752617876,9144.48113078865,10476.930594688338,7275.174931794049,5983.600586215025,7806.165358407907,7617.879584469116,9313.915986883927,12665.103843530671,18165.703005314856,20925.111917073817,12315.95137614649,14307.215196342033,11652.743586791588,16042.778215050708,15000.011504505326,15411.367697482856,23959.284980030086,13749.537818599603,14477.782616320155,19301.913180173906,18779.64649297375,14471.754083245778,21905.976678210158,20337.934359162857,20009.368056844236,22642.8256575709,23291.544303799303,14596.266505770593,16672.574320967968,18465.93977853061,15123.0740003407,16401.953223276385,17509.31598177905,19228.19892146255,14599.539868168713,16192.551398587811,14129.882713144674,15395.87601647586,11853.583066311567,12273.885630367266,13296.879487675578,12962.17913948413,10178.141531948864,10101.748861881337,17833.95419276747,11290.360773903032,7050.797194092144,7109.831367133397,12879.727662239184,15849.231621819281,14036.330428384765,14600.701492135015,14377.532715491632,7705.7385359122845,8414.14109970378,12768.14503989922,11390.56673556146,10492.153643864705,15665.526881990423,13518.231074072748,9896.670696858979,8514.724851169687,10495.74229946015,14331.982881842356,7228.669024198985,6779.132502990354,8418.829006301234,16447.848686603495,15740.35987338571,11179.883037182273,8789.581276892988,11591.504961624405,6993.71096793164,8046.946588923506,10797.966046345515,10462.980330774792,8581.638814176174
|
||||
BA,31614.29255116213,25762.18251896169,12898.683737355397,30643.34571996033,20289.25506629573,16692.532556519098,20416.06449106326,23823.10383354778,16264.762900161431,21522.105898137404,23467.52324346034,27732.028396263388,21355.39127202247,21518.57483169428,38198.02048713121,26864.382517947488,20815.045478598513,30820.77172304343,26041.454718573805,32434.848569531026,20613.68138756547,29427.6067241259,33216.04695823398,35126.00882914745,35434.02869793576,33198.240125653894,27292.13451964922,28870.288475787063,34855.527471322755,40158.11721181478,26000.45986387781,30818.815452611776,25386.059210704487,29741.547122355205,28211.934365516674,30030.474291377286,28262.88980319508,36551.088477619196,29006.131913946814,27659.528119372964,23600.138376555304,18313.888493525537,16009.416242480263,24722.92263318226,19189.890721764787,24683.705818314953,20989.732351804592,20569.866983400992,18470.90664070533,14851.755901997987,25891.954823722892,19819.186826010166,18921.820235243023,20522.576037546467,27525.961934821684,30713.034955646464,21412.918614981576,21344.870107122344,26543.94285666588,19942.69654945001,23180.52553450498,25225.421682786062,17217.841128593398,25342.758536033023,22647.27040540609,20311.586220306715,13360.715771642963,18725.9052067595,21814.111731615874,31110.03238839381,11170.209355889527,11624.972537489217,20618.808518471225,26321.87815471064,18023.46871599901,20293.60245322545,15351.515268991054,23732.8659965382,19641.494693119246,14018.69083089969,18476.061736021245,20106.92588679312,25396.55419340511
|
||||
CH,71147.26157637448,54904.32201155619,50017.90208838156,60290.759721214985,73027.45831149221,73481.642346746,55618.537744757035,90032.09246974687,51962.38939916655,67177.84116696635,96134.70662377033,78280.50065735803,75567.82823680741,75624.52378636891,84437.3353706146,82858.22758683441,70824.92066589095,89311.09471805945,65693.73271567532,95736.9646979805,81823.38979168108,71941.93730231738,93291.72439376163,67130.87226350856,103459.16116112942,100678.84780651607,97724.23622167954,103707.47043615916,84031.35407618036,103162.60292359442,67550.72288370335,80436.85045155323,87045.62560332651,91431.67032188186,103676.61542793321,68303.04781353423,112322.8911282786,90003.61666202937,91028.65800738563,79435.56403729375,84362.27602442491,71967.17653868764,71356.17066607098,70327.74412176231,72852.24726422041,60501.17532436925,83372.98013161327,74234.0349385613,61890.14596593614,54336.52856303606,58271.018596959824,62644.46734396249,75790.31562737533,69637.43067630196,63290.99710001813,60360.96649160057,57476.7610131337,62343.013781750116,78693.52307555292,73667.98513148604,75122.7031133837,70327.33051388402,33043.59766466136,48968.55545142022,47632.62274536815,48588.59714178414,58398.342285916435,57742.38347363473,42559.51792407362,59408.23894223828,57129.80243604273,71163.63652517287,70858.4268509181,119263.66699527185,55000.17388464577,60563.73895679769,51249.64855691976,45607.547672961526,60542.786248766475,50488.945849740405,62587.04259357905,67091.5970044437,65549.52567888667
|
||||
CZ,21212.78579882691,10928.058379661825,3384.888399390222,4480.397678992209,6399.719467990146,6768.6515946008185,5799.446185009577,9411.786777037812,5860.23463242501,5599.396992120427,5741.811363153907,6430.8701452824125,6608.002211449021,5547.98412657507,11139.03676570244,9975.869136026628,10340.80877548634,13532.930674695574,7705.735677184478,7812.801872929193,10964.355351867012,10646.504003233118,9719.560436989883,9722.51782291833,19015.37334991238,15549.667939948402,15927.255735311868,12882.876953226223,10353.403919517015,11853.576269226234,10677.61771918624,10413.95103805089,6895.283030051313,9424.903567027312,12922.392855988994,9137.874616036986,17532.348544152504,18533.830228515635,15250.542039808313,10190.043701741004,11537.335951365127,9452.574932230946,5833.228549596612,5329.206957903766,7580.6976645678615,7069.4638232187235,11641.01844987317,9790.145937530902,7320.767578365769,5406.873869997462,5625.637231646826,7239.835546851702,6440.471526964078,10089.617439184036,12468.55796361433,12603.058166229213,11520.381274473184,9364.18293733304,10411.740148030329,8903.525346614548,9434.353552398077,14463.707947162726,8297.335864348554,6305.0428212307515,9383.102792968806,9420.905095490103,7053.530866655102,7934.504156979587,9131.766698685136,11027.709419784474,7973.011990884055,6406.065926850977,10728.184944007047,6645.433895571247,6345.82145823084,6499.675988954033,7016.463805946017,5619.135413529,4807.786670051716,5785.96568493957,7986.497102061061,9207.147123091028,7072.340654546769
|
||||
DE,60501.03103951161,38175.41955606091,20879.426305645527,28284.75340336476,36103.32351052005,34891.089702429555,28788.726755549767,47593.248184570766,29278.51011479424,29170.60074491641,37514.09293381361,41854.44001450301,38958.042582957896,35908.26729908446,54302.825387264325,53900.0627595872,49537.22949846474,58655.764340031456,37627.8257805545,42967.11131060519,58392.899587658314,47246.42956098116,36543.949785170116,36184.44504543948,76454.75505815547,77563.28089874369,65706.46393994696,62713.75591115003,50646.052126013274,74501.93068438585,33965.80961685558,36936.195615288314,42537.597915180464,56616.68921207296,56744.68927682596,34807.98202654087,56642.02192030585,72249.78534694383,61866.53633607989,55155.47864420242,60392.13262306467,54016.67652252674,53772.61604029787,44957.681101902934,45340.54136937088,48213.458592237475,66703.44582319073,60862.17019199549,41014.24992391146,32890.656129618095,33561.7114818598,35496.398391557115,43529.12222860253,55750.09930602895,59293.24549493131,37708.06634825865,37073.71374151417,42227.76427477898,55642.269571505705,50261.32889407123,50099.1653624443,63663.80803911536,33932.84222448403,24148.0930626651,39327.588161226195,34424.75266875371,37774.7468462978,39904.36386097259,38761.37664135111,43371.39725264248,35879.97041420226,37163.99533546333,50391.241894760955,37073.97568394232,36139.75677566728,42435.96482981362,34097.15586833773,36767.50341472353,28228.762854078665,31841.550922412007,39703.58319343355,47521.52513933251,37833.900158720804
|
||||
DK,200.778317198711,183.58783222570864,184.92589840547043,103.64850861603549,315.2220887719417,314.1000544312628,214.28103955721934,161.43191114338694,185.2111475627714,358.69279426367336,540.6494487174206,225.87222027671936,240.57818634617777,370.37587945377,297.48979685029366,176.69208006156848,208.79213770008658,418.4554011794129,292.8102234525168,354.1220188699609,405.97396851309696,497.6042583966885,394.062076725445,291.3295691524654,304.5438623304028,591.4756757289098,629.1912050409122,479.19182164984767,353.75286712188796,454.0799499391422,338.48620130918835,357.676218196066,271.5200039604648,288.04880490856954,389.1757124784286,200.03398963977796,391.555913715114,397.29527898061724,379.8043799580585,514.7861201159348,505.7304478209306,381.57816134966373,489.3522161731293,301.717309458533,340.1024114463131,377.00536197863613,349.05617800662674,489.4227950883326,223.23589869898433,269.17110101837187,288.12441629799764,229.5796362727797,293.635637901186,464.89056739838395,386.583686695923,100.62743648672041,155.50324274468716,357.89273417380645,451.04208007822723,403.3432275318107,376.8995908622044,395.3896113505339,169.30459202493293,211.16687292699712,238.87912856891634,225.9981737610454,469.5229598902774,334.5021223766927,213.88993390188736,267.6283833775911,319.04746406617295,376.09256801086406,317.617725512616,353.26516627601364,404.2285931109035,408.5235836651241,351.86517079981496,305.15203377590285,361.8170659996248,441.45504335438466,312.14518786073575,466.99320427604425,510.02659659134173
|
||||
ES,78876.635611407,38950.09623429436,33841.47292664868,23156.438140457663,24925.319205598968,36553.92702862067,59420.41145835762,44448.20001757085,23003.718514410986,25989.029770929596,49381.7181466273,42506.42487287232,29823.22966835847,33520.89863652133,42189.87541544434,45018.59980204108,27387.4917761516,45602.58407624375,62626.425244916936,94141.56249288519,66884.65469167147,67115.06386526441,82553.38984370838,62483.82642486853,54633.78478265801,97009.71651609142,47073.863176177474,55800.125131342014,85746.55555964066,72028.42027117872,75395.28981871007,97165.39237066667,52196.13272216457,55183.75674414718,44434.367388636274,45688.29479796517,107175.1885102772,376352.4882722023,122222.92956502433,46652.32256081546,42283.296882354574,45745.627884904505,49745.69531403085,62249.891346371536,58920.93920695715,48705.91089393512,49506.55303300167,60104.870297070986,41417.79510072781,40561.22111509541,48584.70074175896,41980.59062088254,40901.640882458836,43899.80095828514,42846.07384845135,68844.74333042726,58684.98840324564,44556.941393617584,38670.78308215774,46815.51322723987,68212.19494117319,35011.91030341564,50475.76713743041,37227.78564631605,21874.579431867896,35771.95151620915,29462.81813629621,28957.890173503936,32351.242924601538,48787.03990347552,31409.59113067243,24367.630996980257,54440.48961905899,50212.19464108009,33563.81874118821,47043.00929278407,21662.04001863739,49011.344970588914,40719.843457258816,40971.905822060144,45241.676643808205,43434.78481736922,37030.44475893774
|
||||
EE,539.9157561831089,506.40067622283726,641.2579701177458,634.8633672657788,801.3715228148297,966.9758840524717,584.81736437269,583.7023862826877,945.7850249371241,794.7615397417561,1013.5168183220601,680.8524541483096,896.074617741102,657.0814978199126,1138.8891299468455,1033.2360728791764,1360.240006093535,1004.6950457068739,934.8774758153143,610.9977141696028,1048.0576885162222,1477.5046721309996,819.8347754595931,595.9919701101757,664.1717649435486,1178.672290642306,1112.7122616720162,1003.3658496852601,739.8499843054013,970.7396668771637,1156.5986195943308,988.0643633892423,963.0153554345143,973.0118510683724,980.7669857762866,637.7376743732589,1121.0664931638019,1485.3090062847518,1014.4287893275732,701.3843644468006,1196.8127434491068,1136.1215677919786,956.0911286121622,761.6620263988196,1109.6559596693944,945.8137139982223,1246.4435124663337,1081.0063689141978,1180.9951778617858,1433.4526339800395,1044.4962572791317,875.9289554452553,699.3911738148247,770.5276589427534,923.6083617038047,353.16555295606884,572.4961222214871,770.5595680360855,811.3520528619258,480.6204379373417,526.2783934002991,624.0252970776874,317.7449195254128,502.6073570248072,523.2149143909173,201.10844695565802,516.5064948459781,787.1638506300568,929.6905631193786,943.6792182991617,682.831069893961,933.1072250631543,692.097322772721,449.72254117947216,392.4173074585239,635.9676582877272,753.2897252561945,692.2577760060705,496.359994444626,685.8431112730673,512.1207984775516,963.0464221974397,483.833486345915
|
||||
FI,19863.633124385666,19889.46363566243,43612.48513693398,40476.15110774358,37963.60387525601,30946.988617446677,26642.94999177761,35266.32524904611,44524.796955378566,33134.502072929165,37605.30609105331,44212.92045299994,43354.55443946037,40909.90249435943,45502.4817028443,31224.476747778986,41198.39417754888,37433.6293362709,28205.152814527217,22733.614552593714,36790.55908786393,45364.155643266684,28818.806516416316,35920.468538637644,43898.27049057533,41064.81684006838,48740.383821508905,37939.33952866352,30918.72594548001,32676.177851908644,33754.05667642144,33605.2810320407,40213.26757169686,46999.65997165162,40988.91471061698,26205.15827640759,41167.74001571865,25866.031354509407,34538.39918373158,28474.82496101674,52752.27216474974,31970.598763267328,35752.18054352296,34628.515223969094,27958.317625583102,31764.196982878522,30015.16030263079,26346.04561795855,37548.80632649389,27745.021972655202,27337.35846234453,42346.93155636462,32896.698992597754,22520.879762748657,23208.41547315833,19884.31515309925,22475.195958848508,33947.011695157635,26939.65172877202,32198.274008146243,28319.0878193112,25068.601753935876,16735.56947336933,29510.104024439464,31518.153863523567,22455.334677451585,28461.18834411878,38706.997170480194,29619.48059832548,29700.763598820195,30127.95453034573,45678.82538666528,31580.034602099753,29256.819253905658,43076.06538538077,49489.04536337738,37281.852766328535,33818.560580958125,35465.53242057822,41410.545080415,41567.72109759498,59630.270126901065,45592.22770628446
|
||||
FR,104970.07553291276,54987.520121202884,58127.609672438644,63952.96688103039,76761.15501948349,76267.11605975665,80986.06867218221,93733.93578796726,58479.255039973585,73543.6737690567,135094.49763612094,106772.95460342853,80280.31347296045,74490.3783289433,106687.24245156738,78827.6552216503,82482.11027901788,110101.24506868717,102231.57173723538,134019.59611286796,107848.78158188045,101612.59295931137,120079.53146371644,89568.66448178052,139585.30725052828,153772.55334552698,108799.90779570332,132530.25240249874,145056.24077647954,157344.40874499045,121182.68180087653,135378.15307040678,100408.75538533325,132164.7891142495,122382.6612084835,103706.50937621434,174240.52624537304,149853.10658224527,139992.58441391244,124892.14391178945,138893.07653615897,136102.17909683278,136298.85434619425,112484.75227834118,103842.75366698352,105453.40277549413,121935.76619549586,138379.45234918175,71924.60006455882,68830.14474115185,82603.77634528138,113556.04015089742,104293.46882473862,133822.28230897718,106263.7222156586,102481.34621013676,87080.48957235571,78895.08319488679,105735.9820525235,105626.7734987112,124313.3006359069,92144.11932119,73537.29646152578,78137.60525599915,58286.814348802,68928.05802270533,75743.7796112372,83489.37862547796,61518.93775410048,71311.23184506799,58810.65089438103,62581.66694545332,108566.1756738168,106810.3035898108,64981.51870529863,80829.27869961815,55203.39988738071,99034.47679069567,69318.43286028007,80169.78942387344,91015.86505778233,86376.11895764538,79293.98493428944
|
||||
GB,22702.364220315787,23680.52284249295,26272.032009932474,26333.09456007779,26845.290009259897,23656.475751452526,24568.79566354481,30136.97835561064,27079.44100895935,30643.318549445074,30949.55733300973,26701.9428167181,24834.423901258084,36292.29933386541,21223.79048684261,23695.358277919488,25987.57619398849,29907.138025215598,20532.262685247148,29689.355990879158,29755.7349738537,26456.609914217806,26827.642866860373,23873.145060634775,28779.074240844395,32368.78110647752,35977.394307138864,31071.326823875082,26446.212227329706,32888.07880400224,26015.735528737063,30161.596277105604,23017.874991984525,33287.290870143,28286.810808036254,25581.658649545065,33234.01349421005,31886.616851943854,36147.13303532815,34133.94123938026,36553.158784009356,34512.41082508442,31536.090754720717,28572.314934249887,33275.60304522956,33665.001595891976,29575.879486696827,34513.91395990196,28917.71257427291,33609.176553253485,26240.381135352633,32589.192149993025,28862.78621634025,32807.4074928576,28488.125666145854,20034.93309228305,23116.389736102017,36396.90134863421,35532.192401610075,39288.48780281492,29384.81519197965,36157.931892943554,21622.405196644995,32040.743170655453,30471.91526631006,28610.855281883465,33870.42864117695,37281.10394972126,33227.13302814586,22275.90424618414,30588.672790028984,34121.358436958675,27706.739428180073,37230.134388487466,33699.78058075289,31403.25713954576,26791.643973463473,25928.83232662774,30294.933954035565,36884.703709615125,29006.326905891798,39928.21741502616,32593.01729082114
|
||||
GR,21241.640655847503,17837.993739159116,8331.553303186349,18980.73391736116,15389.589824927982,17680.338927422024,17876.06808235439,10232.387409542045,7698.396804685536,9934.422230608423,10056.853784361187,12820.948661755581,12880.09713386794,18009.367077161973,21378.182658177288,29473.438101212807,11770.791493072751,17561.986308683798,14068.336209442465,21036.22984593777,10600.651816726047,19253.94027167335,33903.71393281602,18899.558983910043,17444.093386496537,23383.013428670623,15695.74724949063,19981.88173635776,22837.72155515553,20477.278624856677,21882.21250746782,25630.65513791745,23207.036995448034,22044.998521881807,12010.599831751206,19432.667576547075,10483.216379681078,17709.119022396855,23856.615736538963,24868.152661457774,21212.948012018598,19349.21918097175,12988.230031417628,16765.76278511076,15711.921661553248,14768.388537620414,15953.652684601051,12434.694106124754,8265.22849298033,8609.897588471382,14667.4570613014,8511.641075667938,10022.119539267658,13526.966234241496,13788.166042309897,20514.65575034389,13890.655920759986,13637.35506363307,17713.539092926785,10603.937587040999,9085.188935046803,13431.534902143163,18237.093734480102,15007.784707319466,15322.74478671021,15189.508916238075,9627.363919501071,7964.610286111404,17730.814440852053,21625.83796282357,10692.331430067703,11630.957871879938,16037.311332863352,13770.795305947142,17211.823293162783,14042.921372422215,9179.230226001768,15781.789228215457,11036.807907632012,8148.5700551254695,17837.056638784255,15741.120020191216,14783.113316616393
|
||||
HR,10616.868981781858,8773.16604903597,5244.73498702366,9536.576803956808,6559.078522391053,5970.043528122038,9472.615822894124,8274.401876717038,4545.145600490753,7872.286618923516,11579.119396857217,11616.785819262946,7841.411279590863,7071.274416413621,12992.083400898755,8164.444623202054,7347.788717816701,10332.483465428491,10537.238741811467,14479.677080073134,8479.661662510043,11787.072656273116,12862.758623825672,13371.003032039336,15990.668161905827,14470.61427957732,10644.752476691014,11929.91211438134,13611.162472968235,14159.968181810045,8748.9998436583,15752.17883640428,8576.387915317433,13121.48137750286,9754.915357083264,10574.934113880938,12339.192872828058,13526.82683401755,12407.125261525374,13314.467203516846,10589.407510915647,8240.264291214513,7438.667886688274,10422.72691638502,8167.94266416981,9179.047407118169,8517.079324039581,8574.526688740114,7000.526114186264,6044.501432950472,8424.638032244015,7640.079353180473,8493.38568955205,7673.466816227631,10113.96973112034,10475.583854629525,8161.447547783003,7730.598307694147,9688.392563588315,7721.732973546704,8547.91442119075,9110.630144082634,5654.409914846469,10449.908940883637,8544.776426500835,7703.363550389989,5356.181480736791,7888.76450496884,7981.496673656482,12159.302077747214,4232.3935344941665,4890.509308451722,11184.320641158047,12936.9950624162,6984.475921997467,9245.055929521772,6446.204647314787,9728.03403894923,7468.897556955247,6117.536838412799,7342.634549696792,8157.817278196762,11474.85293662869
|
||||
HU,1086.1958142470096,978.3249526234807,212.97414604675294,340.3983517473703,430.1881201465951,194.65656630284064,473.19850543225607,261.9192709197555,196.10367582160737,215.18183697898402,455.56009955160323,446.6314758325084,756.8984035642842,450.9800559529234,596.2398492658431,618.0772176598714,433.5306920564666,626.6699838105968,736.6623236995524,901.6628598550868,955.0588428000881,1010.9577650474141,1739.1969813800204,989.7527773708749,1794.409065735425,2141.779921355298,1587.224990709883,671.8419282109866,1725.8355118081338,2716.2211930211206,1024.7764676942138,1478.4297579371664,1174.856199808959,1380.70450266654,1412.5023358393119,740.4722294240396,2077.892875467242,1382.2122922975911,1644.3319455706533,1323.8387691522125,1268.4319727220777,1050.1561979992803,938.7640185853782,701.18673897032,1176.2218406698482,1296.5341770126697,1360.4975641937087,1113.61620590335,686.0888933448485,340.9577501900905,585.7771480398817,710.4671894364953,683.5190908209308,901.0768559915952,882.6855336512624,1696.8667744778322,1072.391017559335,1091.9628754375356,1986.255314199332,1224.1891103332646,723.3105004079888,525.4091579835733,484.84230756145246,965.526984284363,1182.1048527111184,1188.8833398485922,413.588170351592,480.2721461089437,695.3047160171476,1875.1966820116616,1424.9690036241302,335.4105482008909,1504.9089491398734,1485.372787096725,1238.0161031995012,1379.3214547239281,769.0933902263423,1164.4795232335282,401.1056623458921,586.967649321741,686.5594518266915,503.19975913371877,1084.6060135452235
|
||||
IE,2938.9562959168748,3198.9169680516616,3187.5912945813584,2803.8552573374072,3777.1449651405105,4362.104175198847,3412.9484028266015,4033.7677356343165,3724.1620931207913,4522.92029724601,4646.742323576806,3498.3840852321937,2544.6578209214726,5419.077105100732,3195.826410242899,2135.0862825425293,3896.6031468108818,5166.0575828547335,3059.5430902455864,4420.523688067632,3920.565970045664,2677.658691610785,3238.0778129090736,2814.899041865502,4169.640537659651,4975.659864222032,4131.237385306254,4051.6063579500055,3501.9810380506974,4162.222738923252,3277.97066925379,4149.907266073347,3535.126191101705,5127.397347805918,3672.8392481603883,3233.4968306810615,4670.955668853978,4602.662496185422,5486.794576286672,5974.860239294209,4958.279351735843,5539.220771177308,4814.939874910363,4704.080605250908,5214.372862088697,5579.052373684467,4424.669817520398,5645.170219782959,4099.107666436778,4291.534915722901,4394.7348113611615,4474.842169491055,4574.431496810677,5809.6920444413845,4586.044007664658,4500.049573188483,4158.002042556449,5864.151573833777,5389.317421868625,5602.682945402753,3910.7950042057882,5664.313605042361,3809.963053559503,4119.424688220842,4183.3641097691625,4756.243128847813,4885.19842669336,5839.576896771334,6529.030637616166,3851.468550158534,4739.247453475783,5116.873230654843,4346.868803644192,5780.6460718128965,5283.18966576195,5253.677788447396,4182.318532051922,4579.528423701424,5332.55258145869,6160.501534866154,5064.7000821427855,7011.136828867076,6289.684272273017
|
||||
IT,111872.14392769105,83456.12455924545,65177.42783168641,92174.45776985734,93705.54545517343,102552.6760192628,102231.02170173851,123449.91092719955,75535.87312511557,87009.71778444933,172598.9057049173,100312.33974168803,109683.21050744873,113141.95504995789,104153.60992530867,105687.75931391625,108887.88674499927,120408.08444781008,120463.4718424679,176044.98820314519,110983.47718210719,108661.3888675,154479.99952596257,116866.21274767391,140970.07450678368,148795.1431459142,123467.91624840492,141856.2012294592,135145.74559391223,121025.70232844367,123064.2692081519,158675.8479818625,126408.22188494769,122698.61897984576,134048.90222163082,141351.40587318933,183551.69201916258,152672.0987165877,152463.24070715246,129214.69623803807,126406.52003570941,111266.52387106014,105493.22493839792,124930.0152276459,118811.00097800085,107475.13484215035,108705.61617459086,105553.12911266208,89696.47047566871,79022.57929325203,102862.21537887226,110384.19134436303,114736.91039530469,100806.28542965792,84803.88252804938,120635.19844583895,89284.70639754581,91327.36842742827,112272.49254052607,121214.98394688763,100240.69732658492,110327.24980482439,67667.3134977533,93496.05161894935,74054.55044130566,77775.69469931335,75858.44303177306,92083.61659880447,94760.12813659209,130298.81027721112,113068.08204604911,102862.27823880903,124544.42911673438,173919.9577739064,87247.90399947706,91232.2769509342,68511.40136893332,110593.38607511377,103785.63569256017,87869.12433673623,92697.61009264145,89877.21983741673,96543.33467044581
|
||||
LT,2330.311115607803,1278.321859711663,1329.382406669865,1835.9539018834093,1806.4585215317375,2463.9928727279507,1216.0039899784208,1896.293414052239,1974.9185999663864,2624.3584436168967,3126.90226977831,1475.6787373817235,2475.307120672793,1105.461669987713,2895.355169108127,2328.291848466701,2773.100951693534,3565.1300060634676,1726.340017569786,2441.2869150017605,2739.255286641479,3393.627534013301,1948.972938917477,1503.9304931932238,2081.2181025571476,2387.4356286402945,2953.7202011167815,2442.643404228762,1575.9037853337413,3106.077653607497,2438.6998492607095,2321.3335398002305,2455.4955733417105,2703.979150849733,2983.428649152806,1271.81865757996,2291.2165997279003,3624.3054978962264,3066.52482874976,2692.4730181815085,3077.131323187848,2583.193918114293,2346.227785803459,1679.5438811966314,3224.9829735377853,3118.546035682447,2841.2519919875017,2793.689370450914,2688.2457239306805,3241.443663108373,2559.3234295762136,1702.002348908642,2110.46892607847,2728.2093372090403,2507.383271401867,987.8894968242066,1210.6320667482842,2619.0625969612056,2041.7494156189375,1077.1024719580128,1501.0630179433206,2093.0805484121715,761.1714789679556,1438.6161577229564,2052.75406588365,780.7629955514127,1806.053023318598,1637.6952437203324,1294.75789506843,2045.7605537026564,2014.9263059368886,1513.2399919084748,1700.3251444304037,1310.6134461272318,707.068706016363,991.8607300754669,2210.5243412620116,1945.761381971759,656.9514438734058,938.7049363615082,1091.9224609932446,2359.271808740987,1316.3428075862207
|
||||
LU,410.92374814105005,160.31307322354917,118.4486719933025,98.1780404815946,219.99495836090017,162.18791666671726,138.32051761008012,209.31021249802274,188.8584966582342,199.41682878475427,418.42920407960173,402.65326898169104,245.66041042705334,140.5213247873591,281.65083355306945,239.8578158452654,369.22101543741394,483.78479198242695,296.9130979040409,276.1232951910135,459.8791399297912,360.88050800564,165.48000564979304,183.08661927563494,549.4327262552889,615.540914852196,430.5724249074097,464.9649192455573,366.43220700786026,562.8555247965114,228.93628708423907,211.2546971696525,190.68337965968735,337.11947715404034,376.86900759463407,153.06162250371963,361.9412034686643,457.17182659872975,474.4467062976349,501.35146460886807,586.4359860050876,446.87720467222556,554.4763793156474,495.34599197145104,293.22338952418016,311.9404169698979,470.26963100793296,539.1966800252237,318.1508533879876,216.80440341571304,213.96493869659722,161.79868975175182,244.05142665329072,449.452274496719,514.0163752203341,140.3179752581265,173.96942733863747,312.73695003201067,389.83220575942556,401.09422881834865,533.6829497064967,363.9324325652479,243.9448809708681,141.83825708815394,174.8785415794147,180.93947242990794,337.92060394534246,342.3576188750888,243.21751195509597,234.05807708972188,220.32797632404777,264.38928306703747,336.6463620917912,349.32621250528973,289.85643977541105,421.5786735040934,195.16848080033785,348.6723038250213,181.01976524286118,391.4073725411393,335.53788814460387,454.30136063817054,354.9932023222274
|
||||
LV,2075.0062187312337,1183.1651412244635,1388.2608755110323,1633.9975845005233,2100.728221746779,2307.307714455485,1183.142585833944,1669.1622848941527,2049.0129879285278,2215.5671267410553,2742.6556866506367,1837.8325027812643,2554.170761349389,1408.345733539928,2983.189997195677,2825.061612760662,3252.3974243255384,2886.2924715658505,1956.4363533791625,2047.5738516633846,2396.823663944175,4066.8157610189646,1865.1937720377932,1213.3814003625498,1799.0008428733133,2700.1570058485836,2685.678969351212,2489.884608424664,1643.1417843905015,2409.13500668555,2592.9272177648704,2235.207139152776,2147.227486416904,2582.289866216919,2592.1022950383003,1400.2389662856958,2360.0229699498527,4017.8529783072768,2384.614549536931,2229.7220033855633,3208.439621353169,2678.7332051326716,2668.5315414635693,1705.3124319563372,2816.1467857724074,2779.7212753206704,2548.8356765576805,2583.5815153824487,2861.3233286998366,3801.9993997175525,2885.329135114707,2265.350140707051,1837.2956559244064,2087.5337557102102,2249.8356476827344,853.5386928200795,1689.684828383291,2653.3751344813045,2109.0096432617606,1182.3316650686795,1487.9132295244858,1974.1178903388873,1027.3242775723352,1736.361793878124,1741.9204323497202,701.3946960765046,1526.0106468283361,1844.9956663852768,1722.690767934754,2194.735679264339,1757.0892689497684,1974.9007736328324,1883.6056453393867,1405.6090440523008,1355.4439688992024,1295.7921755717964,2182.9434502570357,1620.95881111662,955.2966396067089,1490.1655775988,1270.5915407733335,2073.003327028273,1565.9994997763404
|
||||
MK,6885.807602475421,5074.413420314535,2741.8766807152024,6785.078522769966,3818.8527078184798,3928.4886922987157,5350.383608273902,4779.5936944428995,3468.062322874052,3554.9350756385556,3934.258904454459,3692.0813330320566,3668.815892166788,5481.091007849558,8488.277349663611,8514.814821434962,4861.071723840239,6878.625964986481,6399.572820343104,7510.160197503697,3410.068805763449,5394.1653784487335,11852.098687247973,6238.562291909563,5957.282159254423,7239.168545674971,6704.994620967638,5343.254672711665,7690.122171456297,7543.1707758996035,6080.923842798452,9518.22452251825,7931.36999814296,7898.373553315725,5296.06496225987,7158.993856907015,5568.700579027411,6653.618095140364,7658.60790313609,7384.3372015299765,6359.355811805509,6311.4116310067075,4303.248848133382,4384.047563174607,4091.082807237865,4939.915122052565,4226.085259691547,2768.0039025432975,3428.9467644601264,2294.222990992098,4834.495252793617,3325.6396521134557,2522.690466358069,2976.927612194815,4721.490759581051,6218.919122814915,3840.4729075548557,4211.680380445357,5623.802967061423,3683.311545054556,3010.5387111938044,4030.600677147787,3746.016920616422,4369.907262961726,4375.170573617275,4171.022704527618,2702.082556773276,2500.5709190188645,4370.4076446296785,5204.859735574909,2501.3689966568136,2522.4142074268602,3898.568577966785,4120.496629723428,4145.529030725163,3980.5145191045517,2967.8383253548755,4325.530795978238,2351.320803369623,2869.298937488066,4644.825806471018,4443.426947798344,4862.542134317402
|
||||
ME,17887.124634490927,10608.377394539566,7624.148328862119,18300.25523347599,11276.651201832965,10903.50785537606,13234.193237094172,12631.716364532,11223.474429487562,12340.195715253074,11787.036249138713,18552.496612764233,11097.228684668844,11567.930061084586,19293.29710814638,13959.20571478613,13046.18440612437,18177.491235848003,15681.709335959564,19349.950981118494,11658.5954682407,15979.557715971854,21966.784229466284,16319.44299708603,17409.40677448169,19267.118980997075,14169.834731486397,15882.152400499632,19649.60512617265,23317.326436161944,15993.83236649745,16724.197023812518,13680.494674103275,16947.38155713745,13396.216553276576,17144.464963358845,16187.204710073258,20417.876685607593,22530.120155126962,16197.908505488407,14818.545420474018,12719.274460270883,9622.464989039141,13369.875886578782,13078.849292203078,14951.85122042927,13681.691957367619,12435.207850184568,11885.89235643587,9516.042262408026,16926.063160570764,13462.909968102742,10042.999218445517,11916.714437943356,15158.632522247093,19735.53511234594,11491.695345503264,14075.890065382568,13952.132515246369,11677.32833931845,13022.018989752623,13358.031703205903,11534.177624564669,17635.48411958614,14124.491791464301,12392.738752899031,9187.905148236658,11106.432128782126,13780.482580236776,19889.70854314474,7004.765863876614,8204.168680103983,13925.208337027952,12712.182323875111,8528.030231315688,13924.890575378206,9037.809310147335,13972.095665379566,11360.358971424077,10280.43536084397,13775.545442858487,18675.41168703515,16242.925847180693
|
||||
NL,99.18845393334344,83.88743307052296,56.20087850777987,37.585642699707755,99.89955066870836,85.24103376999277,67.24342284849837,62.39508342046794,36.26442939184667,68.54685542245758,132.53876435280281,105.25304624029256,97.45390390948565,59.629996943856206,126.17294913858377,100.92785922135535,110.87608266899032,166.47617616014315,115.03831975395074,102.21679880589629,222.71184206736731,164.32395798051633,88.95057195947412,70.61286255591416,116.64203846425596,229.2598570422647,176.71083656110923,163.34614915846544,135.23541074052787,153.03725726999411,84.2996330000842,75.50229060079856,87.79575328623356,149.0911400069578,185.89892961221338,65.86854604814957,122.15247506918442,163.86971747802477,177.38160465294413,173.97671792234624,210.94537197363266,138.15528852664815,157.7989701791954,164.8431327190436,156.27033317337316,144.7881412408737,172.55396177597567,195.57239229094031,113.32208112175368,57.91841778157319,69.80575559844598,81.95247611107445,154.25504072397393,213.16593963287744,185.6861094126344,50.88580789479815,88.6770750590963,180.59511129061775,175.09641999581325,134.73866646771805,175.89672487625361,170.10222446753016,112.93557838603432,69.46018341018433,89.82211025011819,57.645723008783136,122.86182387892966,128.20825436811367,82.72980960226074,90.07937846739043,113.22245968360778,109.86527486394354,113.13774281842522,111.87536788688416,113.53271254663122,140.01537175074324,68.64291161119651,101.90820271032081,52.313311323047174,116.8375292031251,120.98114114085548,164.29761287763637,131.20083352074832
|
||||
NO,210079.934684001,272449.26769557595,393598.97632244934,344434.1421584134,309228.23588460323,302048.4910019859,239994.31574717446,322040.9441520717,407801.21594778565,321823.44753004133,268338.23623559956,311516.6976002237,354741.82081862347,287750.3093395867,277336.7794878445,277384.3177020413,343804.7636848019,309909.39898200217,279870.8316011512,240316.6988310159,337135.04130569333,320967.163231472,302346.276731951,373063.16157364036,335043.0981929385,271478.1367425455,378240.8226290755,318135.4534804216,235625.6466770364,244547.82624561962,342177.033729037,330660.24479289196,373161.4848287328,318697.1789732917,345399.49658985186,314419.8189439592,230963.73709983748,236070.00307120252,312676.53469423676,195102.01076090848,231756.2941107393,196457.66930311252,255890.52889680286,207980.18388759278,250218.19793663023,221472.83820330602,212315.28230042476,222774.69138098884,210372.25250462766,210846.3448041017,177438.35447152023,214108.95671057343,190417.02324135366,175558.31404488848,199041.30532793878,154342.13931409398,175902.47007757265,215120.2640019617,216733.8944940455,261370.58822336013,212333.63219332727,174324.40313248086,166539.1770850326,202012.88317391058,238213.58919108333,170401.06338583003,217109.81457913358,185684.48673203168,210764.408869451,180452.94255978477,359959.68381729786,220133.80814962948,201815.91045998363,193256.2376798832,225141.35101977925,194502.14845672756,241700.45583039062,203049.47691663646,189440.21996991744,241270.48318453485,196628.83730256284,369452.758534526,226746.71170530186
|
||||
PL,19040.141287526196,13600.003649707409,4232.940272903036,6263.550300160282,11725.980915175824,9423.536450722735,7520.9931031649085,15128.087437533712,12302.274212909391,11903.809643162125,10323.210329129464,10102.880830361863,15243.556644277647,6316.576710839603,13844.440254769646,15125.266765937784,15697.445163802722,20547.692524530372,11483.751822471613,12736.801698643669,14242.313560202334,19975.533453959804,14197.61841088385,13385.258603233342,17555.946503015533,19526.389852009346,24990.22970093532,18554.95543612019,10610.557656768206,19356.459381427685,19657.930603206125,18732.50311338716,16842.606570419066,21220.5523273715,24157.44207211756,15607.0096942104,21677.41127186343,21298.26291533998,22732.35472759213,23096.919661671975,20539.587419825057,15690.593097829358,10514.527177352287,9757.003902443616,18214.127020951153,14743.470132504332,14160.372458977477,15574.81487531224,12340.373515759937,8851.92371521615,10791.411372967183,10330.247763133175,10795.54750377256,14738.227630388099,14374.438386354948,12177.648415014886,14450.3889852054,16473.394758962142,14491.781691174727,11650.64866730713,13724.64695911459,14468.081620316902,7425.533290488975,8039.550610683221,9468.54351850099,6656.34004885665,7842.310345436549,9593.638690519654,8828.256800239144,15874.058827778785,13537.338641985261,6174.396712827303,9509.500411581042,9436.102173346171,5360.954908688417,6309.399306468634,12402.024613286878,10602.512257049677,4725.103685514244,6963.3130148445025,9124.964758601689,11007.49968811077,9338.109838427506
|
||||
PT,17389.910347609384,7956.13238827081,8339.728858321132,2075.556471824434,3081.9400195534536,5428.965709165979,13519.093138173732,8266.183051247071,2305.611210847845,4751.414112923152,8372.129135066036,5969.31083523099,2397.6586063764958,3916.9962424030286,9654.699566273128,9603.363148222781,4163.162870337118,9179.465624121007,12131.854156488425,23406.646477036124,10635.077955993413,11029.404714084018,16475.917880350513,12087.55769685171,9804.492049893286,26178.184180984652,5669.820254013018,7559.528320921835,15405.930172416956,11163.387795923936,7088.025310785357,10191.330496756716,7128.069257230898,9335.631563569985,5236.13128329125,4572.251664471752,32605.577182903042,149323.86523586328,34294.81803755196,6061.11721308257,5836.654497517657,4843.7020037722705,7814.782411245904,9395.759000250582,14057.157961109715,8192.288977642056,7655.760207241933,9203.645337709624,7637.7450966202805,7971.812432879156,7421.37678917759,2935.2871895485287,6329.939163930326,8820.796560748415,8944.109217212255,14719.27363438586,11050.779819799696,8379.75073967695,5590.525909815882,10485.131539563748,20476.028147427794,7715.162648805314,11939.81827695821,5116.2596877306005,3047.0903835389504,9273.489011971804,5135.313604526994,3331.418010762715,6338.048693933388,12105.616460835923,7097.468638389797,3348.213951094401,11773.920694867731,13465.586888738457,4379.602415677836,11394.463621230614,3104.8789319036796,7216.150544702967,6653.765864361187,5720.580737490315,6685.493238874142,8486.079863634486,8329.192253601708
|
||||
RO,46545.50823036229,35517.718755954746,12007.97895282227,19448.903832688356,20440.973051620913,15132.394486734484,21523.767710605425,32075.68337603852,20312.088233477134,14653.654680967496,19346.344374357534,19295.50358149612,27702.617554877004,24644.67023787785,52797.882559506776,42262.7162454671,34689.01143849651,42583.74114324521,28973.147767939397,36882.64868179707,29063.471368254675,39575.626278602576,31898.858414072816,36283.98261870408,42207.50410750205,41714.957670180156,43270.313090823794,40474.54716426176,53565.91349208634,74865.02611452111,48190.11154819992,57257.26135564704,46523.80416861758,44300.83791323246,54901.1701096736,47361.27151969814,49156.09266449866,56461.30009557872,56062.45724028393,58506.511677323855,48499.732173446595,45901.64074770707,33171.12855766741,38310.49272614435,39377.41586450999,28638.803870927226,29424.553978129992,39429.14347226504,39300.73151290347,27525.04968129815,47095.77682827757,30948.90232192865,32939.14262154816,30155.99148400138,35067.04977301419,35592.25066656211,45790.67404045973,42596.77718301701,39223.35618808953,25767.93476452563,30963.38609617001,30034.908201595936,23323.05819720473,28517.276888551194,41560.85308154171,43999.15897330077,21427.19650317167,25084.131072037453,18450.764512377853,38182.39266803458,20422.517191285966,14090.243196787245,21998.55223596247,30809.187151501046,22071.90474198888,31906.454754357772,20763.073093214778,25620.747974742615,19248.368008063957,23289.011422937554,26669.846131314298,27207.74766143675,29386.08741874402
|
||||
RS,12898.821957973714,11760.375115749226,5762.823681912337,10868.645457667955,6851.647476795101,6489.091511565737,8016.427124526303,11096.059611708006,8784.092785314235,6844.044739629848,5968.673897869134,7450.873145908507,8457.218084424714,10466.134979346216,18700.932768467817,18783.264457747777,9647.157790116991,14650.396388121844,12360.14810912279,11640.673528541236,8882.446980807292,14762.619600006037,18399.930168952076,13646.806400326906,14489.119148714197,14104.804002759012,15462.34970923992,10894.228431882033,15095.088711819322,17853.281396922546,12916.46431873845,14207.379133135786,14418.834370720482,12752.5957180177,15544.588217112372,15820.904121022999,13534.055257847373,15215.146639151637,12996.626380040323,13029.919161637963,10196.668003968522,10284.440766030819,7022.693160251435,8401.249663323453,8435.803252725058,10265.915943082338,8623.546341166757,7782.429841191159,9309.259412625106,4849.32865233776,9480.40891035497,8237.330612702019,6688.9341497267815,7113.796951355988,8945.392918392941,11391.406447517316,8770.78174795334,7797.074404297926,11205.567652241964,7490.638744688466,6890.626375097134,8721.152535625733,6986.899718851523,10014.515393386338,11863.685949406314,12576.12226693591,6930.903954576986,6933.68818306879,8436.351253425808,11680.836931112251,5673.257881932308,4512.930178739657,6094.8735580904795,11616.485592765608,8423.704814584986,9582.260510301834,6280.960312130538,10196.683253538626,5869.428152205924,6637.126459584064,8223.324863109141,9163.49600405833,11744.973584261521
|
||||
SK,10526.703178382486,6581.841291454129,2779.6437301689157,6043.293021386589,8068.711762338472,4716.572547513843,4263.788112757618,7436.446538154413,5733.7942336519345,5091.94458281141,6885.47211985414,6956.591212284293,7116.928783228905,4573.269245439668,8169.130903254093,6799.092645889461,7190.199390340817,8819.311158887818,6679.080394471699,8681.76846617681,6714.688996801623,8780.135433744465,9674.052829336924,7510.89080672348,12315.672504913706,11551.288938768861,10658.095118642217,7760.467099195778,7334.701885838525,11743.053621084162,9101.455526104724,11252.254293590808,7089.2297957961755,11692.575497480175,11870.620362608648,8320.411050776946,12664.612697391287,10840.053026355938,9544.145158945727,8285.851845920657,6554.955003499832,6014.385824757616,5119.229272436076,5566.197178944401,8283.751441606055,4576.739002618681,5529.727054286627,4884.285979430572,7030.767074231632,6380.185010419688,6092.06334940043,4789.6919845964085,3988.728835990378,6100.445127127096,6174.336930810738,5839.492530664778,6739.897695678873,6073.547495791424,6239.663814901599,5985.626769812626,5946.910319392802,5350.4706690989715,2897.742723724252,3812.447551889599,5110.734824948982,5466.7571969447445,3822.1224333717755,4189.745228198809,3608.9397299109723,8925.718578619328,5520.297117401385,2338.023634704523,3634.014208205775,5079.021357670912,3789.3939110245783,3599.858750509022,4222.707040620564,3096.1701009538024,2158.8092391216674,4542.203594136759,4220.210061470592,2961.7796555712353,3705.0055429796116
|
||||
SI,8932.252857660058,6769.672897729603,3971.443731895907,6727.0196008878875,5996.060296331706,4552.96378417224,7787.375795346372,9548.071392837826,4890.204133819321,7094.028640574649,11752.798116380785,9378.602450871665,7169.30972105447,8221.267552376507,10568.142173580174,7705.119699907013,8559.440940655051,9496.2682906945,10641.418485889739,13644.09405840664,8756.865265119286,10877.994032024846,13095.473005855994,10408.222250010325,17110.767148034232,13257.44359305617,10163.420442559087,10743.809603872312,11213.570708968457,12419.028940460184,8518.188189494229,14975.496301661744,10217.449212514946,10521.007791805137,10759.209828867228,9699.803414833696,14530.647692616923,14530.715084460895,12439.143395173185,11990.046930204517,9001.647305603035,10111.423546501868,6824.172499114327,10267.968760960974,10233.709492652128,9562.175707725224,11231.941186997657,8178.692540046128,8568.526412713521,8103.883097000008,9639.895318751553,9157.43571368136,6814.50158997294,8089.913064615838,8170.645053083449,10765.044719853075,6713.170108103339,8936.8362631332,9542.147586182518,8964.110093884974,8653.114721452737,8353.75428643612,4558.589088593759,9432.405903987477,6927.92152111369,7408.760392367348,5834.871486466167,9336.912851251047,8839.494837985663,10766.693939731143,5073.937522450624,6475.598951785893,9482.419717110955,13414.771212079502,5906.5584945059145,9942.151265372298,7696.092255607837,9521.835825354157,8476.124990692872,6361.010018809483,7504.908031281684,6349.444363482254,12494.86342976942
|
||||
SE,97729.33612275522,104893.13349064675,152164.30605691054,147567.81837152236,172633.569885874,142454.06079467706,109264.12507808255,145966.80578917114,158733.59492028368,161670.6171803483,134822.12256461562,136958.6213484757,175679.6273876132,133962.36617697845,126787.36233921513,130861.49290945902,151133.2982760823,140247.52694114187,130508.52271890236,137421.63579450184,164132.0529341604,142467.57286064525,135886.87305352974,163762.3962091317,161128.38161511483,148196.28633931337,167892.87677861055,132017.696130452,105953.99289036485,119407.22923207263,147139.6039546916,151309.55114963037,164893.61323375857,137608.18237925606,149284.78771947857,108749.15747050248,131859.531763871,117290.48017785426,131751.97960784068,111117.27409251402,110551.615114603,81550.1135393761,114677.940027603,102356.46697333359,128977.80283219383,94483.98267503879,114937.96457142044,93256.91327642264,96751.29026217168,91074.34139788701,87931.96567208324,96560.83822983531,116746.94389793588,64626.25905820224,75156.91767736348,51489.37512699482,74729.26978432719,134673.01513808029,110440.65771030058,149033.9827088587,143576.83069821307,93040.02354987273,64075.160200006496,102493.08906248632,106664.82884715112,90351.43771324471,94801.81222609026,92445.93458012305,88919.20770998915,108111.72872590217,127440.80298482065,124444.06618883039,98961.91573013023,87913.90602563386,115956.48217115598,95526.84265190935,103459.08985036932,86058.90377748368,99040.9103276256,110493.22773914765,94182.7249029169,169752.66741900297,99896.09236620825
|
|
45
data/gr-e-11.03.02.01.01-cc.csv
Normal file
45
data/gr-e-11.03.02.01.01-cc.csv
Normal file
@ -0,0 +1,45 @@
|
||||
year,passenger cars,passenger vehicles,goods vehicles,agricultural vehicles,industrial vehicles,motorcycles,mopeds (incl. fast e-bikes)¹
|
||||
1980,2246752,11087,169402,137685,0,137340,671473
|
||||
1981,2394455,11122,167846,151238,0,152508,687517
|
||||
1982,2473318,11341,178313,156631,0,178398,656102
|
||||
1983,2520610,11255,189920,165332,0,187090,674710
|
||||
1984,2552132,10853,192708,164078,0,199302,647391
|
||||
1985,2617164,10771,200537,175161,0,217974,644175
|
||||
1986,2678911,10800,207014,183689,0,225676,627523
|
||||
1987,2732720,11027,217750,189984,0,240102,613093
|
||||
1988,2819548,26869,236649,152693,43519,219987,581270
|
||||
1989,2895842,29270,241488,157867,44326,261715,551808
|
||||
1990,2985397,31180,252136,162932,45920,299264,464609
|
||||
1991,3057798,32968,257646,165571,46938,319779,418251
|
||||
1992,3091228,34136,256611,169277,47281,336448,381236
|
||||
1993,3109523,34852,253461,171414,47229,348159,358732
|
||||
1994,3165042,35676,256285,172300,47373,357252,336367
|
||||
1995,3229176,36517,262352,174026,47693,370700,317783
|
||||
1996,3268093,37662,263020,174247,47622,381986,301009
|
||||
1997,3323455,38508,264200,175689,47743,410750,280467
|
||||
1998,3383307,39012,267380,176712,47754,435042,265422
|
||||
1999,3467311,39692,273954,177148,48265,464357,246018
|
||||
2000,3545247,40260,278518,177963,48949,493781,218932
|
||||
2001,3629713,41342,285246,179321,49549,521390,199033
|
||||
2002,3700951,42401,290142,180063,50227,545132,186811
|
||||
2003,3753890,43629,292329,180295,50795,567358,173486
|
||||
2004,3811351,44784,298193,180898,50957,583010,165000
|
||||
2005,3863807,45785,307264,182093,51860,592194,156095
|
||||
2006,3899917,46445,314020,185450,53437,608648,150563
|
||||
2007,3955787,48026,324153,184062,55149,619166,144704
|
||||
2008,3989811,48536,326232,188218,55808,636540,141549
|
||||
2009,4009602,50675,327808,185902,56533,642777,139220
|
||||
2010,4075825,52751,335200,186485,58492,651202,139548
|
||||
2011,4163003,55422,348553,187130,60324,665870,142834
|
||||
2012,4254725,58278,361926,188358,62219,679822,145984
|
||||
2013,4320885,60151,371361,189305,63950,687990,147247
|
||||
2014,4384490,62436,382281,190095,65563,699219,152962
|
||||
2015,4458069,65720,393598,191132,67101,710022,161292
|
||||
2016,4524029,69676,405566,192139,68721,720381,176030
|
||||
2017,4570823,73814,416501,192858,70113,729149,188053
|
||||
2018,4602688,77985,428808,193283,71683,739344,201423
|
||||
2019,4623952,83054,440795,193834,74085,744542,211480
|
||||
2020,4658335,88293,452186,195082,75659,771586,229421
|
||||
2021,4709366,97805,466857,196530,77672,791323,244572
|
||||
2022,4721280,105158,475714,196942,79691,789794,257753
|
||||
2023,4760948,114299,485303,197678,81241,805653,
|
|
@ -26,3 +26,16 @@ NordBalt,Klaipeda (LT),Nybro (SE),450,,700,built,,https://en.wikipedia.org/wiki/
|
||||
Estlink 1,Harku (EE),Espoo (FI),105,,350,built,,https://en.wikipedia.org/wiki/Estlink,24.560278,59.384722,24.551667,60.203889
|
||||
Greenlink,Waterford (IE),Pembroke (UK),,180,500,under construction,,https://tyndp2022-project-platform.azurewebsites.net/projectsheets/transmission/286,-6.987,52.260,-4.986,51.686
|
||||
Celtic Interconnector,Aghada (IE),La Martyre (FR),,572,700,under consideration,,https://tyndp2022-project-platform.azurewebsites.net/projectsheets/transmission/107,-8.16642,51.91413,-4.184,48.459
|
||||
GiLA,Bordeaux (FR),Nantes (FR),,312,640,under consideration,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,-1.209,46.901,-0.576,44.960
|
||||
HG North Tyrrhenian Corridor,Milan (IT),Viterbo (IT),,500,2000,in permitting,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,9.409,45.553,12.015,42.244
|
||||
HG Adriatic Corridor,Ferrara (IT),Foggia (IT),,582,2000,in permitting,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,11.661,44.855,15.550,41.513
|
||||
SAPEI 2,Fioumesanto (IT),Montalto (IT),,390,1000,in permitting,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,8.283,40.790,11.602,42.331
|
||||
HG Ionian-Tyrrhenian Corridor,Rossano (IT),Latina (IT),,496,2000,in permitting,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,16.629,39.568,12.779,41.430
|
||||
HG Ionian-Tyrrhenian Corridor 2,Rossano (IT),Catania (IT),,330,2000,in permitting,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,16.629,39.568,15.049,37.408
|
||||
Germany-UK Hybrid Interconnector,Fetteresso (UK),Emden (DE),800,,2000,under consideration,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,-2.383,56.991,7.207,53.376
|
||||
NU-Link Interconnector,Hornsea (UK),Moerdijk (NL),,460,1200,under consideration,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,-0.261,53.655,4.586,51.661
|
||||
APOLLO-LINK,La Farga (ES),La Spezia (IT),,725,2091,under consideration,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,2.883,42.062,9.884,44.107
|
||||
Baltic WindConnector (BWC),Lubmin (DE),Lihula (EE),,960,2000,under consideration,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,13.686,54.139,23.818,58.675
|
||||
High-Voltage Direct Current Interconnector Project Romania-Hungary,Constanta (RO),Albertirsa (HU),,930,2500,under consideration,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,28.588,44.201,19.584,47.224
|
||||
Rhine-Main-Link,Ovelgönne (DE),Marxheim (DE),,433,4000,in permitting,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,8.379,53.315,8.435,50.078
|
||||
Green Aegean Interconnector,Arachthos (GR),Ottenhofen (DE),,600,3000,under consideration,,https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx,20.967,39.185,11.868,48.207
|
||||
|
|
@ -1,6 +1,6 @@
|
||||
,Unit,Values,Description
|
||||
year,--,YYYY; e.g. '2030',Year for which to retrieve cost assumptions of ``resources/costs.csv``.
|
||||
version,--,vX.X.X; e.g. 'v0.5.0',Version of ``technology-data`` repository to use.
|
||||
version,--,vX.X.X or <user>/<repo>/vX.X.X; e.g. 'v0.5.0',Version of ``technology-data`` repository to use. If this string is of the form <user>/<repo>/<version> then costs are instead retrieved from ``github.com/<user>/<repo>`` at the <version> tag.
|
||||
rooftop_share,--,float,Share of rooftop PV when calculating capital cost of solar (joint rooftop and utility-scale PV).
|
||||
social_discountrate,p.u.,float,Social discount rate to compare costs in different investment periods. 0.02 corresponds to a social discount rate of 2%.
|
||||
fill_values,--,float,Default values if not specified for a technology in ``resources/costs.csv``.
|
||||
|
|
@ -10,3 +10,4 @@ retrieve_cutout,bool,"{true, false}","Switch to enable the retrieval of cutouts
|
||||
build_natura_raster,bool,"{true, false}","Switch to enable the creation of the raster ``natura.tiff`` via the rule :mod:`build_natura_raster`."
|
||||
retrieve_natura_raster,bool,"{true, false}","Switch to enable the retrieval of ``natura.tiff`` from zenodo with :mod:`retrieve_natura_raster`."
|
||||
custom_busmap,bool,"{true, false}","Switch to enable the use of custom busmaps in rule :mod:`cluster_network`. If activated the rule looks for provided busmaps at ``data/custom_busmap_elec_s{simpl}_{clusters}.csv`` which should have the same format as ``resources/busmap_elec_s{simpl}_{clusters}.csv``, i.e. the index should contain the buses of ``networks/elec_s{simpl}.nc``."
|
||||
drop_leap_day,bool,"{true, false}","Switch to drop February 29 from all time-dependent data in leap years"
|
||||
|
|
@ -1,8 +1,11 @@
|
||||
,Unit,Values,Description
|
||||
cutout,--,Must be 'europe-2013-era5',Specifies the directory where the relevant weather data ist stored.
|
||||
carriers,--,"Any subset of {'ror', 'PHS', 'hydro'}","Specifies the types of hydro power plants to build per-unit availability time series for. 'ror' stands for run-of-river plants, 'PHS' represents pumped-hydro storage, and 'hydro' stands for hydroelectric dams."
|
||||
PHS_max_hours,h,float,Maximum state of charge capacity of the pumped-hydro storage (PHS) in terms of hours at full output capacity ``p_nom``. Cf. `PyPSA documentation <https://pypsa.readthedocs.io/en/latest/components.html#storage-unit>`_.
|
||||
hydro_max_hours,h,"Any of {float, 'energy_capacity_totals_by_country', 'estimate_by_large_installations'}",Maximum state of charge capacity of the pumped-hydro storage (PHS) in terms of hours at full output capacity ``p_nom`` or heuristically determined. Cf. `PyPSA documentation <https://pypsa.readthedocs.io/en/latest/components.html#storage-unit>`_.
|
||||
flatten_dispatch,bool,"{true, false}",Consider an upper limit for the hydro dispatch. The limit is given by the average capacity factor plus the buffer given in ``flatten_dispatch_buffer``
|
||||
flatten_dispatch_buffer,--,float,"If ``flatten_dispatch`` is true, specify the value added above the average capacity factor."
|
||||
clip_min_inflow,MW,float,"To avoid too small values in the inflow time series, values below this threshold are set to zero."
|
||||
,Unit,Values,Description
|
||||
cutout,--,Must be 'europe-2013-era5',Specifies the directory where the relevant weather data ist stored.
|
||||
carriers,--,"Any subset of {'ror', 'PHS', 'hydro'}","Specifies the types of hydro power plants to build per-unit availability time series for. 'ror' stands for run-of-river plants, 'PHS' represents pumped-hydro storage, and 'hydro' stands for hydroelectric dams."
|
||||
PHS_max_hours,h,float,Maximum state of charge capacity of the pumped-hydro storage (PHS) in terms of hours at full output capacity ``p_nom``. Cf. `PyPSA documentation <https://pypsa.readthedocs.io/en/latest/components.html#storage-unit>`_.
|
||||
hydro_max_hours,h,"Any of {float, 'energy_capacity_totals_by_country', 'estimate_by_large_installations'}",Maximum state of charge capacity of the pumped-hydro storage (PHS) in terms of hours at full output capacity ``p_nom`` or heuristically determined. Cf. `PyPSA documentation <https://pypsa.readthedocs.io/en/latest/components.html#storage-unit>`_.
|
||||
flatten_dispatch,bool,"{true, false}",Consider an upper limit for the hydro dispatch. The limit is given by the average capacity factor plus the buffer given in ``flatten_dispatch_buffer``
|
||||
flatten_dispatch_buffer,--,float,"If ``flatten_dispatch`` is true, specify the value added above the average capacity factor."
|
||||
clip_min_inflow,MW,float,"To avoid too small values in the inflow time series, values below this threshold are set to zero."
|
||||
eia_norm_year,--,"Year in EIA hydro generation dataset; or False to disable","To specify a specific year by which hydro inflow is normed that deviates from the snapshots' year"
|
||||
eia_correct_by_capacity,--,boolean,"Correct EIA annual hydro generation data by installed capacity."
|
||||
eia_approximate_missing,--,boolean,"Approximate hydro generation data for years not included in EIA dataset through a regression based on annual runoff."
|
||||
|
|
@ -3,3 +3,5 @@ interpolate_limit,hours,integer,"Maximum gap size (consecutive nans) which inter
|
||||
time_shift_for_large_gaps,string,string,"Periods which are used for copying time-slices in order to fill large gaps of nans. Have to be valid ``pandas`` period strings."
|
||||
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_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,12 +1,12 @@
|
||||
,Unit,Values,Description
|
||||
version,--,0.x.x,Version of PyPSA-Eur. Descriptive only.
|
||||
tutorial,bool,"{true, false}",Switch to retrieve the tutorial data set instead of the full data set.
|
||||
logging,,,
|
||||
-- level,--,"Any of {'INFO', 'WARNING', 'ERROR'}","Restrict console outputs to all infos, warning or errors only"
|
||||
-- format,--,,Custom format for log messages. See `LogRecord <https://docs.python.org/3/library/logging.html#logging.LogRecord>`_ attributes.
|
||||
private,,,
|
||||
-- keys,,,
|
||||
-- -- entsoe_api,--,,Optionally specify the ENTSO-E API key. See the guidelines to get `ENTSO-E API key <https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html>`_
|
||||
remote,,,
|
||||
-- ssh,--,,Optionally specify the SSH of a remote cluster to be synchronized.
|
||||
-- path,--,,Optionally specify the file path within the remote cluster to be synchronized.
|
||||
,Unit,Values,Description
|
||||
version,--,0.x.x,"Version of PyPSA-Eur. Descriptive only."
|
||||
tutorial,bool,"{true, false}","Switch to retrieve the tutorial data set instead of the full data set."
|
||||
logging,,,
|
||||
-- level,--,"Any of {'INFO', 'WARNING', 'ERROR'}","Restrict console outputs to all infos, warning or errors only"
|
||||
-- format,--,"","Custom format for log messages. See `LogRecord <https://docs.python.org/3/library/logging.html#logging.LogRecord>`_ attributes."
|
||||
private,,,
|
||||
-- keys,,,
|
||||
-- -- entsoe_api,--,,Optionally specify the ENTSO-E API key. See the guidelines to get `ENTSO-E API key <https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html>`_
|
||||
remote,,,
|
||||
-- ssh,--,,Optionally specify the SSH of a remote cluster to be synchronized.
|
||||
-- path,--,,Optionally specify the file path within the remote cluster to be synchronized.
|
||||
|
|
@ -11,11 +11,66 @@ Upcoming Release
|
||||
================
|
||||
|
||||
|
||||
|
||||
* fix bug in land transport for temperature correction of ICEs and fuel cell cars
|
||||
|
||||
* restructure land transport, demand is now attached to one single node, the
|
||||
different car types (ICE, EV, fuel cell) are modelled as links
|
||||
|
||||
* Allow the use of more solvers in clustering (Xpress, COPT, Gurobi, CPLEX, SCIP, MOSEK).
|
||||
|
||||
* 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>`_.
|
||||
|
||||
* Removed rule ``copy_config``. Instead, a config file is created for each
|
||||
network output of the ``solve_*`` rules, with the same content as ``n.meta``.
|
||||
|
||||
* Added new HVDC transmission projects from `TYNDP 2024 draft projects
|
||||
<https://tyndp.entsoe.eu/news/176-pan-european-electricity-transmission-projects-and-33-storage-projects-will-be-assessed-in-tyndp-2024>`_.
|
||||
|
||||
* 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``
|
||||
@ -39,6 +94,8 @@ different car types (ICE, EV, fuel cell) are modelled as links
|
||||
|
||||
* Upgrade default techno-economic assumptions to ``technology-data`` v0.8.1.
|
||||
|
||||
* Add possibility to download cost data from custom fork of ``technology-data``.
|
||||
|
||||
* Linearly interpolate missing investment periods in year-dependent
|
||||
configuration options.
|
||||
|
||||
@ -112,6 +169,10 @@ different car types (ICE, EV, fuel cell) are modelled as links
|
||||
|
||||
* Adapt the disabling of transmission expansion in myopic foresight optimisations when limit is already reached to also handle cost limits.
|
||||
|
||||
* Fix duplicated years in `add_land_use_constraint_m`.
|
||||
|
||||
* Fix type error with `m` option in `cluster_network`.
|
||||
|
||||
PyPSA-Eur 0.10.0 (19th February 2024)
|
||||
=====================================
|
||||
|
||||
|
@ -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``
|
||||
==============================================================================
|
||||
|
||||
@ -171,11 +176,6 @@ Rule ``cluster_gas_network``
|
||||
|
||||
.. automodule:: cluster_gas_network
|
||||
|
||||
Rule ``copy_config``
|
||||
==============================================================================
|
||||
|
||||
.. automodule:: copy_config
|
||||
|
||||
Rule ``prepare_sector_network``
|
||||
==============================================================================
|
||||
|
||||
|
@ -21,10 +21,16 @@ if config["enable"].get("prepare_links_p_nom", False):
|
||||
rule build_electricity_demand:
|
||||
params:
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
countries=config_provider("countries"),
|
||||
load=config_provider("load"),
|
||||
input:
|
||||
ancient("data/electricity_demand_raw.csv"),
|
||||
reported=ancient("data/electricity_demand_raw.csv"),
|
||||
synthetic=lambda w: (
|
||||
ancient("data/load_synthetic_raw.csv")
|
||||
if config_provider("load", "supplement_synthetic")(w)
|
||||
else []
|
||||
),
|
||||
output:
|
||||
resources("electricity_demand.csv"),
|
||||
log:
|
||||
@ -63,6 +69,7 @@ rule base_network:
|
||||
params:
|
||||
countries=config_provider("countries"),
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
lines=config_provider("lines"),
|
||||
links=config_provider("links"),
|
||||
transformers=config_provider("transformers"),
|
||||
@ -170,9 +177,10 @@ if config["enable"].get("build_natura_raster", False):
|
||||
rule build_natura_raster:
|
||||
input:
|
||||
natura=ancient("data/bundle/natura/Natura2000_end2015.shp"),
|
||||
cutouts=lambda w: expand(
|
||||
"cutouts/" + CDIR + "{cutouts}.nc", **config_provider("atlite")(w)
|
||||
),
|
||||
cutout=lambda w: "cutouts/"
|
||||
+ CDIR
|
||||
+ config_provider("atlite", "default_cutout")(w)
|
||||
+ ".nc",
|
||||
output:
|
||||
resources("natura.tiff"),
|
||||
resources:
|
||||
@ -188,13 +196,10 @@ if config["enable"].get("build_natura_raster", False):
|
||||
rule build_ship_raster:
|
||||
input:
|
||||
ship_density="data/shipdensity_global.zip",
|
||||
cutouts=lambda w: expand(
|
||||
"cutouts/" + CDIR + "{cutout}.nc",
|
||||
cutout=[
|
||||
config_provider("renewable", k, "cutout")(w)
|
||||
for k in config_provider("electricity", "renewable_carriers")(w)
|
||||
],
|
||||
),
|
||||
cutout=lambda w: "cutouts/"
|
||||
+ CDIR
|
||||
+ config_provider("atlite", "default_cutout")(w)
|
||||
+ ".nc",
|
||||
output:
|
||||
resources("shipdensity_raster.tif"),
|
||||
log:
|
||||
@ -264,6 +269,7 @@ def input_ua_md_availability_matrix(w):
|
||||
rule build_renewable_profiles:
|
||||
params:
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
renewable=config_provider("renewable"),
|
||||
input:
|
||||
unpack(input_ua_md_availability_matrix),
|
||||
@ -341,15 +347,20 @@ rule build_hydro_profile:
|
||||
params:
|
||||
hydro=config_provider("renewable", "hydro"),
|
||||
countries=config_provider("countries"),
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
input:
|
||||
country_shapes=resources("country_shapes.geojson"),
|
||||
eia_hydro_generation="data/eia_hydro_annual_generation.csv",
|
||||
eia_hydro_capacity="data/eia_hydro_annual_capacity.csv",
|
||||
era5_runoff="data/era5-annual-runoff-per-country.csv",
|
||||
cutout=lambda w: f"cutouts/"
|
||||
+ CDIR
|
||||
+ config_provider("renewable", "hydro", "cutout")(w)
|
||||
+ ".nc",
|
||||
output:
|
||||
resources("profile_hydro.nc"),
|
||||
profile=resources("profile_hydro.nc"),
|
||||
eia_hydro=resources("eia_hydro_stats.csv"),
|
||||
log:
|
||||
logs("build_hydro_profile.log"),
|
||||
resources:
|
||||
@ -363,6 +374,7 @@ rule build_hydro_profile:
|
||||
rule build_line_rating:
|
||||
params:
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
input:
|
||||
base_network=resources("networks/base.nc"),
|
||||
cutout=lambda w: "cutouts/"
|
||||
@ -406,10 +418,12 @@ rule add_electricity:
|
||||
length_factor=config_provider("lines", "length_factor"),
|
||||
scaling_factor=config_provider("load", "scaling_factor"),
|
||||
countries=config_provider("countries"),
|
||||
snapshots=config_provider("snapshots"),
|
||||
renewable=config_provider("renewable"),
|
||||
electricity=config_provider("electricity"),
|
||||
conventional=config_provider("conventional"),
|
||||
costs=config_provider("costs"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
input:
|
||||
unpack(input_profile_tech),
|
||||
unpack(input_conventional),
|
||||
@ -574,6 +588,7 @@ rule prepare_network:
|
||||
costs=config_provider("costs"),
|
||||
adjustments=config_provider("adjustments", "electricity"),
|
||||
autarky=config_provider("electricity", "autarky", default={}),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
input:
|
||||
resources("networks/elec_s{simpl}_{clusters}_ec.nc"),
|
||||
tech_costs=lambda w: resources(
|
||||
|
@ -133,16 +133,27 @@ rule cluster_gas_network:
|
||||
"../scripts/cluster_gas_network.py"
|
||||
|
||||
|
||||
def heat_demand_cutout(wildcards):
|
||||
c = config_provider("sector", "heat_demand_cutout")(wildcards)
|
||||
if c == "default":
|
||||
return (
|
||||
"cutouts/"
|
||||
+ CDIR
|
||||
+ config_provider("atlite", "default_cutout")(wildcards)
|
||||
+ ".nc"
|
||||
)
|
||||
else:
|
||||
return "cutouts/" + CDIR + c + ".nc"
|
||||
|
||||
|
||||
rule build_daily_heat_demand:
|
||||
params:
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
input:
|
||||
pop_layout=resources("pop_layout_{scope}.nc"),
|
||||
regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"),
|
||||
cutout=lambda w: "cutouts/"
|
||||
+ CDIR
|
||||
+ config_provider("atlite", "default_cutout")(w)
|
||||
+ ".nc",
|
||||
cutout=heat_demand_cutout,
|
||||
output:
|
||||
heat_demand=resources("daily_heat_demand_{scope}_elec_s{simpl}_{clusters}.nc"),
|
||||
resources:
|
||||
@ -161,6 +172,7 @@ rule build_daily_heat_demand:
|
||||
rule build_hourly_heat_demand:
|
||||
params:
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
input:
|
||||
heat_profile="data/heat_load_profile_BDEW.csv",
|
||||
heat_demand=resources("daily_heat_demand_{scope}_elec_s{simpl}_{clusters}.nc"),
|
||||
@ -182,13 +194,11 @@ rule build_hourly_heat_demand:
|
||||
rule build_temperature_profiles:
|
||||
params:
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
input:
|
||||
pop_layout=resources("pop_layout_{scope}.nc"),
|
||||
regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"),
|
||||
cutout=lambda w: "cutouts/"
|
||||
+ CDIR
|
||||
+ config_provider("atlite", "default_cutout")(w)
|
||||
+ ".nc",
|
||||
cutout=heat_demand_cutout,
|
||||
output:
|
||||
temp_soil=resources("temp_soil_{scope}_elec_s{simpl}_{clusters}.nc"),
|
||||
temp_air=resources("temp_air_{scope}_elec_s{simpl}_{clusters}.nc"),
|
||||
@ -234,17 +244,28 @@ rule build_cop_profiles:
|
||||
"../scripts/build_cop_profiles.py"
|
||||
|
||||
|
||||
def solar_thermal_cutout(wildcards):
|
||||
c = config_provider("solar_thermal", "cutout")(wildcards)
|
||||
if c == "default":
|
||||
return (
|
||||
"cutouts/"
|
||||
+ CDIR
|
||||
+ config_provider("atlite", "default_cutout")(wildcards)
|
||||
+ ".nc"
|
||||
)
|
||||
else:
|
||||
return "cutouts/" + CDIR + c + ".nc"
|
||||
|
||||
|
||||
rule build_solar_thermal_profiles:
|
||||
params:
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
solar_thermal=config_provider("solar_thermal"),
|
||||
input:
|
||||
pop_layout=resources("pop_layout_{scope}.nc"),
|
||||
regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"),
|
||||
cutout=lambda w: "cutouts/"
|
||||
+ CDIR
|
||||
+ config_provider("atlite", "default_cutout")(w)
|
||||
+ ".nc",
|
||||
cutout=solar_thermal_cutout,
|
||||
output:
|
||||
solar_thermal=resources("solar_thermal_{scope}_elec_s{simpl}_{clusters}.nc"),
|
||||
resources:
|
||||
@ -268,6 +289,7 @@ rule build_energy_totals:
|
||||
nuts3_shapes=resources("nuts3_shapes.geojson"),
|
||||
co2="data/bundle-sector/eea/UNFCCC_v23.csv",
|
||||
swiss="data/switzerland-new_format-all_years.csv",
|
||||
swiss_transport="data/gr-e-11.03.02.01.01-cc.csv",
|
||||
idees="data/bundle-sector/jrc-idees-2015",
|
||||
district_heat_share="data/district_heat_share.csv",
|
||||
eurostat="data/eurostat/eurostat-energy_balances-april_2023_edition",
|
||||
@ -289,6 +311,25 @@ rule build_energy_totals:
|
||||
"../scripts/build_energy_totals.py"
|
||||
|
||||
|
||||
rule build_heat_totals:
|
||||
input:
|
||||
hdd="data/era5-annual-HDD-per-country.csv",
|
||||
energy_totals=resources("energy_totals.csv"),
|
||||
output:
|
||||
heat_totals=resources("heat_totals.csv"),
|
||||
threads: 1
|
||||
resources:
|
||||
mem_mb=2000,
|
||||
log:
|
||||
logs("build_heat_totals.log"),
|
||||
benchmark:
|
||||
benchmarks("build_heat_totals")
|
||||
conda:
|
||||
"../envs/environment.yaml"
|
||||
script:
|
||||
"../scripts/build_heat_totals.py"
|
||||
|
||||
|
||||
rule build_biomass_potentials:
|
||||
params:
|
||||
biomass=config_provider("biomass"),
|
||||
@ -688,16 +729,18 @@ rule build_retro_cost:
|
||||
|
||||
|
||||
rule build_population_weighted_energy_totals:
|
||||
params:
|
||||
snapshots=config_provider("snapshots"),
|
||||
input:
|
||||
energy_totals=resources("energy_totals.csv"),
|
||||
energy_totals=resources("{kind}_totals.csv"),
|
||||
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
|
||||
output:
|
||||
resources("pop_weighted_energy_totals_s{simpl}_{clusters}.csv"),
|
||||
resources("pop_weighted_{kind}_totals_s{simpl}_{clusters}.csv"),
|
||||
threads: 1
|
||||
resources:
|
||||
mem_mb=2000,
|
||||
log:
|
||||
logs("build_population_weighted_energy_totals_s{simpl}_{clusters}.log"),
|
||||
logs("build_population_weighted_{kind}_totals_s{simpl}_{clusters}.log"),
|
||||
conda:
|
||||
"../envs/environment.yaml"
|
||||
script:
|
||||
@ -710,6 +753,8 @@ rule build_shipping_demand:
|
||||
scope=resources("europe_shape.geojson"),
|
||||
regions=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"),
|
||||
demand=resources("energy_totals.csv"),
|
||||
params:
|
||||
energy_totals_year=config_provider("energy", "energy_totals_year"),
|
||||
output:
|
||||
resources("shipping_demand_s{simpl}_{clusters}.csv"),
|
||||
threads: 1
|
||||
@ -726,7 +771,9 @@ rule build_shipping_demand:
|
||||
rule build_transport_demand:
|
||||
params:
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
sector=config_provider("sector"),
|
||||
energy_totals_year=config_provider("energy", "energy_totals_year"),
|
||||
input:
|
||||
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
|
||||
pop_weighted_energy_totals=resources(
|
||||
@ -755,6 +802,7 @@ rule build_transport_demand:
|
||||
rule build_district_heat_share:
|
||||
params:
|
||||
sector=config_provider("sector"),
|
||||
energy_totals_year=config_provider("energy", "energy_totals_year"),
|
||||
input:
|
||||
district_heat_share=resources("district_heat_share.csv"),
|
||||
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
|
||||
@ -819,6 +867,7 @@ def input_profile_offwind(w):
|
||||
rule prepare_sector_network:
|
||||
params:
|
||||
time_resolution=config_provider("clustering", "temporal", "resolution_sector"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
co2_budget=config_provider("co2_budget"),
|
||||
conventional_carriers=config_provider(
|
||||
"existing_capacities", "conventional_carriers"
|
||||
@ -863,11 +912,13 @@ rule prepare_sector_network:
|
||||
else []
|
||||
),
|
||||
network=resources("networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc"),
|
||||
energy_totals_name=resources("energy_totals.csv"),
|
||||
eurostat="data/eurostat/eurostat-energy_balances-april_2023_edition",
|
||||
pop_weighted_energy_totals=resources(
|
||||
"pop_weighted_energy_totals_s{simpl}_{clusters}.csv"
|
||||
),
|
||||
pop_weighted_heat_totals=resources(
|
||||
"pop_weighted_heat_totals_s{simpl}_{clusters}.csv"
|
||||
),
|
||||
shipping_demand=resources("shipping_demand_s{simpl}_{clusters}.csv"),
|
||||
transport_demand=resources("transport_demand_s{simpl}_{clusters}.csv"),
|
||||
transport_data=resources("transport_data_s{simpl}_{clusters}.csv"),
|
||||
|
@ -3,10 +3,6 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
||||
localrules:
|
||||
copy_config,
|
||||
|
||||
|
||||
if config["foresight"] != "perfect":
|
||||
|
||||
rule plot_power_network_clustered:
|
||||
@ -48,7 +44,7 @@ if config["foresight"] != "perfect":
|
||||
benchmark:
|
||||
(
|
||||
RESULTS
|
||||
+ "benchmarksplot_power_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}"
|
||||
+ "benchmarks/plot_power_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}"
|
||||
)
|
||||
conda:
|
||||
"../envs/environment.yaml"
|
||||
@ -137,25 +133,12 @@ if config["foresight"] == "perfect":
|
||||
"../scripts/plot_power_network_perfect.py"
|
||||
|
||||
|
||||
rule copy_config:
|
||||
params:
|
||||
RDIR=RDIR,
|
||||
output:
|
||||
RESULTS + "config.yaml",
|
||||
threads: 1
|
||||
resources:
|
||||
mem_mb=1000,
|
||||
conda:
|
||||
"../envs/environment.yaml"
|
||||
script:
|
||||
"../scripts/copy_config.py"
|
||||
|
||||
|
||||
rule make_summary:
|
||||
params:
|
||||
foresight=config_provider("foresight"),
|
||||
costs=config_provider("costs"),
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
scenario=config_provider("scenario"),
|
||||
RDIR=RDIR,
|
||||
input:
|
||||
|
@ -50,7 +50,7 @@ if config["enable"].get("retrieve_irena"):
|
||||
onwind="data/existing_infrastructure/onwind_capacity_IRENA.csv",
|
||||
solar="data/existing_infrastructure/solar_capacity_IRENA.csv",
|
||||
log:
|
||||
logs("retrieve_irena.log"),
|
||||
"logs/retrieve_irena.log",
|
||||
resources:
|
||||
mem_mb=1000,
|
||||
retries: 2
|
||||
@ -115,7 +115,7 @@ if config["enable"]["retrieve"] and config["enable"].get(
|
||||
mem_mb=5000,
|
||||
retries: 2
|
||||
run:
|
||||
move(input[0], output[0])
|
||||
copyfile(input[0], output[0])
|
||||
validate_checksum(output[0], input[0])
|
||||
|
||||
|
||||
@ -194,6 +194,24 @@ if config["enable"]["retrieve"]:
|
||||
"../scripts/retrieve_electricity_demand.py"
|
||||
|
||||
|
||||
if config["enable"]["retrieve"]:
|
||||
|
||||
rule retrieve_synthetic_electricity_demand:
|
||||
input:
|
||||
storage(
|
||||
"https://zenodo.org/records/10820928/files/demand_hourly.csv",
|
||||
),
|
||||
output:
|
||||
"data/load_synthetic_raw.csv",
|
||||
log:
|
||||
"logs/retrieve_synthetic_electricity_demand.log",
|
||||
resources:
|
||||
mem_mb=5000,
|
||||
retries: 2
|
||||
run:
|
||||
move(input[0], output[0])
|
||||
|
||||
|
||||
if config["enable"]["retrieve"]:
|
||||
|
||||
rule retrieve_ship_raster:
|
||||
|
@ -14,9 +14,9 @@ rule solve_network:
|
||||
custom_extra_functionality=input_custom_extra_functionality,
|
||||
input:
|
||||
network=resources("networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc"),
|
||||
config=RESULTS + "config.yaml",
|
||||
output:
|
||||
network=RESULTS + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc",
|
||||
config=RESULTS + "configs/config.elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.yaml",
|
||||
log:
|
||||
solver=normpath(
|
||||
RESULTS
|
||||
@ -25,13 +25,13 @@ rule solve_network:
|
||||
python=RESULTS
|
||||
+ "logs/solve_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}_python.log",
|
||||
benchmark:
|
||||
RESULTS + "benchmarks/solve_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}"
|
||||
(RESULTS + "benchmarks/solve_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}")
|
||||
threads: solver_threads
|
||||
resources:
|
||||
mem_mb=memory,
|
||||
runtime=config_provider("solving", "runtime", default="6h"),
|
||||
shadow:
|
||||
"minimal"
|
||||
"shallow"
|
||||
conda:
|
||||
"../envs/environment.yaml"
|
||||
script:
|
||||
@ -62,7 +62,7 @@ rule solve_operations_network:
|
||||
mem_mb=(lambda w: 10000 + 372 * int(w.clusters)),
|
||||
runtime=config_provider("solving", "runtime", default="6h"),
|
||||
shadow:
|
||||
"minimal"
|
||||
"shallow"
|
||||
conda:
|
||||
"../envs/environment.yaml"
|
||||
script:
|
||||
|
@ -70,6 +70,7 @@ rule add_brownfield:
|
||||
),
|
||||
threshold_capacity=config_provider("existing_capacities", " threshold_capacity"),
|
||||
snapshots=config_provider("snapshots"),
|
||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||
carriers=config_provider("electricity", "renewable_carriers"),
|
||||
input:
|
||||
unpack(input_profile_tech_brownfield),
|
||||
@ -117,10 +118,11 @@ rule solve_sector_network_myopic:
|
||||
network=RESULTS
|
||||
+ "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",
|
||||
costs=resources("costs_{planning_horizons}.csv"),
|
||||
config=RESULTS + "config.yaml",
|
||||
output:
|
||||
RESULTS
|
||||
network=RESULTS
|
||||
+ "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",
|
||||
config=RESULTS
|
||||
+ "configs/config.elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.yaml",
|
||||
shadow:
|
||||
"shallow"
|
||||
log:
|
||||
|
@ -15,10 +15,11 @@ rule solve_sector_network:
|
||||
input:
|
||||
network=RESULTS
|
||||
+ "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",
|
||||
config=RESULTS + "config.yaml",
|
||||
output:
|
||||
RESULTS
|
||||
network=RESULTS
|
||||
+ "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",
|
||||
config=RESULTS
|
||||
+ "configs/config.elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.yaml",
|
||||
shadow:
|
||||
"shallow"
|
||||
log:
|
||||
|
@ -107,10 +107,11 @@ rule solve_sector_network_perfect:
|
||||
network=RESULTS
|
||||
+ "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc",
|
||||
costs=resources("costs_2030.csv"),
|
||||
config=RESULTS + "config.yaml",
|
||||
output:
|
||||
RESULTS
|
||||
network=RESULTS
|
||||
+ "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc",
|
||||
config=RESULTS
|
||||
+ "configs/config.elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.yaml",
|
||||
threads: solver_threads
|
||||
resources:
|
||||
mem_mb=config_provider("solving", "mem"),
|
||||
|
@ -11,7 +11,9 @@ import os
|
||||
import re
|
||||
import urllib
|
||||
from functools import partial
|
||||
from os.path import exists
|
||||
from pathlib import Path
|
||||
from shutil import copyfile
|
||||
|
||||
import pandas as pd
|
||||
import pytz
|
||||
@ -25,6 +27,41 @@ logger = logging.getLogger(__name__)
|
||||
REGION_COLS = ["geometry", "name", "x", "y", "country"]
|
||||
|
||||
|
||||
def copy_default_files(workflow):
|
||||
default_files = {
|
||||
"config/config.default.yaml": "config/config.yaml",
|
||||
"config/scenarios.template.yaml": "config/scenarios.yaml",
|
||||
}
|
||||
for template, target in default_files.items():
|
||||
target = os.path.join(workflow.current_basedir, target)
|
||||
template = os.path.join(workflow.current_basedir, template)
|
||||
if not exists(target) and exists(template):
|
||||
copyfile(template, target)
|
||||
|
||||
|
||||
def get_scenarios(run):
|
||||
scenario_config = run.get("scenarios", {})
|
||||
if run["name"] and scenario_config.get("enable"):
|
||||
fn = Path(scenario_config["file"])
|
||||
if fn.exists():
|
||||
scenarios = yaml.safe_load(fn.read_text())
|
||||
if run["name"] == "all":
|
||||
run["name"] = list(scenarios.keys())
|
||||
return scenarios
|
||||
return {}
|
||||
|
||||
|
||||
def get_rdir(run):
|
||||
scenario_config = run.get("scenarios", {})
|
||||
if run["name"] and scenario_config.get("enable"):
|
||||
RDIR = "{run}/"
|
||||
elif run["name"]:
|
||||
RDIR = run["name"] + "/"
|
||||
else:
|
||||
RDIR = ""
|
||||
return RDIR
|
||||
|
||||
|
||||
def get_run_path(fn, dir, rdir, shared_resources):
|
||||
"""
|
||||
Dynamically provide paths based on shared resources and filename.
|
||||
@ -60,26 +97,23 @@ def get_run_path(fn, dir, rdir, shared_resources):
|
||||
if shared_resources == "base":
|
||||
pattern = r"\{([^{}]+)\}"
|
||||
existing_wildcards = set(re.findall(pattern, fn))
|
||||
irrelevant_wildcards = {"technology", "year", "scope"}
|
||||
irrelevant_wildcards = {"technology", "year", "scope", "kind"}
|
||||
no_relevant_wildcards = not existing_wildcards - irrelevant_wildcards
|
||||
no_elec_rule = not fn.startswith("networks/elec") and not fn.startswith(
|
||||
"add_electricity"
|
||||
)
|
||||
is_shared = no_relevant_wildcards and no_elec_rule
|
||||
rdir = "" if is_shared else rdir
|
||||
elif isinstance(shared_resources, str):
|
||||
rdir = shared_resources + "/"
|
||||
is_shared = True
|
||||
elif isinstance(shared_resources, bool):
|
||||
is_shared = shared_resources
|
||||
rdir = "" if shared_resources else rdir
|
||||
else:
|
||||
raise ValueError(
|
||||
"shared_resources must be a boolean, str, or 'base' for special handling."
|
||||
)
|
||||
|
||||
if is_shared:
|
||||
return f"{dir}{fn}"
|
||||
else:
|
||||
return f"{dir}{rdir}{fn}"
|
||||
return f"{dir}{rdir}{fn}"
|
||||
|
||||
|
||||
def path_provider(dir, rdir, shared_resources):
|
||||
@ -724,3 +758,15 @@ def validate_checksum(file_path, zenodo_url=None, checksum=None):
|
||||
assert (
|
||||
calculated_checksum == checksum
|
||||
), "Checksum is invalid. This may be due to an incomplete download. Delete the file and re-execute the rule."
|
||||
|
||||
|
||||
def get_snapshots(snapshots, drop_leap_day=False, freq="h", **kwargs):
|
||||
"""
|
||||
Returns pandas DateTimeIndex potentially without leap days.
|
||||
"""
|
||||
|
||||
time = pd.date_range(freq=freq, **snapshots, **kwargs)
|
||||
if drop_leap_day and time.is_leap_year.any():
|
||||
time = time[~((time.month == 2) & (time.day == 29))]
|
||||
|
||||
return time
|
||||
|
@ -14,6 +14,7 @@ import pypsa
|
||||
import xarray as xr
|
||||
from _helpers import (
|
||||
configure_logging,
|
||||
get_snapshots,
|
||||
set_scenario_config,
|
||||
update_config_from_wildcards,
|
||||
)
|
||||
@ -144,7 +145,7 @@ def disable_grid_expansion_if_limit_hit(n):
|
||||
for name, glc in glcs.iterrows():
|
||||
total_expansion = (
|
||||
(
|
||||
n.lines.query("p_nom_extendable")
|
||||
n.lines.query("s_nom_extendable")
|
||||
.eval(f"s_nom_min * {cols[limit_type]}")
|
||||
.sum()
|
||||
)
|
||||
@ -192,7 +193,7 @@ def adjust_renewable_profiles(n, input_profiles, params, year):
|
||||
clustermaps.index = clustermaps.index.astype(str)
|
||||
|
||||
# temporal clustering
|
||||
dr = pd.date_range(**params["snapshots"], freq="h")
|
||||
dr = get_snapshots(params["snapshots"], params["drop_leap_day"])
|
||||
snapshotmaps = (
|
||||
pd.Series(dr, index=dr).where(lambda x: x.isin(n.snapshots), pd.NA).ffill()
|
||||
)
|
||||
|
@ -93,7 +93,12 @@ import powerplantmatching as pm
|
||||
import pypsa
|
||||
import scipy.sparse as sparse
|
||||
import xarray as xr
|
||||
from _helpers import configure_logging, set_scenario_config, update_p_nom_max
|
||||
from _helpers import (
|
||||
configure_logging,
|
||||
get_snapshots,
|
||||
set_scenario_config,
|
||||
update_p_nom_max,
|
||||
)
|
||||
from powerplantmatching.export import map_country_bus
|
||||
from shapely.prepared import prep
|
||||
|
||||
@ -179,12 +184,13 @@ def sanitize_carriers(n, config):
|
||||
|
||||
|
||||
def sanitize_locations(n):
|
||||
n.buses["x"] = n.buses.x.where(n.buses.x != 0, n.buses.location.map(n.buses.x))
|
||||
n.buses["y"] = n.buses.y.where(n.buses.y != 0, n.buses.location.map(n.buses.y))
|
||||
n.buses["country"] = n.buses.country.where(
|
||||
n.buses.country.ne("") & n.buses.country.notnull(),
|
||||
n.buses.location.map(n.buses.country),
|
||||
)
|
||||
if "location" in n.buses.columns:
|
||||
n.buses["x"] = n.buses.x.where(n.buses.x != 0, n.buses.location.map(n.buses.x))
|
||||
n.buses["y"] = n.buses.y.where(n.buses.y != 0, n.buses.location.map(n.buses.y))
|
||||
n.buses["country"] = n.buses.country.where(
|
||||
n.buses.country.ne("") & n.buses.country.notnull(),
|
||||
n.buses.location.map(n.buses.country),
|
||||
)
|
||||
|
||||
|
||||
def add_co2_emissions(n, costs, carriers):
|
||||
@ -795,6 +801,10 @@ if __name__ == "__main__":
|
||||
params = snakemake.params
|
||||
|
||||
n = pypsa.Network(snakemake.input.base_network)
|
||||
|
||||
time = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day)
|
||||
n.set_snapshots(time)
|
||||
|
||||
Nyears = n.snapshot_weightings.objective.sum() / 8760.0
|
||||
|
||||
costs = load_costs(
|
||||
|
@ -553,7 +553,7 @@ if __name__ == "__main__":
|
||||
|
||||
snakemake = mock_snakemake(
|
||||
"add_existing_baseyear",
|
||||
# configfiles="config/test/config.myopic.yaml",
|
||||
configfiles="config/test/config.myopic.yaml",
|
||||
simpl="",
|
||||
clusters="37",
|
||||
ll="v1.0",
|
||||
|
@ -15,8 +15,6 @@ Relevant Settings
|
||||
|
||||
.. code:: yaml
|
||||
|
||||
snapshots:
|
||||
|
||||
countries:
|
||||
|
||||
electricity:
|
||||
@ -77,7 +75,7 @@ import shapely
|
||||
import shapely.prepared
|
||||
import shapely.wkt
|
||||
import yaml
|
||||
from _helpers import configure_logging, set_scenario_config
|
||||
from _helpers import configure_logging, get_snapshots, set_scenario_config
|
||||
from packaging.version import Version, parse
|
||||
from scipy import spatial
|
||||
from scipy.sparse import csgraph
|
||||
@ -732,12 +730,12 @@ def base_network(
|
||||
transformers = _set_electrical_parameters_transformers(transformers, config)
|
||||
links = _set_electrical_parameters_links(links, config, links_p_nom)
|
||||
converters = _set_electrical_parameters_converters(converters, config)
|
||||
snapshots = snakemake.params.snapshots
|
||||
|
||||
n = pypsa.Network()
|
||||
n.name = "PyPSA-Eur"
|
||||
|
||||
n.set_snapshots(pd.date_range(freq="h", **snapshots))
|
||||
time = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day)
|
||||
n.set_snapshots(time)
|
||||
n.madd("Carrier", ["AC", "DC"])
|
||||
|
||||
n.import_components_from_dataframe(buses, "Bus")
|
||||
|
@ -11,7 +11,7 @@ import geopandas as gpd
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import xarray as xr
|
||||
from _helpers import set_scenario_config
|
||||
from _helpers import get_snapshots, set_scenario_config
|
||||
from dask.distributed import Client, LocalCluster
|
||||
|
||||
if __name__ == "__main__":
|
||||
@ -30,8 +30,16 @@ if __name__ == "__main__":
|
||||
cluster = LocalCluster(n_workers=nprocesses, threads_per_worker=1)
|
||||
client = Client(cluster, asynchronous=True)
|
||||
|
||||
time = pd.date_range(freq="h", **snakemake.params.snapshots)
|
||||
cutout = atlite.Cutout(snakemake.input.cutout).sel(time=time)
|
||||
cutout_name = snakemake.input.cutout
|
||||
|
||||
time = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day)
|
||||
daily = get_snapshots(
|
||||
snakemake.params.snapshots,
|
||||
snakemake.params.drop_leap_day,
|
||||
freq="D",
|
||||
)
|
||||
|
||||
cutout = atlite.Cutout(cutout_name).sel(time=time)
|
||||
|
||||
clustered_regions = (
|
||||
gpd.read_file(snakemake.input.regions_onshore).set_index("name").buffer(0)
|
||||
@ -49,6 +57,6 @@ if __name__ == "__main__":
|
||||
index=clustered_regions.index,
|
||||
dask_kwargs=dict(scheduler=client),
|
||||
show_progress=False,
|
||||
)
|
||||
).sel(time=daily)
|
||||
|
||||
heat_demand.to_netcdf(snakemake.output.heat_demand)
|
||||
|
@ -22,7 +22,7 @@ if __name__ == "__main__":
|
||||
snakemake = mock_snakemake(
|
||||
"build_district_heat_share",
|
||||
simpl="",
|
||||
clusters=48,
|
||||
clusters=60,
|
||||
planning_horizons="2050",
|
||||
)
|
||||
configure_logging(snakemake)
|
||||
@ -32,12 +32,13 @@ if __name__ == "__main__":
|
||||
|
||||
pop_layout = pd.read_csv(snakemake.input.clustered_pop_layout, index_col=0)
|
||||
|
||||
year = str(snakemake.params.energy_totals_year)
|
||||
district_heat_share = pd.read_csv(snakemake.input.district_heat_share, index_col=0)[
|
||||
"district heat share"
|
||||
year
|
||||
]
|
||||
|
||||
# make ct-based share nodal
|
||||
district_heat_share = district_heat_share.loc[pop_layout.ct]
|
||||
district_heat_share = district_heat_share.reindex(pop_layout.ct).fillna(0)
|
||||
district_heat_share.index = pop_layout.index
|
||||
|
||||
# total urban population per country
|
||||
|
@ -39,7 +39,7 @@ import logging
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from _helpers import configure_logging, set_scenario_config
|
||||
from _helpers import configure_logging, get_snapshots, set_scenario_config
|
||||
from pandas import Timedelta as Delta
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@ -183,7 +183,7 @@ def manual_adjustment(load, fn_load, countries):
|
||||
elif "MK" in load:
|
||||
load["AL"] = load["MK"] * (4.1 / 7.4)
|
||||
|
||||
if "MK" in countries:
|
||||
if "MK" in countries and "MK" in countries:
|
||||
if "MK" not in load or load.MK.isnull().sum() > len(load) / 2:
|
||||
if "ME" in load:
|
||||
load["MK"] = load.ME * (6.7 / 2.9)
|
||||
@ -192,7 +192,7 @@ def manual_adjustment(load, fn_load, countries):
|
||||
if "ME" in load:
|
||||
load["BA"] = load.HR * (11.0 / 16.2)
|
||||
|
||||
if "KV" not in load or load.KV.isnull().values.all():
|
||||
if ("KV" not in load or load.KV.isnull().values.all()) and "KV" in countries:
|
||||
if "RS" in load:
|
||||
load["KV"] = load["RS"] * (4.8 / 27.0)
|
||||
|
||||
@ -263,22 +263,33 @@ if __name__ == "__main__":
|
||||
configure_logging(snakemake)
|
||||
set_scenario_config(snakemake)
|
||||
|
||||
snapshots = get_snapshots(
|
||||
snakemake.params.snapshots, snakemake.params.drop_leap_day
|
||||
)
|
||||
|
||||
fixed_year = snakemake.params["load"].get("fixed_year", False)
|
||||
years = (
|
||||
slice(str(fixed_year), str(fixed_year))
|
||||
if fixed_year
|
||||
else slice(snapshots[0], snapshots[-1])
|
||||
)
|
||||
|
||||
interpolate_limit = snakemake.params.load["interpolate_limit"]
|
||||
countries = snakemake.params.countries
|
||||
snapshots = pd.date_range(freq="h", **snakemake.params.snapshots)
|
||||
years = slice(snapshots[0], snapshots[-1])
|
||||
|
||||
time_shift = snakemake.params.load["time_shift_for_large_gaps"]
|
||||
|
||||
load = load_timeseries(snakemake.input[0], years, countries)
|
||||
load = load_timeseries(snakemake.input.reported, years, countries)
|
||||
|
||||
load = load.reindex(index=snapshots)
|
||||
|
||||
if "UA" in countries:
|
||||
# attach load of UA (best data only for entsoe transparency)
|
||||
load_ua = load_timeseries(snakemake.input[0], "2018", ["UA"])
|
||||
load_ua = load_timeseries(snakemake.input.reported, "2018", ["UA"])
|
||||
snapshot_year = str(snapshots.year.unique().item())
|
||||
time_diff = pd.Timestamp("2018") - pd.Timestamp(snapshot_year)
|
||||
load_ua.index -= (
|
||||
time_diff # hack indices (currently, UA is manually set to 2018)
|
||||
)
|
||||
# hack indices (currently, UA is manually set to 2018)
|
||||
load_ua.index -= time_diff
|
||||
load["UA"] = load_ua
|
||||
# attach load of MD (no time-series available, use 2020-totals and distribute according to UA):
|
||||
# https://www.iea.org/data-and-statistics/data-browser/?country=MOLDOVA&fuel=Energy%20consumption&indicator=TotElecCons
|
||||
@ -288,9 +299,6 @@ if __name__ == "__main__":
|
||||
if snakemake.params.load["manual_adjustments"]:
|
||||
load = manual_adjustment(load, snakemake.input[0], countries)
|
||||
|
||||
if load.empty:
|
||||
logger.warning("Build electricity demand time series is empty.")
|
||||
|
||||
logger.info(f"Linearly interpolate gaps of size {interpolate_limit} and less.")
|
||||
load = load.interpolate(method="linear", limit=interpolate_limit)
|
||||
|
||||
@ -299,10 +307,21 @@ if __name__ == "__main__":
|
||||
)
|
||||
load = load.apply(fill_large_gaps, shift=time_shift)
|
||||
|
||||
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 "
|
||||
"`time_shift_for_large_gaps` or modify the `manual_adjustment` function "
|
||||
"for implementing the needed load data modifications."
|
||||
)
|
||||
|
||||
# need to reindex load time series to target year
|
||||
if fixed_year:
|
||||
load.index = load.index.map(lambda t: t.replace(year=snapshots.year[0]))
|
||||
|
||||
load.to_csv(snakemake.output[0])
|
||||
|
@ -69,55 +69,83 @@ to_ipcc = {
|
||||
}
|
||||
|
||||
|
||||
def build_eurostat(input_eurostat, countries, year):
|
||||
def eurostat_per_country(input_eurostat, country):
|
||||
filename = (
|
||||
f"{input_eurostat}/{country}-Energy-balance-sheets-April-2023-edition.xlsb"
|
||||
)
|
||||
sheet = pd.read_excel(
|
||||
filename,
|
||||
engine="pyxlsb",
|
||||
sheet_name=None,
|
||||
skiprows=4,
|
||||
index_col=list(range(4)),
|
||||
)
|
||||
sheet.pop("Cover")
|
||||
return pd.concat(sheet)
|
||||
|
||||
|
||||
def build_eurostat(input_eurostat, countries, nprocesses=1, disable_progressbar=False):
|
||||
"""
|
||||
Return multi-index for all countries' energy data in TWh/a.
|
||||
"""
|
||||
df = {}
|
||||
countries = {idees_rename.get(country, country) for country in countries} - {"CH"}
|
||||
for country in countries:
|
||||
filename = (
|
||||
f"{input_eurostat}/{country}-Energy-balance-sheets-April-2023-edition.xlsb"
|
||||
)
|
||||
sheet = pd.read_excel(
|
||||
filename,
|
||||
engine="pyxlsb",
|
||||
sheet_name=str(year),
|
||||
skiprows=4,
|
||||
index_col=list(range(4)),
|
||||
)
|
||||
df[country] = sheet
|
||||
df = pd.concat(df, axis=0)
|
||||
|
||||
func = partial(eurostat_per_country, input_eurostat)
|
||||
tqdm_kwargs = dict(
|
||||
ascii=False,
|
||||
unit=" country",
|
||||
total=len(countries),
|
||||
desc="Build from eurostat database",
|
||||
disable=disable_progressbar,
|
||||
)
|
||||
with mute_print():
|
||||
with mp.Pool(processes=nprocesses) as pool:
|
||||
dfs = list(tqdm(pool.imap(func, countries), **tqdm_kwargs))
|
||||
|
||||
index_names = ["country", "year", "lvl1", "lvl2", "lvl3", "lvl4"]
|
||||
df = pd.concat(dfs, keys=countries, names=index_names)
|
||||
df.index = df.index.set_levels(df.index.levels[1].astype(int), level=1)
|
||||
|
||||
# drop columns with all NaNs
|
||||
unnamed_cols = df.columns[df.columns.astype(str).str.startswith("Unnamed")]
|
||||
df.drop(unnamed_cols, axis=1, inplace=True)
|
||||
df.drop(year, axis=1, inplace=True)
|
||||
df.drop(list(range(1990, 2022)), axis=1, inplace=True, errors="ignore")
|
||||
|
||||
# make numeric values where possible
|
||||
df.replace("Z", 0, inplace=True)
|
||||
df = df.apply(pd.to_numeric, errors="coerce")
|
||||
df = df.select_dtypes(include=[np.number])
|
||||
|
||||
# write 'International aviation' to the 2nd level of the multiindex
|
||||
int_avia = df.index.get_level_values(2) == "International aviation"
|
||||
# write 'International aviation' to the lower level of the multiindex
|
||||
int_avia = df.index.get_level_values(3) == "International aviation"
|
||||
temp = df.loc[int_avia]
|
||||
temp.index = pd.MultiIndex.from_frame(
|
||||
temp.index.to_frame().fillna("International aviation")
|
||||
)
|
||||
df = pd.concat([temp, df.loc[~int_avia]])
|
||||
|
||||
# Fill in missing data on "Domestic aviation" for each country.
|
||||
domestic_avia = df.index.get_level_values(4) == "Domestic aviation"
|
||||
for country in countries:
|
||||
slicer = idx[country, :, :, :, "Domestic aviation"]
|
||||
# For the Total and Fossil energy columns, fill in zeros with
|
||||
# the closest non-zero value in the year index.
|
||||
for col in ["Total", "Fossil energy"]:
|
||||
df.loc[slicer, col] = (
|
||||
df.loc[slicer, col].replace(0.0, np.nan).ffill().bfill()
|
||||
)
|
||||
|
||||
# Renaming some indices
|
||||
index_rename = {
|
||||
"Households": "Residential",
|
||||
"Commercial & public services": "Services",
|
||||
"Domestic navigation": "Domestic Navigation",
|
||||
"International maritime bunkers": "Bunkers",
|
||||
"UK": "GB",
|
||||
}
|
||||
columns_rename = {"Total": "Total all products", "UK": "GB"}
|
||||
columns_rename = {"Total": "Total all products"}
|
||||
df.rename(index=index_rename, columns=columns_rename, inplace=True)
|
||||
df.sort_index(inplace=True)
|
||||
df.index.names = [None] * len(df.index.names)
|
||||
|
||||
# convert to TWh/a from ktoe/a
|
||||
df *= 11.63 / 1e3
|
||||
@ -125,13 +153,21 @@ def build_eurostat(input_eurostat, countries, year):
|
||||
return df
|
||||
|
||||
|
||||
def build_swiss(year):
|
||||
def build_swiss():
|
||||
"""
|
||||
Return a pd.Series of Swiss energy data in TWh/a.
|
||||
Return a pd.DataFrame of Swiss energy data in TWh/a.
|
||||
"""
|
||||
fn = snakemake.input.swiss
|
||||
|
||||
df = pd.read_csv(fn, index_col=[0, 1]).loc["CH", str(year)]
|
||||
df = pd.read_csv(fn, index_col=[0, 1])
|
||||
|
||||
df.columns = df.columns.astype(int)
|
||||
|
||||
df.columns.name = "year"
|
||||
|
||||
df = df.stack().unstack("item")
|
||||
|
||||
df.columns.name = None
|
||||
|
||||
# convert PJ/a to TWh/a
|
||||
df /= 3.6
|
||||
@ -139,35 +175,35 @@ def build_swiss(year):
|
||||
return df
|
||||
|
||||
|
||||
def idees_per_country(ct, year, base_dir):
|
||||
def idees_per_country(ct, base_dir):
|
||||
ct_idees = idees_rename.get(ct, ct)
|
||||
fn_residential = f"{base_dir}/JRC-IDEES-2015_Residential_{ct_idees}.xlsx"
|
||||
fn_tertiary = f"{base_dir}/JRC-IDEES-2015_Tertiary_{ct_idees}.xlsx"
|
||||
fn_transport = f"{base_dir}/JRC-IDEES-2015_Transport_{ct_idees}.xlsx"
|
||||
|
||||
ct_totals = {}
|
||||
|
||||
# residential
|
||||
|
||||
df = pd.read_excel(fn_residential, "RES_hh_fec", index_col=0)[year]
|
||||
df = pd.read_excel(fn_residential, "RES_hh_fec", index_col=0)
|
||||
|
||||
rows = ["Advanced electric heating", "Conventional electric heating"]
|
||||
ct_totals = {
|
||||
"total residential space": df["Space heating"],
|
||||
"electricity residential space": df[rows].sum(),
|
||||
}
|
||||
ct_totals["total residential water"] = df.at["Water heating"]
|
||||
ct_totals["electricity residential space"] = df.loc[rows].sum()
|
||||
ct_totals["total residential space"] = df.loc["Space heating"]
|
||||
ct_totals["total residential water"] = df.loc["Water heating"]
|
||||
|
||||
assert df.index[23] == "Electricity"
|
||||
ct_totals["electricity residential water"] = df.iloc[23]
|
||||
|
||||
ct_totals["total residential cooking"] = df["Cooking"]
|
||||
ct_totals["total residential cooking"] = df.loc["Cooking"]
|
||||
|
||||
assert df.index[30] == "Electricity"
|
||||
ct_totals["electricity residential cooking"] = df.iloc[30]
|
||||
|
||||
df = pd.read_excel(fn_residential, "RES_summary", index_col=0)[year]
|
||||
df = pd.read_excel(fn_residential, "RES_summary", index_col=0)
|
||||
|
||||
row = "Energy consumption by fuel - Eurostat structure (ktoe)"
|
||||
ct_totals["total residential"] = df[row]
|
||||
ct_totals["total residential"] = df.loc[row]
|
||||
|
||||
assert df.index[47] == "Electricity"
|
||||
ct_totals["electricity residential"] = df.iloc[47]
|
||||
@ -180,27 +216,27 @@ def idees_per_country(ct, year, base_dir):
|
||||
|
||||
# services
|
||||
|
||||
df = pd.read_excel(fn_tertiary, "SER_hh_fec", index_col=0)[year]
|
||||
df = pd.read_excel(fn_tertiary, "SER_hh_fec", index_col=0)
|
||||
|
||||
ct_totals["total services space"] = df["Space heating"]
|
||||
ct_totals["total services space"] = df.loc["Space heating"]
|
||||
|
||||
rows = ["Advanced electric heating", "Conventional electric heating"]
|
||||
ct_totals["electricity services space"] = df[rows].sum()
|
||||
ct_totals["electricity services space"] = df.loc[rows].sum()
|
||||
|
||||
ct_totals["total services water"] = df["Hot water"]
|
||||
ct_totals["total services water"] = df.loc["Hot water"]
|
||||
|
||||
assert df.index[24] == "Electricity"
|
||||
ct_totals["electricity services water"] = df.iloc[24]
|
||||
|
||||
ct_totals["total services cooking"] = df["Catering"]
|
||||
ct_totals["total services cooking"] = df.loc["Catering"]
|
||||
|
||||
assert df.index[31] == "Electricity"
|
||||
ct_totals["electricity services cooking"] = df.iloc[31]
|
||||
|
||||
df = pd.read_excel(fn_tertiary, "SER_summary", index_col=0)[year]
|
||||
df = pd.read_excel(fn_tertiary, "SER_summary", index_col=0)
|
||||
|
||||
row = "Energy consumption by fuel - Eurostat structure (ktoe)"
|
||||
ct_totals["total services"] = df[row]
|
||||
ct_totals["total services"] = df.loc[row]
|
||||
|
||||
assert df.index[50] == "Electricity"
|
||||
ct_totals["electricity services"] = df.iloc[50]
|
||||
@ -216,7 +252,7 @@ def idees_per_country(ct, year, base_dir):
|
||||
start = "Detailed split of energy consumption (ktoe)"
|
||||
end = "Market shares of energy uses (%)"
|
||||
|
||||
df = pd.read_excel(fn_tertiary, "AGR_fec", index_col=0).loc[start:end, year]
|
||||
df = pd.read_excel(fn_tertiary, "AGR_fec", index_col=0).loc[start:end]
|
||||
|
||||
rows = [
|
||||
"Lighting",
|
||||
@ -224,30 +260,30 @@ def idees_per_country(ct, year, base_dir):
|
||||
"Specific electricity uses",
|
||||
"Pumping devices (electric)",
|
||||
]
|
||||
ct_totals["total agriculture electricity"] = df[rows].sum()
|
||||
ct_totals["total agriculture electricity"] = df.loc[rows].sum()
|
||||
|
||||
rows = ["Specific heat uses", "Low enthalpy heat"]
|
||||
ct_totals["total agriculture heat"] = df[rows].sum()
|
||||
ct_totals["total agriculture heat"] = df.loc[rows].sum()
|
||||
|
||||
rows = [
|
||||
"Motor drives",
|
||||
"Farming machine drives (diesel oil incl. biofuels)",
|
||||
"Pumping devices (diesel oil incl. biofuels)",
|
||||
]
|
||||
ct_totals["total agriculture machinery"] = df[rows].sum()
|
||||
ct_totals["total agriculture machinery"] = df.loc[rows].sum()
|
||||
|
||||
row = "Agriculture, forestry and fishing"
|
||||
ct_totals["total agriculture"] = df[row]
|
||||
ct_totals["total agriculture"] = df.loc[row]
|
||||
|
||||
# transport
|
||||
|
||||
df = pd.read_excel(fn_transport, "TrRoad_ene", index_col=0)[year]
|
||||
df = pd.read_excel(fn_transport, "TrRoad_ene", index_col=0)
|
||||
|
||||
ct_totals["total road"] = df["by fuel (EUROSTAT DATA)"]
|
||||
ct_totals["total road"] = df.loc["by fuel (EUROSTAT DATA)"]
|
||||
|
||||
ct_totals["electricity road"] = df["Electricity"]
|
||||
ct_totals["electricity road"] = df.loc["Electricity"]
|
||||
|
||||
ct_totals["total two-wheel"] = df["Powered 2-wheelers (Gasoline)"]
|
||||
ct_totals["total two-wheel"] = df.loc["Powered 2-wheelers (Gasoline)"]
|
||||
|
||||
assert df.index[19] == "Passenger cars"
|
||||
ct_totals["total passenger cars"] = df.iloc[19]
|
||||
@ -268,16 +304,16 @@ def idees_per_country(ct, year, base_dir):
|
||||
ct_totals["electricity light duty road freight"] = df.iloc[49]
|
||||
|
||||
row = "Heavy duty vehicles (Diesel oil incl. biofuels)"
|
||||
ct_totals["total heavy duty road freight"] = df[row]
|
||||
ct_totals["total heavy duty road freight"] = df.loc[row]
|
||||
|
||||
assert df.index[61] == "Passenger cars"
|
||||
ct_totals["passenger car efficiency"] = df.iloc[61]
|
||||
|
||||
df = pd.read_excel(fn_transport, "TrRail_ene", index_col=0)[year]
|
||||
df = pd.read_excel(fn_transport, "TrRail_ene", index_col=0)
|
||||
|
||||
ct_totals["total rail"] = df["by fuel (EUROSTAT DATA)"]
|
||||
ct_totals["total rail"] = df.loc["by fuel (EUROSTAT DATA)"]
|
||||
|
||||
ct_totals["electricity rail"] = df["Electricity"]
|
||||
ct_totals["electricity rail"] = df.loc["Electricity"]
|
||||
|
||||
assert df.index[15] == "Passenger transport"
|
||||
ct_totals["total rail passenger"] = df.iloc[15]
|
||||
@ -293,7 +329,7 @@ def idees_per_country(ct, year, base_dir):
|
||||
assert df.index[23] == "Electric"
|
||||
ct_totals["electricity rail freight"] = df.iloc[23]
|
||||
|
||||
df = pd.read_excel(fn_transport, "TrAvia_ene", index_col=0)[year]
|
||||
df = pd.read_excel(fn_transport, "TrAvia_ene", index_col=0)
|
||||
|
||||
assert df.index[6] == "Passenger transport"
|
||||
ct_totals["total aviation passenger"] = df.iloc[6]
|
||||
@ -324,24 +360,24 @@ def idees_per_country(ct, year, base_dir):
|
||||
+ ct_totals["total international aviation passenger"]
|
||||
)
|
||||
|
||||
df = pd.read_excel(fn_transport, "TrNavi_ene", index_col=0)[year]
|
||||
df = pd.read_excel(fn_transport, "TrNavi_ene", index_col=0)
|
||||
|
||||
# coastal and inland
|
||||
ct_totals["total domestic navigation"] = df["by fuel (EUROSTAT DATA)"]
|
||||
ct_totals["total domestic navigation"] = df.loc["by fuel (EUROSTAT DATA)"]
|
||||
|
||||
df = pd.read_excel(fn_transport, "TrRoad_act", index_col=0)[year]
|
||||
df = pd.read_excel(fn_transport, "TrRoad_act", index_col=0)
|
||||
|
||||
assert df.index[85] == "Passenger cars"
|
||||
ct_totals["passenger cars"] = df.iloc[85]
|
||||
|
||||
return pd.Series(ct_totals, name=ct)
|
||||
return pd.DataFrame(ct_totals)
|
||||
|
||||
|
||||
def build_idees(countries, year):
|
||||
def build_idees(countries):
|
||||
nprocesses = snakemake.threads
|
||||
disable_progress = snakemake.config["run"].get("disable_progressbar", False)
|
||||
|
||||
func = partial(idees_per_country, year=year, base_dir=snakemake.input.idees)
|
||||
func = partial(idees_per_country, base_dir=snakemake.input.idees)
|
||||
tqdm_kwargs = dict(
|
||||
ascii=False,
|
||||
unit=" country",
|
||||
@ -353,53 +389,67 @@ def build_idees(countries, year):
|
||||
with mp.Pool(processes=nprocesses) as pool:
|
||||
totals_list = list(tqdm(pool.imap(func, countries), **tqdm_kwargs))
|
||||
|
||||
totals = pd.concat(totals_list, axis=1)
|
||||
totals = pd.concat(
|
||||
totals_list,
|
||||
keys=countries,
|
||||
names=["country", "year"],
|
||||
)
|
||||
|
||||
# convert ktoe to TWh
|
||||
exclude = totals.index.str.fullmatch("passenger cars")
|
||||
totals.loc[~exclude] *= 11.63 / 1e3
|
||||
exclude = totals.columns.str.fullmatch("passenger cars")
|
||||
totals.loc[:, ~exclude] *= 11.63 / 1e3
|
||||
|
||||
# convert TWh/100km to kWh/km
|
||||
totals.loc["passenger car efficiency"] *= 10
|
||||
totals.loc[:, "passenger car efficiency"] *= 10
|
||||
|
||||
return totals.T
|
||||
return totals
|
||||
|
||||
|
||||
def build_energy_totals(countries, eurostat, swiss, idees):
|
||||
eurostat_fuels = {"electricity": "Electricity", "total": "Total all products"}
|
||||
eurostat_countries = eurostat.index.levels[0]
|
||||
eurostat_years = eurostat.index.levels[1]
|
||||
|
||||
to_drop = ["passenger cars", "passenger car efficiency"]
|
||||
df = idees.reindex(countries).drop(to_drop, axis=1)
|
||||
new_index = pd.MultiIndex.from_product(
|
||||
[countries, eurostat_years], names=["country", "year"]
|
||||
)
|
||||
|
||||
eurostat_countries = eurostat.index.levels[0]
|
||||
in_eurostat = df.index.intersection(eurostat_countries)
|
||||
df = idees.reindex(new_index).drop(to_drop, axis=1)
|
||||
|
||||
in_eurostat = df.index.levels[0].intersection(eurostat_countries)
|
||||
|
||||
# add international navigation
|
||||
|
||||
slicer = idx[in_eurostat, :, "Bunkers", :]
|
||||
fill_values = eurostat.loc[slicer, "Total all products"].groupby(level=0).sum()
|
||||
slicer = idx[in_eurostat, :, :, "Bunkers", :]
|
||||
fill_values = eurostat.loc[slicer, "Total all products"].groupby(level=[0, 1]).sum()
|
||||
df.loc[in_eurostat, "total international navigation"] = fill_values
|
||||
|
||||
# add swiss energy data
|
||||
|
||||
df.loc["CH"] = swiss
|
||||
df = pd.concat([df.drop("CH", errors="ignore"), swiss]).sort_index()
|
||||
|
||||
# get values for missing countries based on Eurostat EnergyBalances
|
||||
# divide cooking/space/water according to averages in EU28
|
||||
|
||||
missing = df.index[df["total residential"].isna()]
|
||||
to_fill = missing.intersection(eurostat_countries)
|
||||
uses = ["space", "cooking", "water"]
|
||||
|
||||
to_fill = df.index[
|
||||
df["total residential"].isna()
|
||||
& df.index.get_level_values("country").isin(eurostat_countries)
|
||||
]
|
||||
c = to_fill.get_level_values("country")
|
||||
y = to_fill.get_level_values("year")
|
||||
|
||||
for sector in ["residential", "services", "road", "rail"]:
|
||||
eurostat_sector = sector.capitalize()
|
||||
|
||||
# fuel use
|
||||
|
||||
for fuel in ["electricity", "total"]:
|
||||
slicer = idx[to_fill, :, :, eurostat_sector]
|
||||
slicer = idx[c, y, :, :, eurostat_sector]
|
||||
fill_values = (
|
||||
eurostat.loc[slicer, eurostat_fuels[fuel]].groupby(level=0).sum()
|
||||
eurostat.loc[slicer, eurostat_fuels[fuel]].groupby(level=[0, 1]).sum()
|
||||
)
|
||||
df.loc[to_fill, f"{fuel} {sector}"] = fill_values
|
||||
|
||||
@ -461,25 +511,27 @@ def build_energy_totals(countries, eurostat, swiss, idees):
|
||||
no_norway[f"total {sector}"] - no_norway[f"electricity {sector}"]
|
||||
)
|
||||
fraction = nonelectric_use.div(nonelectric).mean()
|
||||
df.loc["NO", f"total {sector} {use}"] = total_heating * fraction
|
||||
df.loc["NO", f"total {sector} {use}"] = (
|
||||
total_heating * fraction
|
||||
).values
|
||||
df.loc["NO", f"electricity {sector} {use}"] = (
|
||||
total_heating * fraction * elec_fraction
|
||||
)
|
||||
).values
|
||||
|
||||
# Missing aviation
|
||||
|
||||
slicer = idx[to_fill, :, :, "Domestic aviation"]
|
||||
fill_values = eurostat.loc[slicer, "Total all products"].groupby(level=0).sum()
|
||||
slicer = idx[c, y, :, :, "Domestic aviation"]
|
||||
fill_values = eurostat.loc[slicer, "Total all products"].groupby(level=[0, 1]).sum()
|
||||
df.loc[to_fill, "total domestic aviation"] = fill_values
|
||||
|
||||
slicer = idx[to_fill, :, :, "International aviation"]
|
||||
fill_values = eurostat.loc[slicer, "Total all products"].groupby(level=0).sum()
|
||||
slicer = idx[c, y, :, :, "International aviation"]
|
||||
fill_values = eurostat.loc[slicer, "Total all products"].groupby(level=[0, 1]).sum()
|
||||
df.loc[to_fill, "total international aviation"] = fill_values
|
||||
|
||||
# missing domestic navigation
|
||||
|
||||
slicer = idx[to_fill, :, :, "Domestic Navigation"]
|
||||
fill_values = eurostat.loc[slicer, "Total all products"].groupby(level=0).sum()
|
||||
slicer = idx[c, y, :, :, "Domestic Navigation"]
|
||||
fill_values = eurostat.loc[slicer, "Total all products"].groupby(level=[0, 1]).sum()
|
||||
df.loc[to_fill, "total domestic navigation"] = fill_values
|
||||
|
||||
# split road traffic for non-IDEES
|
||||
@ -532,9 +584,11 @@ def build_energy_totals(countries, eurostat, swiss, idees):
|
||||
if "BA" in df.index:
|
||||
# fill missing data for BA (services and road energy data)
|
||||
# proportional to RS with ratio of total residential demand
|
||||
missing = df.loc["BA"] == 0.0
|
||||
ratio = df.at["BA", "total residential"] / df.at["RS", "total residential"]
|
||||
df.loc["BA", missing] = ratio * df.loc["RS", missing]
|
||||
mean_BA = df.loc["BA"].loc[2014:2021, "total residential"].mean()
|
||||
mean_RS = df.loc["RS"].loc[2014:2021, "total residential"].mean()
|
||||
ratio = mean_BA / mean_RS
|
||||
df.loc["BA"] = df.loc["BA"].replace(0.0, np.nan).values
|
||||
df.loc["BA"] = df.loc["BA"].combine_first(ratio * df.loc["RS"]).values
|
||||
|
||||
return df
|
||||
|
||||
@ -550,7 +604,7 @@ def build_district_heat_share(countries, idees):
|
||||
|
||||
district_heat_share = district_heat / total_heat
|
||||
|
||||
district_heat_share = district_heat_share.reindex(countries)
|
||||
district_heat_share = district_heat_share.reindex(countries, level="country")
|
||||
|
||||
# Missing district heating share
|
||||
dh_share = (
|
||||
@ -565,6 +619,11 @@ def build_district_heat_share(countries, idees):
|
||||
|
||||
district_heat_share.name = "district heat share"
|
||||
|
||||
# restrict to available years
|
||||
district_heat_share = (
|
||||
district_heat_share.unstack().dropna(how="all", axis=1).ffill(axis=1)
|
||||
)
|
||||
|
||||
return district_heat_share
|
||||
|
||||
|
||||
@ -578,8 +637,6 @@ def build_eea_co2(input_co2, year=1990, emissions_scope="CO2"):
|
||||
index_col = ["Country_code", "Pollutant_name", "Year", "Sector_name"]
|
||||
df = df.set_index(index_col).sort_index()
|
||||
|
||||
emissions_scope = emissions_scope
|
||||
|
||||
cts = ["CH", "EUA", "NO"] + eu28_eea
|
||||
|
||||
slicer = idx[cts, emissions_scope, year, to_ipcc.values()]
|
||||
@ -622,8 +679,8 @@ def build_eea_co2(input_co2, year=1990, emissions_scope="CO2"):
|
||||
return emissions / 1e3
|
||||
|
||||
|
||||
def build_eurostat_co2(input_eurostat, countries, year=1990):
|
||||
eurostat = build_eurostat(input_eurostat, countries, year)
|
||||
def build_eurostat_co2(eurostat, year=1990):
|
||||
eurostat_year = eurostat.xs(year, level="year")
|
||||
|
||||
specific_emissions = pd.Series(index=eurostat.columns, dtype=float)
|
||||
|
||||
@ -637,7 +694,7 @@ def build_eurostat_co2(input_eurostat, countries, year=1990):
|
||||
# Residual oil (No. 6) 0.298
|
||||
# https://www.eia.gov/electricity/annual/html/epa_a_03.html
|
||||
|
||||
return eurostat.multiply(specific_emissions).sum(axis=1)
|
||||
return eurostat_year.multiply(specific_emissions).sum(axis=1)
|
||||
|
||||
|
||||
def build_co2_totals(countries, eea_co2, eurostat_co2):
|
||||
@ -668,15 +725,30 @@ def build_co2_totals(countries, eea_co2, eurostat_co2):
|
||||
|
||||
|
||||
def build_transport_data(countries, population, idees):
|
||||
transport_data = pd.DataFrame(index=countries)
|
||||
# first collect number of cars
|
||||
|
||||
# collect number of cars
|
||||
transport_data = pd.DataFrame(idees["passenger cars"])
|
||||
|
||||
transport_data["number cars"] = idees["passenger cars"]
|
||||
countries_without_ch = set(countries) - {"CH"}
|
||||
new_index = pd.MultiIndex.from_product(
|
||||
[countries_without_ch, transport_data.index.levels[1]],
|
||||
names=["country", "year"],
|
||||
)
|
||||
|
||||
# CH from http://ec.europa.eu/eurostat/statistics-explained/index.php/Passenger_cars_in_the_EU#Luxembourg_has_the_highest_number_of_passenger_cars_per_inhabitant
|
||||
transport_data = transport_data.reindex(index=new_index)
|
||||
|
||||
# https://www.bfs.admin.ch/bfs/en/home/statistics/mobility-transport/transport-infrastructure-vehicles/vehicles/road-vehicles-stock-level-motorisation.html
|
||||
if "CH" in countries:
|
||||
transport_data.at["CH", "number cars"] = 4.136e6
|
||||
fn = snakemake.input.swiss_transport
|
||||
swiss_cars = pd.read_csv(fn, index_col=0).loc[2000:2015, ["passenger cars"]]
|
||||
|
||||
swiss_cars.index = pd.MultiIndex.from_product(
|
||||
[["CH"], swiss_cars.index], names=["country", "year"]
|
||||
)
|
||||
|
||||
transport_data = pd.concat([transport_data, swiss_cars]).sort_index()
|
||||
|
||||
transport_data.rename(columns={"passenger cars": "number cars"}, inplace=True)
|
||||
|
||||
missing = transport_data.index[transport_data["number cars"].isna()]
|
||||
if not missing.empty:
|
||||
@ -685,7 +757,16 @@ def build_transport_data(countries, population, idees):
|
||||
)
|
||||
|
||||
cars_pp = transport_data["number cars"] / population
|
||||
transport_data.loc[missing, "number cars"] = cars_pp.mean() * population
|
||||
|
||||
fill_values = {
|
||||
year: cars_pp.mean() * population for year in transport_data.index.levels[1]
|
||||
}
|
||||
fill_values = pd.DataFrame(fill_values).stack()
|
||||
fill_values = pd.DataFrame(fill_values, columns=["number cars"])
|
||||
fill_values.index.names = ["country", "year"]
|
||||
fill_values = fill_values.reindex(transport_data.index)
|
||||
|
||||
transport_data = transport_data.combine_first(fill_values)
|
||||
|
||||
# collect average fuel efficiency in kWh/km
|
||||
|
||||
@ -694,7 +775,7 @@ def build_transport_data(countries, population, idees):
|
||||
missing = transport_data.index[transport_data["average fuel efficiency"].isna()]
|
||||
if not missing.empty:
|
||||
logger.info(
|
||||
f"Missing data on fuel efficiency from:\n{list(missing)}\nFilling gapswith averaged data."
|
||||
f"Missing data on fuel efficiency from:\n{list(missing)}\nFilling gaps with averaged data."
|
||||
)
|
||||
|
||||
fill_values = transport_data["average fuel efficiency"].mean()
|
||||
@ -704,7 +785,9 @@ def build_transport_data(countries, population, idees):
|
||||
|
||||
|
||||
def rescale_idees_from_eurostat(
|
||||
idees_countries, energy, eurostat, input_eurostat, countries
|
||||
idees_countries,
|
||||
energy,
|
||||
eurostat,
|
||||
):
|
||||
"""
|
||||
Takes JRC IDEES data from 2015 and rescales it by the ratio of the eurostat
|
||||
@ -714,11 +797,10 @@ def rescale_idees_from_eurostat(
|
||||
"""
|
||||
main_cols = ["Total all products", "Electricity"]
|
||||
# read in the eurostat data for 2015
|
||||
eurostat_2015 = build_eurostat(input_eurostat, countries, 2015)[main_cols]
|
||||
eurostat_year = eurostat[main_cols]
|
||||
eurostat_2015 = eurostat.xs(2015, level="year")[main_cols]
|
||||
# calculate the ratio of the two data sets
|
||||
ratio = eurostat_year / eurostat_2015
|
||||
ratio = ratio.droplevel([1, 4])
|
||||
ratio = eurostat[main_cols] / eurostat_2015
|
||||
ratio = ratio.droplevel([2, 5])
|
||||
cols_rename = {"Total all products": "total", "Electricity": "ele"}
|
||||
index_rename = {v: k for k, v in idees_rename.items()}
|
||||
ratio.rename(columns=cols_rename, index=index_rename, inplace=True)
|
||||
@ -811,19 +893,52 @@ def rescale_idees_from_eurostat(
|
||||
]
|
||||
|
||||
for country in idees_countries:
|
||||
for sector, mapping in mappings.items():
|
||||
sector_ratio = ratio.loc[(country, slice(None), sector)]
|
||||
filling_years = [(2015, slice(2016, 2021)), (2000, slice(1990, 1999))]
|
||||
|
||||
energy.loc[country, mapping["total"]] *= sector_ratio["total"].iloc[0]
|
||||
energy.loc[country, mapping["elec"]] *= sector_ratio["ele"].iloc[0]
|
||||
for source_year, target_years in filling_years:
|
||||
|
||||
avi_d = ratio.loc[(country, slice(None), "Domestic aviation"), "total"]
|
||||
avi_i = ratio.loc[(country, "International aviation", slice(None)), "total"]
|
||||
energy.loc[country, avia_inter] *= avi_i.iloc[0]
|
||||
energy.loc[country, avia_domestic] *= avi_d.iloc[0]
|
||||
slicer_source = idx[country, source_year, :, :]
|
||||
slicer_target = idx[country, target_years, :, :]
|
||||
|
||||
nav = ratio.loc[(country, slice(None), "Domestic Navigation"), "total"]
|
||||
energy.loc[country, navigation] *= nav.iloc[0]
|
||||
for sector, mapping in mappings.items():
|
||||
sector_ratio = ratio.loc[
|
||||
(country, slice(None), slice(None), sector)
|
||||
].droplevel("lvl2")
|
||||
|
||||
energy.loc[slicer_target, mapping["total"]] = cartesian(
|
||||
sector_ratio.loc[target_years, "total"],
|
||||
energy.loc[slicer_source, mapping["total"]].squeeze(axis=0),
|
||||
).values
|
||||
energy.loc[slicer_target, mapping["elec"]] = cartesian(
|
||||
sector_ratio.loc[target_years, "ele"],
|
||||
energy.loc[slicer_source, mapping["elec"]].squeeze(axis=0),
|
||||
).values
|
||||
|
||||
level_drops = ["country", "lvl2", "lvl3"]
|
||||
|
||||
slicer = idx[country, :, :, "Domestic aviation"]
|
||||
avi_d = ratio.loc[slicer, "total"].droplevel(level_drops)
|
||||
|
||||
slicer = idx[country, :, :, "International aviation"]
|
||||
avi_i = ratio.loc[slicer, "total"].droplevel(level_drops)
|
||||
|
||||
slicer = idx[country, :, :, "Domestic Navigation"]
|
||||
nav = ratio.loc[slicer, "total"].droplevel(level_drops)
|
||||
|
||||
energy.loc[slicer_target, avia_inter] = cartesian(
|
||||
avi_i.loc[target_years],
|
||||
energy.loc[slicer_source, avia_inter].squeeze(axis=0),
|
||||
).values
|
||||
|
||||
energy.loc[slicer_target, avia_domestic] = cartesian(
|
||||
avi_d.loc[target_years],
|
||||
energy.loc[slicer_source, avia_domestic].squeeze(axis=0),
|
||||
).values
|
||||
|
||||
energy.loc[slicer_target, navigation] = cartesian(
|
||||
nav.loc[target_years],
|
||||
energy.loc[slicer_source, navigation].squeeze(axis=0),
|
||||
).values
|
||||
|
||||
return energy
|
||||
|
||||
@ -845,20 +960,21 @@ if __name__ == "__main__":
|
||||
countries = snakemake.params.countries
|
||||
idees_countries = pd.Index(countries).intersection(eu28)
|
||||
|
||||
data_year = params["energy_totals_year"]
|
||||
input_eurostat = snakemake.input.eurostat
|
||||
eurostat = build_eurostat(input_eurostat, countries, data_year)
|
||||
swiss = build_swiss(data_year)
|
||||
# data from idees only exists from 2000-2015. read in latest data and rescale later
|
||||
idees = build_idees(idees_countries, min(2015, data_year))
|
||||
eurostat = build_eurostat(
|
||||
input_eurostat,
|
||||
countries,
|
||||
nprocesses=snakemake.threads,
|
||||
disable_progressbar=snakemake.config["run"].get("disable_progressbar", False),
|
||||
)
|
||||
swiss = build_swiss()
|
||||
idees = build_idees(idees_countries)
|
||||
|
||||
energy = build_energy_totals(countries, eurostat, swiss, idees)
|
||||
|
||||
if data_year > 2015:
|
||||
logger.info("Data year is after 2015. Rescaling IDEES data based on eurostat.")
|
||||
energy = rescale_idees_from_eurostat(
|
||||
idees_countries, energy, eurostat, input_eurostat, countries
|
||||
)
|
||||
# Data from IDEES only exists from 2000-2015.
|
||||
logger.info("Extrapolate IDEES data based on eurostat for years 2015-2021.")
|
||||
energy = rescale_idees_from_eurostat(idees_countries, energy, eurostat)
|
||||
|
||||
energy.to_csv(snakemake.output.energy_name)
|
||||
|
||||
@ -871,7 +987,7 @@ if __name__ == "__main__":
|
||||
base_year_emissions = params["base_emissions_year"]
|
||||
emissions_scope = snakemake.params.energy["emissions"]
|
||||
eea_co2 = build_eea_co2(snakemake.input.co2, base_year_emissions, emissions_scope)
|
||||
eurostat_co2 = build_eurostat_co2(input_eurostat, countries, base_year_emissions)
|
||||
eurostat_co2 = build_eurostat_co2(eurostat, base_year_emissions)
|
||||
|
||||
co2 = build_co2_totals(countries, eea_co2, eurostat_co2)
|
||||
co2.to_csv(snakemake.output.co2_name)
|
||||
|
81
scripts/build_heat_totals.py
Normal file
81
scripts/build_heat_totals.py
Normal file
@ -0,0 +1,81 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
"""
|
||||
Approximate heat demand for all weather years.
|
||||
"""
|
||||
|
||||
from itertools import product
|
||||
|
||||
import pandas as pd
|
||||
from numpy.polynomial import Polynomial
|
||||
|
||||
idx = pd.IndexSlice
|
||||
|
||||
|
||||
def approximate_heat_demand(energy_totals, hdd):
|
||||
|
||||
countries = hdd.columns.intersection(energy_totals.index.levels[0])
|
||||
|
||||
demands = {}
|
||||
|
||||
for kind, sector in product(["total", "electricity"], ["services", "residential"]):
|
||||
# reduced number years (2007-2021) for regression because it implicitly
|
||||
# assumes a constant building stock
|
||||
row = idx[:, 2007:2021]
|
||||
col = f"{kind} {sector} space"
|
||||
demand = energy_totals.loc[row, col].unstack(0)
|
||||
|
||||
# ffill for GB in 2020- and bfill for CH 2007-2009
|
||||
# compromise to have more years available for the fit
|
||||
demand = demand.ffill(axis=0).bfill(axis=0)
|
||||
|
||||
demand_approx = {}
|
||||
|
||||
for c in countries:
|
||||
Y = demand[c].dropna()
|
||||
X = hdd.loc[Y.index, c]
|
||||
|
||||
# Sometimes (looking at you, Switzerland) we only have
|
||||
# _one_ year of heating data to base the prediction on. In
|
||||
# this case we add a point at 0, 0 to make a "polynomial"
|
||||
# fit work.
|
||||
if len(X) == len(Y) == 1:
|
||||
X.loc[-1] = 0
|
||||
Y.loc[-1] = 0
|
||||
|
||||
to_predict = hdd.index.difference(Y.index)
|
||||
X_pred = hdd.loc[to_predict, c]
|
||||
|
||||
p = Polynomial.fit(X, Y, 1)
|
||||
Y_pred = p(X_pred)
|
||||
|
||||
demand_approx[c] = pd.Series(Y_pred, index=to_predict)
|
||||
|
||||
demand_approx = pd.DataFrame(demand_approx)
|
||||
demand_approx = pd.concat([demand, demand_approx]).sort_index()
|
||||
demands[f"{kind} {sector} space"] = demand_approx.groupby(
|
||||
demand_approx.index
|
||||
).sum()
|
||||
|
||||
demands = pd.concat(demands).unstack().T.clip(lower=0)
|
||||
demands.index.names = ["country", "year"]
|
||||
|
||||
return demands
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if "snakemake" not in globals():
|
||||
from _helpers import mock_snakemake
|
||||
|
||||
snakemake = mock_snakemake("build_heat_totals")
|
||||
|
||||
hdd = pd.read_csv(snakemake.input.hdd, index_col=0).T
|
||||
hdd.index = hdd.index.astype(int)
|
||||
|
||||
energy_totals = pd.read_csv(snakemake.input.energy_totals, index_col=[0, 1])
|
||||
|
||||
heat_demand = approximate_heat_demand(energy_totals, hdd)
|
||||
|
||||
heat_demand.to_csv(snakemake.output.heat_totals)
|
@ -10,7 +10,7 @@ from itertools import product
|
||||
|
||||
import pandas as pd
|
||||
import xarray as xr
|
||||
from _helpers import generate_periodic_profiles, set_scenario_config
|
||||
from _helpers import generate_periodic_profiles, get_snapshots, set_scenario_config
|
||||
|
||||
if __name__ == "__main__":
|
||||
if "snakemake" not in globals():
|
||||
@ -24,7 +24,9 @@ if __name__ == "__main__":
|
||||
)
|
||||
set_scenario_config(snakemake)
|
||||
|
||||
snapshots = pd.date_range(freq="h", **snakemake.params.snapshots)
|
||||
snapshots = get_snapshots(
|
||||
snakemake.params.snapshots, snakemake.params.drop_leap_day
|
||||
)
|
||||
|
||||
daily_space_heat_demand = (
|
||||
xr.open_dataarray(snakemake.input.heat_demand)
|
||||
|
@ -65,17 +65,17 @@ import atlite
|
||||
import country_converter as coco
|
||||
import geopandas as gpd
|
||||
import pandas as pd
|
||||
from _helpers import configure_logging, set_scenario_config
|
||||
from _helpers import configure_logging, get_snapshots, set_scenario_config
|
||||
from numpy.polynomial import Polynomial
|
||||
|
||||
cc = coco.CountryConverter()
|
||||
|
||||
|
||||
def get_eia_annual_hydro_generation(fn, countries):
|
||||
def get_eia_annual_hydro_generation(fn, countries, capacities=False):
|
||||
# in billion kWh/a = TWh/a
|
||||
df = pd.read_csv(
|
||||
fn, skiprows=2, index_col=1, na_values=[" ", "--"], decimal=","
|
||||
).iloc[1:, 1:]
|
||||
df = pd.read_csv(fn, skiprows=2, index_col=1, na_values=[" ", "--"]).iloc[1:, 1:]
|
||||
df.index = df.index.str.strip()
|
||||
df.columns = df.columns.astype(int)
|
||||
|
||||
former_countries = {
|
||||
"Former Czechoslovakia": dict(
|
||||
@ -99,7 +99,7 @@ def get_eia_annual_hydro_generation(fn, countries):
|
||||
}
|
||||
|
||||
for k, v in former_countries.items():
|
||||
period = [str(i) for i in range(v["start"], v["end"] + 1)]
|
||||
period = [i for i in range(v["start"], v["end"] + 1)]
|
||||
ratio = df.loc[v["countries"]].T.dropna().sum()
|
||||
ratio /= ratio.sum()
|
||||
for country in v["countries"]:
|
||||
@ -118,11 +118,49 @@ def get_eia_annual_hydro_generation(fn, countries):
|
||||
df.index = cc.convert(df.index, to="iso2")
|
||||
df.index.name = "countries"
|
||||
|
||||
df = df.T[countries] * 1e6 # in MWh/a
|
||||
# convert to MW of MWh/a
|
||||
factor = 1e3 if capacities else 1e6
|
||||
df = df.T[countries] * factor
|
||||
|
||||
return df
|
||||
|
||||
|
||||
def correct_eia_stats_by_capacity(eia_stats, fn, countries, baseyear=2019):
|
||||
cap = get_eia_annual_hydro_generation(fn, countries, capacities=True)
|
||||
ratio = cap / cap.loc[baseyear]
|
||||
eia_stats_corrected = eia_stats / ratio
|
||||
to_keep = ["AL", "AT", "CH", "DE", "GB", "NL", "RS", "RO", "SK"]
|
||||
to_correct = eia_stats_corrected.columns.difference(to_keep)
|
||||
eia_stats.loc[:, to_correct] = eia_stats_corrected.loc[:, to_correct]
|
||||
|
||||
|
||||
def approximate_missing_eia_stats(eia_stats, runoff_fn, countries):
|
||||
runoff = pd.read_csv(runoff_fn, index_col=0).T[countries]
|
||||
runoff.index = runoff.index.astype(int)
|
||||
|
||||
# fix outliers; exceptional floods in 1977-1979 in ES & PT
|
||||
runoff.loc[1978, ["ES", "PT"]] = runoff.loc[1979, ["ES", "PT"]]
|
||||
|
||||
runoff_eia = runoff.loc[eia_stats.index]
|
||||
|
||||
eia_stats_approximated = {}
|
||||
|
||||
for c in countries:
|
||||
X = runoff_eia[c]
|
||||
Y = eia_stats[c]
|
||||
|
||||
to_predict = runoff.index.difference(eia_stats.index)
|
||||
X_pred = runoff.loc[to_predict, c]
|
||||
|
||||
p = Polynomial.fit(X, Y, 1)
|
||||
Y_pred = p(X_pred)
|
||||
|
||||
eia_stats_approximated[c] = pd.Series(Y_pred, index=to_predict)
|
||||
|
||||
eia_stats_approximated = pd.DataFrame(eia_stats_approximated)
|
||||
return pd.concat([eia_stats, eia_stats_approximated]).sort_index()
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
if __name__ == "__main__":
|
||||
@ -134,7 +172,10 @@ if __name__ == "__main__":
|
||||
set_scenario_config(snakemake)
|
||||
|
||||
params_hydro = snakemake.params.hydro
|
||||
cutout = atlite.Cutout(snakemake.input.cutout)
|
||||
|
||||
time = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day)
|
||||
|
||||
cutout = atlite.Cutout(snakemake.input.cutout).sel(time=time)
|
||||
|
||||
countries = snakemake.params.countries
|
||||
country_shapes = (
|
||||
@ -147,6 +188,26 @@ if __name__ == "__main__":
|
||||
fn = snakemake.input.eia_hydro_generation
|
||||
eia_stats = get_eia_annual_hydro_generation(fn, countries)
|
||||
|
||||
config_hydro = snakemake.config["renewable"]["hydro"]
|
||||
|
||||
if config_hydro.get("eia_correct_by_capacity"):
|
||||
fn = snakemake.input.eia_hydro_capacity
|
||||
correct_eia_stats_by_capacity(eia_stats, fn, countries)
|
||||
|
||||
if config_hydro.get("eia_approximate_missing"):
|
||||
fn = snakemake.input.era5_runoff
|
||||
eia_stats = approximate_missing_eia_stats(eia_stats, fn, countries)
|
||||
|
||||
eia_stats.to_csv(snakemake.output.eia_hydro)
|
||||
|
||||
contained_years = pd.date_range(freq="YE", **snakemake.params.snapshots).year
|
||||
norm_year = config_hydro.get("eia_norm_year")
|
||||
missing_years = contained_years.difference(eia_stats.index)
|
||||
if norm_year:
|
||||
eia_stats.loc[contained_years] = eia_stats.loc[norm_year]
|
||||
elif missing_years.any():
|
||||
eia_stats.loc[missing_years] = eia_stats.median()
|
||||
|
||||
inflow = cutout.runoff(
|
||||
shapes=country_shapes,
|
||||
smooth=True,
|
||||
@ -157,4 +218,4 @@ if __name__ == "__main__":
|
||||
if "clip_min_inflow" in params_hydro:
|
||||
inflow = inflow.where(inflow > params_hydro["clip_min_inflow"], 0)
|
||||
|
||||
inflow.to_netcdf(snakemake.output[0])
|
||||
inflow.to_netcdf(snakemake.output.profile)
|
||||
|
@ -58,7 +58,7 @@ import numpy as np
|
||||
import pandas as pd
|
||||
import pypsa
|
||||
import xarray as xr
|
||||
from _helpers import configure_logging, set_scenario_config
|
||||
from _helpers import configure_logging, get_snapshots, set_scenario_config
|
||||
from shapely.geometry import LineString as Line
|
||||
from shapely.geometry import Point
|
||||
|
||||
@ -146,10 +146,9 @@ if __name__ == "__main__":
|
||||
configure_logging(snakemake)
|
||||
set_scenario_config(snakemake)
|
||||
|
||||
snapshots = snakemake.params.snapshots
|
||||
|
||||
n = pypsa.Network(snakemake.input.base_network)
|
||||
time = pd.date_range(freq="h", **snapshots)
|
||||
time = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day)
|
||||
|
||||
cutout = atlite.Cutout(snakemake.input.cutout).sel(time=time)
|
||||
|
||||
da = calculate_line_rating(n, cutout)
|
||||
|
@ -94,9 +94,8 @@ if __name__ == "__main__":
|
||||
configure_logging(snakemake)
|
||||
set_scenario_config(snakemake)
|
||||
|
||||
cutouts = snakemake.input.cutouts
|
||||
xs, Xs, ys, Ys = zip(*(determine_cutout_xXyY(cutout) for cutout in cutouts))
|
||||
bounds = transform_bounds(4326, 3035, min(xs), min(ys), max(Xs), max(Ys))
|
||||
x, X, y, Y = determine_cutout_xXyY(snakemake.input.cutout)
|
||||
bounds = transform_bounds(4326, 3035, x, y, X, Y)
|
||||
transform, out_shape = get_transform_and_shape(bounds, res=100)
|
||||
|
||||
# adjusted boundaries
|
||||
|
@ -21,7 +21,9 @@ if __name__ == "__main__":
|
||||
if "snakemake" not in globals():
|
||||
from _helpers import mock_snakemake
|
||||
|
||||
snakemake = mock_snakemake("build_population_layouts")
|
||||
snakemake = mock_snakemake(
|
||||
"build_population_layouts",
|
||||
)
|
||||
|
||||
configure_logging(snakemake)
|
||||
set_scenario_config(snakemake)
|
||||
|
@ -15,17 +15,28 @@ if __name__ == "__main__":
|
||||
|
||||
snakemake = mock_snakemake(
|
||||
"build_population_weighted_energy_totals",
|
||||
kind="heat",
|
||||
simpl="",
|
||||
clusters=48,
|
||||
clusters=60,
|
||||
)
|
||||
set_scenario_config(snakemake)
|
||||
|
||||
config = snakemake.config["energy"]
|
||||
|
||||
if snakemake.wildcards.kind == "heat":
|
||||
years = pd.date_range(freq="h", **snakemake.params.snapshots).year.unique()
|
||||
assert len(years) == 1, "Currently only works for single year."
|
||||
data_year = years[0]
|
||||
else:
|
||||
data_year = int(config["energy_totals_year"])
|
||||
|
||||
pop_layout = pd.read_csv(snakemake.input.clustered_pop_layout, index_col=0)
|
||||
|
||||
energy_totals = pd.read_csv(snakemake.input.energy_totals, index_col=0)
|
||||
totals = pd.read_csv(snakemake.input.energy_totals, index_col=[0, 1])
|
||||
totals = totals.xs(data_year, level="year")
|
||||
|
||||
nodal_energy_totals = energy_totals.loc[pop_layout.ct].fillna(0.0)
|
||||
nodal_energy_totals.index = pop_layout.index
|
||||
nodal_energy_totals = nodal_energy_totals.multiply(pop_layout.fraction, axis=0)
|
||||
nodal_totals = totals.loc[pop_layout.ct].fillna(0.0)
|
||||
nodal_totals.index = pop_layout.index
|
||||
nodal_totals = nodal_totals.multiply(pop_layout.fraction, axis=0)
|
||||
|
||||
nodal_energy_totals.to_csv(snakemake.output[0])
|
||||
nodal_totals.to_csv(snakemake.output[0])
|
||||
|
@ -186,9 +186,8 @@ import time
|
||||
import atlite
|
||||
import geopandas as gpd
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import xarray as xr
|
||||
from _helpers import configure_logging, set_scenario_config
|
||||
from _helpers import configure_logging, get_snapshots, set_scenario_config
|
||||
from dask.distributed import Client
|
||||
from pypsa.geo import haversine
|
||||
from shapely.geometry import LineString
|
||||
@ -218,7 +217,6 @@ if __name__ == "__main__":
|
||||
|
||||
correction_factor = params.get("correction_factor", 1.0)
|
||||
capacity_per_sqkm = params["capacity_per_sqkm"]
|
||||
snapshots = snakemake.params.snapshots
|
||||
|
||||
if correction_factor != 1.0:
|
||||
logger.info(f"correction_factor is set as {correction_factor}")
|
||||
@ -228,7 +226,8 @@ if __name__ == "__main__":
|
||||
else:
|
||||
client = None
|
||||
|
||||
sns = pd.date_range(freq="h", **snapshots)
|
||||
sns = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day)
|
||||
|
||||
cutout = atlite.Cutout(snakemake.input.cutout).sel(time=sns)
|
||||
regions = gpd.read_file(snakemake.input.regions)
|
||||
assert not regions.empty, (
|
||||
|
@ -44,7 +44,7 @@ if __name__ == "__main__":
|
||||
|
||||
cf = snakemake.params.sequestration_potential
|
||||
|
||||
gdf = gpd.read_file(snakemake.input.sequestration_potential[0])
|
||||
gdf = gpd.read_file(snakemake.input.sequestration_potential)
|
||||
|
||||
regions = gpd.read_file(snakemake.input.regions_offshore)
|
||||
if cf["include_onshore"]:
|
||||
|
@ -59,8 +59,7 @@ if __name__ == "__main__":
|
||||
configure_logging(snakemake)
|
||||
set_scenario_config(snakemake)
|
||||
|
||||
cutouts = snakemake.input.cutouts
|
||||
xs, Xs, ys, Ys = zip(*(determine_cutout_xXyY(cutout) for cutout in cutouts))
|
||||
x, X, y, Y = determine_cutout_xXyY(snakemake.input.cutout)
|
||||
|
||||
with zipfile.ZipFile(snakemake.input.ship_density) as zip_f:
|
||||
resources = Path(snakemake.output[0]).parent
|
||||
@ -68,7 +67,7 @@ if __name__ == "__main__":
|
||||
zip_f.extract(fn, resources)
|
||||
with rioxarray.open_rasterio(resources / fn) as ship_density:
|
||||
ship_density = ship_density.drop_vars(["band"]).sel(
|
||||
x=slice(min(xs), max(Xs)), y=slice(max(Ys), min(ys))
|
||||
x=slice(x, X), y=slice(Y, y)
|
||||
)
|
||||
ship_density.rio.to_raster(snakemake.output[0])
|
||||
|
||||
|
@ -18,7 +18,7 @@ if __name__ == "__main__":
|
||||
from _helpers import mock_snakemake
|
||||
|
||||
snakemake = mock_snakemake(
|
||||
"build_shipping_demand_per_node",
|
||||
"build_shipping_demand",
|
||||
simpl="",
|
||||
clusters=48,
|
||||
)
|
||||
@ -26,9 +26,10 @@ if __name__ == "__main__":
|
||||
|
||||
scope = gpd.read_file(snakemake.input.scope).geometry[0]
|
||||
regions = gpd.read_file(snakemake.input.regions).set_index("name")
|
||||
demand = pd.read_csv(snakemake.input.demand, index_col=0)[
|
||||
demand = pd.read_csv(snakemake.input.demand, index_col=[0, 1])[
|
||||
"total international navigation"
|
||||
]
|
||||
demand = demand.xs(snakemake.params.energy_totals_year, level=1)
|
||||
|
||||
# read port data into GeoDataFrame
|
||||
with open(snakemake.input.ports, "r", encoding="latin_1") as f:
|
||||
|
@ -9,9 +9,8 @@ Build solar thermal collector time series.
|
||||
import atlite
|
||||
import geopandas as gpd
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import xarray as xr
|
||||
from _helpers import set_scenario_config
|
||||
from _helpers import get_snapshots, set_scenario_config
|
||||
from dask.distributed import Client, LocalCluster
|
||||
|
||||
if __name__ == "__main__":
|
||||
@ -30,8 +29,10 @@ if __name__ == "__main__":
|
||||
client = Client(cluster, asynchronous=True)
|
||||
|
||||
config = snakemake.params.solar_thermal
|
||||
config.pop("cutout", None)
|
||||
|
||||
time = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day)
|
||||
|
||||
time = pd.date_range(freq="h", **snakemake.params.snapshots)
|
||||
cutout = atlite.Cutout(snakemake.input.cutout).sel(time=time)
|
||||
|
||||
clustered_regions = (
|
||||
|
@ -9,9 +9,8 @@ Build time series for air and soil temperatures per clustered model region.
|
||||
import atlite
|
||||
import geopandas as gpd
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import xarray as xr
|
||||
from _helpers import set_scenario_config
|
||||
from _helpers import get_snapshots, set_scenario_config
|
||||
from dask.distributed import Client, LocalCluster
|
||||
|
||||
if __name__ == "__main__":
|
||||
@ -29,7 +28,8 @@ if __name__ == "__main__":
|
||||
cluster = LocalCluster(n_workers=nprocesses, threads_per_worker=1)
|
||||
client = Client(cluster, asynchronous=True)
|
||||
|
||||
time = pd.date_range(freq="h", **snakemake.params.snapshots)
|
||||
time = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day)
|
||||
|
||||
cutout = atlite.Cutout(snakemake.input.cutout).sel(time=time)
|
||||
|
||||
clustered_regions = (
|
||||
|
@ -13,14 +13,22 @@ import logging
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import xarray as xr
|
||||
from _helpers import configure_logging, generate_periodic_profiles, set_scenario_config
|
||||
from _helpers import (
|
||||
configure_logging,
|
||||
generate_periodic_profiles,
|
||||
get_snapshots,
|
||||
set_scenario_config,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def build_nodal_transport_data(fn, pop_layout):
|
||||
|
||||
def build_nodal_transport_data(fn, pop_layout, year):
|
||||
# get numbers of car and fuel efficiency per country
|
||||
transport_data = pd.read_csv(fn, index_col=0)
|
||||
transport_data = pd.read_csv(fn, index_col=[0, 1])
|
||||
transport_data = transport_data.xs(min(2015, year), level="year")
|
||||
|
||||
|
||||
# break number of cars down to nodal level based on population density
|
||||
nodal_transport_data = transport_data.loc[pop_layout.ct].fillna(0.0)
|
||||
@ -175,12 +183,15 @@ if __name__ == "__main__":
|
||||
|
||||
options = snakemake.params.sector
|
||||
|
||||
snapshots = pd.date_range(freq="h", **snakemake.params.snapshots, tz="UTC")
|
||||
snapshots = get_snapshots(
|
||||
snakemake.params.snapshots, snakemake.params.drop_leap_day, tz="UTC"
|
||||
)
|
||||
|
||||
nyears = len(snapshots) / 8760
|
||||
|
||||
energy_totals_year = snakemake.params.energy_totals_year
|
||||
nodal_transport_data = build_nodal_transport_data(
|
||||
snakemake.input.transport_data, pop_layout
|
||||
snakemake.input.transport_data, pop_layout, energy_totals_year
|
||||
)
|
||||
|
||||
transport_demand = build_transport_demand(
|
||||
|
@ -231,7 +231,7 @@ def distribute_clusters(n, n_clusters, focus_weights=None, solver_name="scip"):
|
||||
.pipe(normed)
|
||||
)
|
||||
|
||||
N = n.buses.groupby(["country", "sub_network"]).size()
|
||||
N = n.buses.groupby(["country", "sub_network"]).size()[L.index]
|
||||
|
||||
assert (
|
||||
n_clusters >= len(N) and n_clusters <= N.sum()
|
||||
@ -267,7 +267,7 @@ def distribute_clusters(n, n_clusters, focus_weights=None, solver_name="scip"):
|
||||
m.objective = (clusters * clusters - 2 * clusters * L * n_clusters).sum()
|
||||
if solver_name == "gurobi":
|
||||
logging.getLogger("gurobipy").propagate = False
|
||||
elif solver_name not in ["scip", "cplex"]:
|
||||
elif solver_name not in ["scip", "cplex", "xpress", "copt", "mosek"]:
|
||||
logger.info(
|
||||
f"The configured solver `{solver_name}` does not support quadratic objectives. Falling back to `scip`."
|
||||
)
|
||||
@ -454,7 +454,7 @@ if __name__ == "__main__":
|
||||
if "snakemake" not in globals():
|
||||
from _helpers import mock_snakemake
|
||||
|
||||
snakemake = mock_snakemake("cluster_network", simpl="", clusters="37")
|
||||
snakemake = mock_snakemake("cluster_network", simpl="", clusters="40")
|
||||
configure_logging(snakemake)
|
||||
set_scenario_config(snakemake)
|
||||
|
||||
@ -471,7 +471,7 @@ if __name__ == "__main__":
|
||||
conventional_carriers = set(params.conventional_carriers)
|
||||
if snakemake.wildcards.clusters.endswith("m"):
|
||||
n_clusters = int(snakemake.wildcards.clusters[:-1])
|
||||
aggregate_carriers = params.conventional_carriers & aggregate_carriers
|
||||
aggregate_carriers = conventional_carriers & aggregate_carriers
|
||||
elif snakemake.wildcards.clusters.endswith("c"):
|
||||
n_clusters = int(snakemake.wildcards.clusters[:-1])
|
||||
aggregate_carriers = aggregate_carriers - conventional_carriers
|
||||
|
@ -1,28 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2020-2024 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
"""
|
||||
Copy used configuration files and important scripts for archiving.
|
||||
"""
|
||||
|
||||
|
||||
import yaml
|
||||
from _helpers import set_scenario_config
|
||||
|
||||
if __name__ == "__main__":
|
||||
if "snakemake" not in globals():
|
||||
from _helpers import mock_snakemake
|
||||
|
||||
snakemake = mock_snakemake("copy_config")
|
||||
|
||||
set_scenario_config(snakemake)
|
||||
|
||||
with open(snakemake.output[0], "w") as yaml_file:
|
||||
yaml.dump(
|
||||
snakemake.config,
|
||||
yaml_file,
|
||||
default_flow_style=False,
|
||||
allow_unicode=True,
|
||||
sort_keys=False,
|
||||
)
|
@ -13,7 +13,7 @@ import sys
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import pypsa
|
||||
from _helpers import configure_logging, set_scenario_config
|
||||
from _helpers import configure_logging, get_snapshots, set_scenario_config
|
||||
from prepare_sector_network import prepare_costs
|
||||
|
||||
idx = pd.IndexSlice
|
||||
@ -645,7 +645,8 @@ def make_summaries(networks_dict):
|
||||
]
|
||||
|
||||
columns = pd.MultiIndex.from_tuples(
|
||||
networks_dict.keys(), names=["cluster", "ll", "opt", "planning_horizon"]
|
||||
networks_dict.keys(),
|
||||
names=["cluster", "ll", "opt", "planning_horizon"],
|
||||
)
|
||||
|
||||
df = {output: pd.DataFrame(columns=columns, dtype=float) for output in outputs}
|
||||
@ -689,7 +690,8 @@ if __name__ == "__main__":
|
||||
for planning_horizon in snakemake.params.scenario["planning_horizons"]
|
||||
}
|
||||
|
||||
Nyears = len(pd.date_range(freq="h", **snakemake.params.snapshots)) / 8760
|
||||
time = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day)
|
||||
Nyears = len(time) / 8760
|
||||
|
||||
costs_db = prepare_costs(
|
||||
snakemake.input.costs,
|
||||
|
@ -204,6 +204,9 @@ def average_every_nhours(n, offset):
|
||||
m = n.copy(with_time=False)
|
||||
|
||||
snapshot_weightings = n.snapshot_weightings.resample(offset).sum()
|
||||
sns = snapshot_weightings.index
|
||||
if snakemake.params.drop_leap_day:
|
||||
sns = sns[~((sns.month == 2) & (sns.day == 29))]
|
||||
m.set_snapshots(snapshot_weightings.index)
|
||||
m.snapshot_weightings = snapshot_weightings
|
||||
|
||||
@ -304,7 +307,11 @@ if __name__ == "__main__":
|
||||
from _helpers import mock_snakemake
|
||||
|
||||
snakemake = mock_snakemake(
|
||||
"prepare_network", simpl="", clusters="37", ll="v1.0", opts="Co2L-4H"
|
||||
"prepare_network",
|
||||
simpl="",
|
||||
clusters="37",
|
||||
ll="v1.0",
|
||||
opts="Co2L-4H",
|
||||
)
|
||||
configure_logging(snakemake)
|
||||
set_scenario_config(snakemake)
|
||||
|
@ -539,5 +539,8 @@ if __name__ == "__main__":
|
||||
# set carbon constraints
|
||||
n = set_carbon_constraints(n)
|
||||
|
||||
# update meta
|
||||
n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards)))
|
||||
|
||||
# export network
|
||||
n.export_to_netcdf(snakemake.output[0])
|
||||
|
@ -23,8 +23,15 @@ from _helpers import (
|
||||
update_config_from_wildcards,
|
||||
)
|
||||
from add_electricity import calculate_annuity, sanitize_carriers, sanitize_locations
|
||||
from build_energy_totals import build_co2_totals, build_eea_co2, build_eurostat_co2
|
||||
|
||||
from build_transport_demand import transport_degree_factor
|
||||
|
||||
from build_energy_totals import (
|
||||
build_co2_totals,
|
||||
build_eea_co2,
|
||||
build_eurostat,
|
||||
build_eurostat_co2,
|
||||
)
|
||||
from networkx.algorithms import complement
|
||||
from networkx.algorithms.connectivity.edge_augmentation import k_edge_augmentation
|
||||
from prepare_network import maybe_adjust_costs_and_potentials
|
||||
@ -256,12 +263,10 @@ def co2_emissions_year(
|
||||
"""
|
||||
eea_co2 = build_eea_co2(input_co2, year, emissions_scope)
|
||||
|
||||
# TODO: read Eurostat data from year > 2014
|
||||
eurostat = build_eurostat(input_eurostat, countries)
|
||||
|
||||
# this only affects the estimation of CO2 emissions for BA, RS, AL, ME, MK
|
||||
if year > 2014:
|
||||
eurostat_co2 = build_eurostat_co2(input_eurostat, countries, 2014)
|
||||
else:
|
||||
eurostat_co2 = build_eurostat_co2(input_eurostat, countries, year)
|
||||
eurostat_co2 = build_eurostat_co2(eurostat, year)
|
||||
|
||||
co2_totals = build_co2_totals(countries, eea_co2, eurostat_co2)
|
||||
|
||||
@ -813,6 +818,10 @@ def average_every_nhours(n, offset):
|
||||
m = n.copy(with_time=False)
|
||||
|
||||
snapshot_weightings = n.snapshot_weightings.resample(offset).sum()
|
||||
sns = snapshot_weightings.index
|
||||
if snakemake.params.drop_leap_day:
|
||||
sns = sns[~((sns.month == 2) & (sns.day == 29))]
|
||||
snapshot_weightings = snapshot_weightings.loc[sns]
|
||||
m.set_snapshots(snapshot_weightings.index)
|
||||
m.snapshot_weightings = snapshot_weightings
|
||||
|
||||
@ -3751,6 +3760,10 @@ if __name__ == "__main__":
|
||||
pop_weighted_energy_totals = (
|
||||
pd.read_csv(snakemake.input.pop_weighted_energy_totals, index_col=0) * nyears
|
||||
)
|
||||
pop_weighted_heat_totals = (
|
||||
pd.read_csv(snakemake.input.pop_weighted_heat_totals, index_col=0) * nyears
|
||||
)
|
||||
pop_weighted_energy_totals.update(pop_weighted_heat_totals)
|
||||
|
||||
patch_electricity_network(n)
|
||||
|
||||
|
@ -25,9 +25,10 @@ if __name__ == "__main__":
|
||||
set_scenario_config(snakemake)
|
||||
|
||||
version = snakemake.params.version
|
||||
baseurl = (
|
||||
f"https://raw.githubusercontent.com/PyPSA/technology-data/{version}/outputs/"
|
||||
)
|
||||
if "/" in version:
|
||||
baseurl = f"https://raw.githubusercontent.com/{version}/outputs/"
|
||||
else:
|
||||
baseurl = f"https://raw.githubusercontent.com/PyPSA/technology-data/{version}/outputs/"
|
||||
filepath = Path(snakemake.output[0])
|
||||
url = baseurl + filepath.name
|
||||
|
||||
|
@ -36,6 +36,7 @@ import numpy as np
|
||||
import pandas as pd
|
||||
import pypsa
|
||||
import xarray as xr
|
||||
import yaml
|
||||
from _benchmark import memory_logger
|
||||
from _helpers import (
|
||||
configure_logging,
|
||||
@ -165,7 +166,7 @@ def _add_land_use_constraint_m(n, planning_horizons, config):
|
||||
|
||||
previous_years = [
|
||||
str(y)
|
||||
for y in planning_horizons + grouping_years
|
||||
for y in set(planning_horizons + grouping_years)
|
||||
if y < int(snakemake.wildcards.planning_horizons)
|
||||
]
|
||||
|
||||
@ -969,4 +970,13 @@ if __name__ == "__main__":
|
||||
logger.info(f"Maximum memory usage: {mem.mem_usage}")
|
||||
|
||||
n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards)))
|
||||
n.export_to_netcdf(snakemake.output[0])
|
||||
n.export_to_netcdf(snakemake.output.network)
|
||||
|
||||
with open(snakemake.output.config, "w") as file:
|
||||
yaml.dump(
|
||||
n.meta,
|
||||
file,
|
||||
default_flow_style=False,
|
||||
allow_unicode=True,
|
||||
sort_keys=False,
|
||||
)
|
||||
|
6
test.sh
6
test.sh
@ -2,8 +2,12 @@
|
||||
#
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
set -x && \
|
||||
|
||||
snakemake -call solve_elec_networks --configfile config/test/config.electricity.yaml --rerun-triggers=mtime && \
|
||||
snakemake -call all --configfile config/test/config.overnight.yaml --rerun-triggers=mtime && \
|
||||
snakemake -call all --configfile config/test/config.myopic.yaml --rerun-triggers=mtime && \
|
||||
snakemake -call all --configfile config/test/config.perfect.yaml --rerun-triggers=mtime && \
|
||||
snakemake -call all --configfile config/test/config.scenarios.yaml --rerun-triggers=mtime -n
|
||||
snakemake -call all --configfile config/test/config.scenarios.yaml --rerun-triggers=mtime -n && \
|
||||
|
||||
set +x
|
||||
|
Loading…
Reference in New Issue
Block a user