Source code for ego.tools.results

# -*- coding: utf-8 -*-
# Copyright 2016-2018 Europa-Universität Flensburg,
# Flensburg University of Applied Sciences,
# Centre for Sustainable Energy Systems
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# File description
"""This module include the results functions for analyze and creating results
based on eTraGo or eDisGo for eGo.
"""
# TODO  - write results to database

import io
import logging
import os

logger = logging.getLogger("ego")

if not "READTHEDOCS" in os.environ:
    import numpy as np
    import pandas as pd

    from ego.tools.economics import get_generator_investment

__copyright__ = (
    "Flensburg University of Applied Sciences, Europa-Universität"
    "Flensburg, Centre for Sustainable Energy Systems"
)
__license__ = "GNU Affero General Public License Version 3 (AGPL-3.0)"
__author__ = "wolfbunke"


[docs]def create_etrago_results(network, scn_name): # rename function """ Create eTraGo results Parameters ---------- network : :class:`~.etrago.tools.io.NetworkScenario` eTraGo ``NetworkScenario`` based on PyPSA Network. See also `pypsa.network <https://pypsa.org/doc/components.html#network>`_ scn_name : str Name of used scenario Returns ------- generator : :pandas:`pandas.DataFrame<dataframe>` Result of generator as DataFrame in ``ego.etrago.generator`` """ etg = network etrago = pd.DataFrame() etrago["p_nom"] = etg.generators.groupby("carrier")["p_nom"].sum() # in MW etrago["p_nom_opt"] = etg.generators.groupby("carrier")["p_nom_opt"].sum() # in MW # power price etrago["marginal_cost"] = etg.generators.groupby("carrier")["marginal_cost"].mean() # in in [EUR] # get power price by production MWh _t.p * marginal_cost power_price = ( etg.generators_t.p[etg.generators[etg.generators.control != "Slack"].index] * etg.generators.marginal_cost[ etg.generators[etg.generators.control != "Slack"].index ] ) # without Slack power_price = power_price.groupby(etg.generators.carrier, axis=1).sum().sum() etrago["power_price"] = power_price # use country code p_by_carrier = ( pd.concat( [ etg.generators_t.p[ etg.generators[etg.generators.control != "Slack"].index ], etg.generators_t.p[ etg.generators[etg.generators.control == "Slack"].index ] .iloc[:, 0] .apply(lambda x: x if x > 0 else 0), ], axis=1, ) .groupby(etg.generators.carrier, axis=1) .sum() ) # in MWh etrago["p"] = p_by_carrier.sum() # add invetment result_invest = get_generator_investment(network, scn_name) etrago = etrago.assign(investment_costs=result_invest["carrier_costs"]) return etrago
if __name__ == "__main__": pass