diff --git a/elmada/eu_pwl.py b/elmada/eu_pwl.py index 4561251..be7034a 100644 --- a/elmada/eu_pwl.py +++ b/elmada/eu_pwl.py @@ -157,7 +157,6 @@ def get_clean_merit_order_for_min_max_approximation(sort_by_fuel=False) -> pd.Da @lru_cache(maxsize=3) def prep_installed_generation_capacity(year=2019, country="DE", source="entsoe") -> pd.Series: - if source == "power_plant_list": ser = ( from_opsd.merit_order(year=year)[["fuel_draf", "capa"]] @@ -210,7 +209,6 @@ def get_share_cc(country: str) -> float: def discretize_merit_order_per_fuel( mo_f: pd.DataFrame, country: str, pp_size_method: str = "from_geo_scraped" ) -> pd.DataFrame: - concat_list = [] # if country=="DE": # pp_size_method = "from_Germany" diff --git a/elmada/from_entsoe.py b/elmada/from_entsoe.py index b08ca0e..e063e3b 100644 --- a/elmada/from_entsoe.py +++ b/elmada/from_entsoe.py @@ -4,8 +4,6 @@ import entsoe import numpy as np import pandas as pd -from entsoe import EntsoePandasClient -from entsoe import mappings as entsoe_mp from elmada import exceptions from elmada import helper as hp @@ -15,12 +13,6 @@ logger = logging.getLogger(__name__) logger.setLevel(level=logging.WARN) -# workaround for a bug in entsoe package v0.2.* see https://github.com/EnergieID/entsoe-py/issues/51 -entsoe_mp.TIMEZONE_MAPPINGS["IT-NORD-AT"] = "Europe/Rome" -entsoe_mp.TIMEZONE_MAPPINGS["IT-NORD-FR"] = "Europe/Rome" -entsoe_mp.TIMEZONE_MAPPINGS["IT-GR"] = "Europe/Rome" -#################################################### - def prep_XEFs(year: int = 2019, freq: str = "60min", country: str = "DE") -> pd.DataFrame: """Prepare grid mix emission factors from historic generation.""" @@ -48,8 +40,8 @@ def prep_XEFs(year: int = 2019, freq: str = "60min", country: str = "DE") -> pd. return df -def _get_client() -> EntsoePandasClient: - return EntsoePandasClient(api_key=hp.get_api_key("entsoe")) +def _get_client() -> entsoe.EntsoePandasClient: + return entsoe.EntsoePandasClient(api_key=hp.get_api_key("entsoe")) def _get_timestamps(year: int, tz: str) -> Tuple: @@ -138,7 +130,6 @@ def load_el_national_generation( fillna: bool = True, resample: bool = True, ) -> pd.DataFrame: - assert year in range(2000, 2100), f"{year} is not a valid year" assert freq in [None, "15min", "30min", "60min"], f"{freq} is not a valid frequency" assert country in mp.EUROPE_COUNTRIES @@ -173,7 +164,7 @@ def load_el_national_generation( if fillna: df = fill_special_missing_data_points_for_gen(df=df, country=country, year=year) - df = df.fillna(method="ffill").fillna(method="bfill") + df = df.fillna().ffill().fillna().bfill() if resample: df = hp.resample(df, year=year, start_freq=data_freq, target_freq=freq) @@ -237,7 +228,6 @@ def _query_generation_monthly(year, country, client, tz) -> pd.DataFrame: d = {} for month in range(1, 13): - start, end = _get_timestamps_for_month(year, tz, month) try: @@ -363,21 +353,21 @@ def prep_dayahead_prices( resample: bool = True, ) -> pd.Series: assert year in range(2000, 2100), f"{year} is not a valid year" - assert country in entsoe_mp.BIDDING_ZONES + assert country in entsoe.Area.__dict__ fp = paths.CACHE_DIR / f"{year}_{freq}_{country}_dayahead_c_el_entsoe.parquet" - bidding_zone = get_bidding_zone(country, year) + # bidding_zone = get_bidding_zone(country, year) if cache and fp.exists(): ser = hp.read(fp) else: - ser = _query_day_ahead_prices(year, bidding_zone) + ser = _query_day_ahead_prices(year, country) if cache: hp.write(ser, fp) - + if drop_ducplicates: ser = ser.groupby(ser.index).first() @@ -428,18 +418,12 @@ def get_bidding_zone(country: str, year: int) -> str: else: country = "DE-AT-LU" - country_to_bidding = { - "NO": "NO-1", - "DK": "DK-2", - "IT": "IT-NORD", - "SE": "SE-1", - "IE": "IE-SEM", - } + country_to_bidding = {"NO": "NO-1", "DK": "DK-2", "IT": "IT-NORD", "SE": "SE-1", "IE": "IE-SEM"} return country_to_bidding.get(country, country) def get_timezone(country: str) -> str: - return entsoe_mp.TIMEZONE_MAPPINGS.get(country, "Europe/Brussels") + return entsoe.mappings.lookup_area(country).tz ############################# diff --git a/elmada/helper.py b/elmada/helper.py index af416f1..04cdbd5 100644 --- a/elmada/helper.py +++ b/elmada/helper.py @@ -224,7 +224,7 @@ def resample( func = downsample return func( - df=df, year=year, start_freq=start_freq, target_freq=target_freq, aggfunc=aggfunc, + df=df, year=year, start_freq=start_freq, target_freq=target_freq, aggfunc=aggfunc ) @@ -284,7 +284,7 @@ def upsample( """ df = df.copy() df.index = make_datetimeindex(year, freq=start_freq) - df = df.resample(target_freq).pad() + df = df.resample(target_freq).ffill() convert_factor = int_from_freq(start_freq) / int_from_freq(target_freq) if aggfunc == "sum": df /= convert_factor @@ -360,7 +360,7 @@ def remove_outlier( def fill_outlier_and_nan( - df: Union[pd.Series, pd.DataFrame], zscore_threshold: int = 3, method: str = "linear", + df: Union[pd.Series, pd.DataFrame], zscore_threshold: int = 3, method: str = "linear" ) -> Union[pd.Series, pd.DataFrame]: df = remove_outlier(df, zscore_threshold) diff --git a/setup.py b/setup.py index e4b7178..2a907a1 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,7 @@ install_requires=[ "appdirs", "beautifulsoup4", - "entsoe-py==0.2.10", + "entsoe-py", "ipython", "lxml", "matplotlib",