Source code for reegis.storages

# -*- coding: utf-8 -*-

"""Processing a list of power plants in Germany.

SPDX-FileCopyrightText: 2016-2021 Uwe Krien <krien@uni-bremen.de>

SPDX-License-Identifier: MIT
"""
__copyright__ = "Uwe Krien <krien@uni-bremen.de>"
__license__ = "MIT"


# Python libraries
import os

# External libraries
import pandas as pd
import numpy as np
from shapely.geometry import Point

# internal modules
from reegis import config as cfg
from reegis import geometries


[docs]def lat_lon2point(df): """Create shapely point object of latitude and longitude.""" return Point(df['Wikipedia', 'longitude'], df['Wikipedia', 'latitude'])
[docs]def pumped_hydroelectric_storage_by_region(regions, year, name=None): """ Fetch pumped hydroelectric storage by region. This function is based on static data. Please adapt the source file for years > 2018. Parameters ---------- regions : geopandas.geoDataFrame name : str or None Returns ------- pd.DataFrame Examples -------- >>> federal_states=geometries.get_federal_states_polygon() >>> phes=pumped_hydroelectric_storage_by_region( ... federal_states, 2002, 'federal_states') >>> int(phes.turbine.sum()) 5533 >>> phes=pumped_hydroelectric_storage_by_region( ... federal_states, 2018, 'federal_states') >>> int(phes.turbine.sum()) 6593 >>> int(phes.energy.sum()) 37841 >>> round(phes.loc['BW'].pump_eff, 2) 0.86 """ phes_raw = pd.read_csv( os.path.join( cfg.get("paths", "static_sources"), cfg.get("storages", "hydro_storages"), ), header=[0, 1], ).sort_index(1) phes_raw = phes_raw.loc[phes_raw["Wikipedia", "commissioning"] < year] phes_raw = phes_raw.loc[phes_raw["Wikipedia", "ensured_operation"] >= year] phes = phes_raw["dena"].copy() # add geometry from wikipedia phes_raw = phes_raw[phes_raw["Wikipedia", "longitude"].notnull()] phes["geom"] = phes_raw.apply(lat_lon2point, axis=1) # add energy from ZFES because dena values seem to be corrupted phes["energy"] = phes_raw["ZFES", "energy"] phes["name"] = phes_raw["ZFES", "name"] phes["efficiency"] = phes["efficiency"].fillna( cfg.get("storages", "default_efficiency") ) # remove storages that do not have an entry for energy capacity phes = phes[phes.energy.notnull()] # create a GeoDataFrame with geom column gphes = geometries.create_geo_df(phes) if name is None: name = "{0}_region".format(cfg.get("init", "map")) gphes = geometries.spatial_join_with_buffer( gphes, regions, name=name, limit=0 ) # create turbine and pump efficiency from overall efficiency (square root) # multiply the efficiency with the capacity to group with "sum()" gphes["pump_eff"] = np.sqrt(gphes.efficiency) * gphes.pump gphes["turbine_eff"] = np.sqrt(gphes.efficiency) * gphes.turbine phes = gphes.groupby(name).sum() # divide by the capacity to get the efficiency and remove overall # efficiency phes["pump_eff"] = phes.pump_eff / phes.pump phes["turbine_eff"] = phes.turbine_eff / phes.turbine del phes["efficiency"] return phes
if __name__ == "__main__": pass