Source code for edisgo.io.timeseries_import

import os
import pandas as pd
from edisgo.tools import session_scope

if "READTHEDOCS" not in os.environ:
    from egoio.db_tables import model_draft, supply


[docs]def import_feedin_timeseries(config_data, weather_cell_ids, timeindex): """ Import RES feed-in time series data and process ToDo: Update docstring. Parameters ---------- config_data : dict Dictionary containing config data from config files. weather_cell_ids : :obj:`list` List of weather cell id's (integers) to obtain feed-in data for. Returns ------- :pandas:`pandas.DataFrame<DataFrame>` DataFrame with time series for active power feed-in, normalized to a capacity of 1 MW. """ def _retrieve_timeseries_from_oedb(session, timeindex): """Retrieve time series from oedb """ # ToDo: add option to retrieve subset of time series # ToDo: find the reference power class for mvgrid/w_id and insert # instead of 4 feedin_sqla = ( session.query( orm_feedin.w_id, orm_feedin.source, orm_feedin.feedin ) .filter(orm_feedin.w_id.in_(weather_cell_ids)) .filter(orm_feedin.power_class.in_([0, 4])) .filter(orm_feedin_version) .filter( orm_feedin.weather_year.in_(timeindex.year.unique().values) ) ) feedin = pd.read_sql_query( feedin_sqla.statement, session.bind, index_col=["source", "w_id"] ) return feedin if config_data["data_source"]["oedb_data_source"] == "model_draft": orm_feedin_name = config_data["model_draft"]["res_feedin_data"] orm_feedin = model_draft.__getattribute__(orm_feedin_name) orm_feedin_version = 1 == 1 else: orm_feedin_name = config_data["versioned"]["res_feedin_data"] orm_feedin = supply.__getattribute__(orm_feedin_name) orm_feedin_version = ( orm_feedin.version == config_data["versioned"]["version"] ) if timeindex is None: timeindex = pd.date_range("1/1/2011", periods=8760, freq="H") with session_scope() as session: feedin = _retrieve_timeseries_from_oedb(session, timeindex) if feedin.empty: raise ValueError( "The year you inserted could not be imported from " "the oedb. So far only 2011 is provided. Please " "check website for updates." ) feedin.sort_index(axis=0, inplace=True) recasted_feedin_dict = {} for type_w_id in feedin.index: recasted_feedin_dict[type_w_id] = feedin.loc[type_w_id, :].values[0] # Todo: change when possibility for other years is given conversion_timeindex = pd.date_range("1/1/2011", periods=8760, freq="H") feedin = pd.DataFrame(recasted_feedin_dict, index=conversion_timeindex) # rename 'wind_onshore' and 'wind_offshore' to 'wind' new_level = [ _ if _ not in ["wind_onshore"] else "wind" for _ in feedin.columns.levels[0] ] feedin.columns.set_levels(new_level, level=0, inplace=True) feedin.columns.rename("type", level=0, inplace=True) feedin.columns.rename("weather_cell_id", level=1, inplace=True) return feedin.loc[timeindex]