openstef 3.4.56__py3-none-any.whl → 4.0.0a3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. openstef-4.0.0a3.dist-info/METADATA +177 -0
  2. openstef-4.0.0a3.dist-info/RECORD +4 -0
  3. {openstef-3.4.56.dist-info → openstef-4.0.0a3.dist-info}/WHEEL +1 -2
  4. openstef/__init__.py +0 -14
  5. openstef/__main__.py +0 -3
  6. openstef/app_settings.py +0 -19
  7. openstef/data/NL_terrestrial_radiation.csv +0 -25585
  8. openstef/data/NL_terrestrial_radiation.csv.license +0 -3
  9. openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_baseline_model.z +0 -0
  10. openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_baseline_model.z.license +0 -3
  11. openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_model_card.md +0 -18
  12. openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_model_card.md.license +0 -3
  13. openstef/data/dutch_holidays.csv +0 -1759
  14. openstef/data/dutch_holidays.csv.license +0 -3
  15. openstef/data/pv_single_coefs.csv +0 -601
  16. openstef/data/pv_single_coefs.csv.license +0 -3
  17. openstef/data_classes/__init__.py +0 -3
  18. openstef/data_classes/data_prep.py +0 -99
  19. openstef/data_classes/model_specifications.py +0 -30
  20. openstef/data_classes/prediction_job.py +0 -135
  21. openstef/data_classes/split_function.py +0 -97
  22. openstef/enums.py +0 -140
  23. openstef/exceptions.py +0 -74
  24. openstef/feature_engineering/__init__.py +0 -3
  25. openstef/feature_engineering/apply_features.py +0 -138
  26. openstef/feature_engineering/bidding_zone_to_country_mapping.py +0 -106
  27. openstef/feature_engineering/cyclic_features.py +0 -161
  28. openstef/feature_engineering/data_preparation.py +0 -152
  29. openstef/feature_engineering/feature_adder.py +0 -206
  30. openstef/feature_engineering/feature_applicator.py +0 -202
  31. openstef/feature_engineering/general.py +0 -141
  32. openstef/feature_engineering/holiday_features.py +0 -231
  33. openstef/feature_engineering/lag_features.py +0 -165
  34. openstef/feature_engineering/missing_values_transformer.py +0 -141
  35. openstef/feature_engineering/rolling_features.py +0 -58
  36. openstef/feature_engineering/weather_features.py +0 -492
  37. openstef/metrics/__init__.py +0 -3
  38. openstef/metrics/figure.py +0 -303
  39. openstef/metrics/metrics.py +0 -486
  40. openstef/metrics/reporter.py +0 -222
  41. openstef/model/__init__.py +0 -3
  42. openstef/model/basecase.py +0 -82
  43. openstef/model/confidence_interval_applicator.py +0 -242
  44. openstef/model/fallback.py +0 -77
  45. openstef/model/metamodels/__init__.py +0 -3
  46. openstef/model/metamodels/feature_clipper.py +0 -90
  47. openstef/model/metamodels/grouped_regressor.py +0 -222
  48. openstef/model/metamodels/missing_values_handler.py +0 -138
  49. openstef/model/model_creator.py +0 -214
  50. openstef/model/objective.py +0 -426
  51. openstef/model/objective_creator.py +0 -65
  52. openstef/model/regressors/__init__.py +0 -3
  53. openstef/model/regressors/arima.py +0 -197
  54. openstef/model/regressors/custom_regressor.py +0 -64
  55. openstef/model/regressors/dazls.py +0 -116
  56. openstef/model/regressors/flatliner.py +0 -95
  57. openstef/model/regressors/gblinear_quantile.py +0 -334
  58. openstef/model/regressors/lgbm.py +0 -29
  59. openstef/model/regressors/linear.py +0 -90
  60. openstef/model/regressors/linear_quantile.py +0 -305
  61. openstef/model/regressors/regressor.py +0 -114
  62. openstef/model/regressors/xgb.py +0 -52
  63. openstef/model/regressors/xgb_multioutput_quantile.py +0 -261
  64. openstef/model/regressors/xgb_quantile.py +0 -228
  65. openstef/model/serializer.py +0 -431
  66. openstef/model/standard_deviation_generator.py +0 -81
  67. openstef/model_selection/__init__.py +0 -3
  68. openstef/model_selection/model_selection.py +0 -311
  69. openstef/monitoring/__init__.py +0 -3
  70. openstef/monitoring/performance_meter.py +0 -92
  71. openstef/monitoring/teams.py +0 -203
  72. openstef/pipeline/__init__.py +0 -3
  73. openstef/pipeline/create_basecase_forecast.py +0 -133
  74. openstef/pipeline/create_component_forecast.py +0 -168
  75. openstef/pipeline/create_forecast.py +0 -171
  76. openstef/pipeline/optimize_hyperparameters.py +0 -317
  77. openstef/pipeline/train_create_forecast_backtest.py +0 -163
  78. openstef/pipeline/train_model.py +0 -561
  79. openstef/pipeline/utils.py +0 -52
  80. openstef/postprocessing/__init__.py +0 -3
  81. openstef/postprocessing/postprocessing.py +0 -275
  82. openstef/preprocessing/__init__.py +0 -3
  83. openstef/preprocessing/preprocessing.py +0 -42
  84. openstef/settings.py +0 -15
  85. openstef/tasks/__init__.py +0 -3
  86. openstef/tasks/calculate_kpi.py +0 -324
  87. openstef/tasks/create_basecase_forecast.py +0 -118
  88. openstef/tasks/create_components_forecast.py +0 -162
  89. openstef/tasks/create_forecast.py +0 -145
  90. openstef/tasks/create_solar_forecast.py +0 -420
  91. openstef/tasks/create_wind_forecast.py +0 -80
  92. openstef/tasks/optimize_hyperparameters.py +0 -135
  93. openstef/tasks/split_forecast.py +0 -273
  94. openstef/tasks/train_model.py +0 -224
  95. openstef/tasks/utils/__init__.py +0 -3
  96. openstef/tasks/utils/dependencies.py +0 -107
  97. openstef/tasks/utils/predictionjobloop.py +0 -243
  98. openstef/tasks/utils/taskcontext.py +0 -160
  99. openstef/validation/__init__.py +0 -3
  100. openstef/validation/validation.py +0 -322
  101. openstef-3.4.56.dist-info/METADATA +0 -154
  102. openstef-3.4.56.dist-info/RECORD +0 -102
  103. openstef-3.4.56.dist-info/top_level.txt +0 -1
  104. /openstef-3.4.56.dist-info/LICENSE → /openstef-4.0.0a3.dist-info/licenses/LICENSE.md +0 -0
@@ -1,322 +0,0 @@
1
- # SPDX-FileCopyrightText: 2017-2023 Contributors to the OpenSTEF project <korte.termijn.prognoses@alliander.com> # noqa E501>
2
- #
3
- # SPDX-License-Identifier: MPL-2.0
4
- import logging
5
- import math
6
- from datetime import datetime, timedelta
7
- from typing import Union
8
-
9
- import numpy as np
10
- import pandas as pd
11
- import structlog
12
-
13
- from openstef.exceptions import InputDataOngoingZeroFlatlinerError
14
- from openstef.model.regressors.regressor import OpenstfRegressor
15
- from openstef.preprocessing.preprocessing import replace_repeated_values_with_nan
16
- from openstef.settings import Settings
17
-
18
-
19
- def validate(
20
- pj_id: Union[int, str],
21
- data: pd.DataFrame,
22
- flatliner_threshold_minutes: Union[int, None],
23
- resolution_minutes: int,
24
- ) -> pd.DataFrame:
25
- """Validate prediction job and timeseries data.
26
-
27
- Steps:
28
- 1. Check if input dataframe has a datetime index.
29
- 1. Check if a zero flatliner pattern is ongoing (i.e. all recent measurements are zero).
30
- 2. Replace repeated values for longer than flatliner_threshold_minutes with NaN.
31
-
32
- Args:
33
- pj_id: ind/str, used to identify log statements
34
- data: pd.DataFrame where the first column should be the target. index=datetimeIndex
35
- flatliner_threshold_minutes: int indicating the number of minutes after which constant load is considered a flatline.
36
- if None, the validation is effectively skipped
37
- resolution_minutes: The forecasting resolution in minutes.
38
-
39
- Returns:
40
- Dataframe where repeated values are set to None
41
-
42
- Raises:
43
- InputDataOngoingZeroFlatlinerError: If all recent load measurements are zero.
44
-
45
- """
46
- structlog.configure(
47
- wrapper_class=structlog.make_filtering_bound_logger(
48
- logging.getLevelName(Settings.log_level)
49
- )
50
- )
51
- logger = structlog.get_logger(__name__)
52
-
53
- if not isinstance(data.index, pd.DatetimeIndex):
54
- raise ValueError("Input dataframe does not have a datetime index.")
55
-
56
- if flatliner_threshold_minutes is None:
57
- logger.info("Skipping validation of input data", pj_id=pj_id)
58
- return data
59
-
60
- zero_flatliner_ongoing = detect_ongoing_zero_flatliner(
61
- load=data.iloc[:, 0], duration_threshold_minutes=flatliner_threshold_minutes
62
- )
63
-
64
- if zero_flatliner_ongoing:
65
- raise InputDataOngoingZeroFlatlinerError(
66
- "All recent load measurements are zero."
67
- )
68
-
69
- flatliner_threshold_repetitions = math.ceil(
70
- flatliner_threshold_minutes / resolution_minutes
71
- )
72
-
73
- # Drop 'false' measurements. e.g. where load appears to be constant.
74
- data = replace_repeated_values_with_nan(
75
- data, threshold=flatliner_threshold_repetitions, column_name=data.columns[0]
76
- )
77
- num_repeated_values = len(data) - len(data.iloc[:, 0].dropna())
78
- if num_repeated_values > 0:
79
- frac_const_load_values = num_repeated_values / len(data.index)
80
-
81
- logger.info(
82
- f"Found {num_repeated_values} values of constant load (repeated values),"
83
- " converted to NaN value.",
84
- cleansing_step="repeated_values",
85
- pj_id=pj_id,
86
- num_values=num_repeated_values,
87
- frac_values=frac_const_load_values,
88
- )
89
-
90
- return data
91
-
92
-
93
- def drop_target_na(data: pd.DataFrame) -> pd.DataFrame:
94
- structlog.configure(
95
- wrapper_class=structlog.make_filtering_bound_logger(
96
- logging.getLevelName(Settings.log_level)
97
- )
98
- )
99
- logger = structlog.get_logger(__name__)
100
- len_original = len(data)
101
- # Remove where load is NA, NaN features are preserved
102
- data = data.loc[np.isnan(data.iloc[:, 0]) != True, :] # noqa E712
103
- num_removed_values = len_original - len(data)
104
- if num_removed_values > 0:
105
- logger.info(
106
- f"Removed {num_removed_values} NaN values",
107
- num_removed_values=num_removed_values,
108
- )
109
-
110
- return data
111
-
112
-
113
- def is_data_sufficient(
114
- data: pd.DataFrame,
115
- completeness_threshold: float,
116
- minimal_table_length: int,
117
- model: OpenstfRegressor = None,
118
- ) -> bool:
119
- """Check if enough data is left after validation and cleaning to continue with model training.
120
-
121
- Args:
122
- data: pd.DataFrame() with cleaned input data.
123
- model: model which contains all information regarding trained model
124
- completeness_threshold: float with threshold for completeness:
125
- 1 for fully complete, 0 for anything could be missing.
126
- minimal_table_length: int with minimal table length (in rows)
127
-
128
- Returns:
129
- True if amount of data is sufficient, False otherwise.
130
-
131
- """
132
- if model is None:
133
- weights = None # Remove horizon & load column
134
- else:
135
- weights = model.feature_importance_dataframe
136
-
137
- structlog.configure(
138
- wrapper_class=structlog.make_filtering_bound_logger(
139
- logging.getLevelName(Settings.log_level)
140
- )
141
- )
142
- logger = structlog.get_logger(__name__)
143
- # Set output variable
144
- is_sufficient = True
145
-
146
- # Calculate completeness
147
- completeness = calc_completeness_features(
148
- data, weights, time_delayed=True, homogenise=False
149
- )
150
- table_length = data.shape[0]
151
-
152
- # Check if completeness is up to the standards
153
- if completeness < completeness_threshold:
154
- logger.warning(
155
- "Input data is not sufficient, completeness too low",
156
- completeness=completeness,
157
- completeness_threshold=completeness_threshold,
158
- )
159
- is_sufficient = False
160
-
161
- # Check if absolute amount of rows is sufficient
162
- if table_length < minimal_table_length:
163
- logger.warning(
164
- "Input data is not sufficient, table length too short",
165
- table_length=table_length,
166
- table_length_threshold=minimal_table_length,
167
- )
168
- is_sufficient = False
169
-
170
- return is_sufficient
171
-
172
-
173
- def calc_completeness_features(
174
- df: pd.DataFrame,
175
- weights: pd.DataFrame,
176
- time_delayed: bool = False,
177
- homogenise: bool = True,
178
- ) -> float:
179
- """Calculate the (weighted) completeness of a dataframe.
180
-
181
- NOTE: NA values count as incomplete
182
-
183
- Args:
184
- df: Dataframe with a datetimeIndex index
185
- weights: Array-compatible with size equal to columns of df
186
- (excl. load&horizon), used to weight the completeness of each column
187
- time_delayed: Should there be a correction for T-x columns
188
- homogenise: Should the index be resampled to median time delta -
189
- only available for DatetimeIndex
190
-
191
- Returns:
192
- Fraction of completeness
193
-
194
- """
195
- df_copy = df.copy(
196
- deep=True
197
- ) # Make deep copy to maintain original dataframe in pipeline
198
-
199
- # Remove load and horizon from data_with_features dataframe to make sure columns are equal
200
- if "load" in df_copy:
201
- df_copy.drop("load", inplace=True, axis=1)
202
- if "horizon" in df_copy:
203
- df_copy.drop("horizon", inplace=True, axis=1)
204
-
205
- if weights is None:
206
- weights = np.array([1] * ((len(df_copy.columns))))
207
-
208
- length_weights = len(weights)
209
- length_features = len(df_copy.columns)
210
-
211
- # Returns the list
212
- if type(weights) != np.ndarray:
213
- list_features = weights.index.tolist()
214
- df_copy = df_copy[list_features] # Reorder the df to match weights index (list)
215
- weights = weights.weight
216
-
217
- if length_weights != length_features:
218
- raise ValueError(
219
- "Input data is not sufficient, number of features used in model is unequal to amount of columns in data"
220
- )
221
- completeness_per_column_dataframe = calc_completeness_dataframe(
222
- df_copy, time_delayed, homogenise
223
- )
224
-
225
- # scale to weights and normalize
226
- completeness = (completeness_per_column_dataframe * weights).sum() / weights.sum()
227
-
228
- return completeness
229
-
230
-
231
- def detect_ongoing_zero_flatliner(
232
- load: pd.Series,
233
- duration_threshold_minutes: int,
234
- ) -> bool:
235
- """Detects if the latest measurements follow a zero flatliner pattern.
236
-
237
- Args:
238
- load (pd.Series): A timeseries of measured load with a datetime index.
239
- duration_threshold_minutes (int): A zero flatliner is only detected if it exceeds the threshold duration.
240
-
241
- Returns:
242
- bool: Indicating whether or not there is a zero flatliner ongoing for the given load.
243
-
244
- """
245
- # remove all timestamps in the future
246
- load = load[load.index.tz_localize(None) <= datetime.utcnow()]
247
- latest_measurement_time = load.dropna().index.max()
248
- latest_measurements = load[
249
- latest_measurement_time - timedelta(minutes=duration_threshold_minutes) :
250
- ].dropna()
251
-
252
- return (latest_measurements == 0).all() & (not latest_measurements.empty)
253
-
254
-
255
- def calc_completeness_dataframe(
256
- df: pd.DataFrame,
257
- time_delayed: bool = False,
258
- homogenise: bool = True,
259
- ) -> pd.DataFrame:
260
- """Calculate the completeness of each column in dataframe.
261
-
262
- NOTE: NA values count as incomplete
263
-
264
- Args:
265
- df: Dataframe with a datetimeIndex index
266
- time_delayed: Should there be a correction for T-x columns
267
- homogenise: Should the index be resampled to median time delta -
268
- only available for DatetimeIndex
269
-
270
- Returns:
271
- Dataframe with fraction of completeness per column
272
-
273
- """
274
- structlog.configure(
275
- wrapper_class=structlog.make_filtering_bound_logger(
276
- logging.getLevelName(Settings.log_level)
277
- )
278
- )
279
- logger = structlog.get_logger(__name__)
280
-
281
- if homogenise and isinstance(df.index, pd.DatetimeIndex) and len(df) > 0:
282
- median_timediff = int(
283
- df.reset_index().iloc[:, 0].diff().median().total_seconds() / 60.0
284
- )
285
- df = df.resample("{:d}T".format(median_timediff)).mean()
286
-
287
- if time_delayed is False:
288
- # Calculate completeness
289
- # Completeness per column
290
- completeness_per_column_dataframe = df.count() / len(df)
291
-
292
- # if timeDelayed is True, we correct that time-delayed columns
293
- # also in the best case will have NA values. E.g. T-2d is not available
294
- # for times ahead of more than 2 days
295
- elif time_delayed:
296
- # assume 15 minute forecast resolution
297
- # timecols: {delay:number of points expected to be missing}
298
- # number of points expected to be missing = numberOfPointsUpToTwoDaysAhead - numberOfPointsAvailable
299
- timecols = {
300
- x: len(df) - eval(x[2:].replace("min", "/60").replace("d", "*24.0")) / 0.25
301
- for x in df.columns
302
- if x[:2] == "T-"
303
- }
304
-
305
- non_na_count = df.count()
306
-
307
- for col, value in timecols.items():
308
- if non_na_count[col] > value:
309
- logger.warning(
310
- "The provided input data (features) contains more values than is to be expected from analysis",
311
- feature=col,
312
- number_non_na=non_na_count[col],
313
- expected_numbers_timedelayed=value,
314
- )
315
-
316
- # Correct for day_ahead_electricity_price being only expected to be available up to 24h
317
- if "day_ahead_electricity_price" in non_na_count.index:
318
- non_na_count["day_ahead_electricity_price"] += max([len(df) - 96, 0])
319
-
320
- completeness_per_column_dataframe = non_na_count / (len(df))
321
-
322
- return completeness_per_column_dataframe
@@ -1,154 +0,0 @@
1
- Metadata-Version: 2.2
2
- Name: openstef
3
- Version: 3.4.56
4
- Summary: Open short term energy forecaster
5
- Home-page: https://github.com/OpenSTEF/openstef
6
- Author: Alliander N.V
7
- Author-email: korte.termijn.prognoses@alliander.com
8
- License: MPL-2.0
9
- Keywords: energy,forecasting,machinelearning
10
- Classifier: Development Status :: 5 - Production/Stable
11
- Classifier: Intended Audience :: Developers
12
- Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
13
- Classifier: Programming Language :: Python :: 3.11
14
- Requires-Python: >=3.11.0
15
- Description-Content-Type: text/markdown
16
- License-File: LICENSE
17
- Requires-Dist: holidays==0.21
18
- Requires-Dist: joblib==1.3.2
19
- Requires-Dist: lightgbm~=3.3
20
- Requires-Dist: matplotlib~=3.7
21
- Requires-Dist: mlflow~=2.3
22
- Requires-Dist: networkx~=3.1
23
- Requires-Dist: numpy<3,>=2
24
- Requires-Dist: optuna~=3.1
25
- Requires-Dist: optuna-integration~=3.6
26
- Requires-Dist: pandas~=2.2.0
27
- Requires-Dist: plotly~=5.18
28
- Requires-Dist: pvlib==0.10.5
29
- Requires-Dist: pydantic~=2.4
30
- Requires-Dist: pydantic-settings~=2.3
31
- Requires-Dist: pymsteams~=0.2.2
32
- Requires-Dist: scikit-learn<1.6,>=1.3
33
- Requires-Dist: scipy~=1.10
34
- Requires-Dist: statsmodels<1.0.0,>=0.13.5
35
- Requires-Dist: structlog<25,>=23.1
36
- Requires-Dist: xgboost~=2.0
37
- Dynamic: author
38
- Dynamic: author-email
39
- Dynamic: classifier
40
- Dynamic: description
41
- Dynamic: description-content-type
42
- Dynamic: home-page
43
- Dynamic: keywords
44
- Dynamic: license
45
- Dynamic: requires-dist
46
- Dynamic: requires-python
47
- Dynamic: summary
48
-
49
- <!--
50
- SPDX-FileCopyrightText: 2017-2023 Contributors to the OpenSTEF project <korte.termijn.prognoses@alliander.com>
51
-
52
- SPDX-License-Identifier: MPL-2.0
53
- -->
54
-
55
- # OpenSTEF
56
- <!-- Badges -->
57
- [![Downloads](https://static.pepy.tech/badge/openstef)](https://pepy.tech/project/openstef)
58
- [![Downloads](https://static.pepy.tech/badge/openstef/month)](https://pepy.tech/project/openstef)
59
- [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5585/badge)](https://bestpractices.coreinfrastructure.org/projects/5585)
60
- <!-- SonarCloud badges -->
61
- [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=OpenSTEF_openstef&metric=bugs)](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
62
- [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=OpenSTEF_openstef&metric=code_smells)](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
63
- [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=OpenSTEF_openstef&metric=coverage)](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
64
- [![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=OpenSTEF_openstef&metric=duplicated_lines_density)](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
65
- [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=OpenSTEF_openstef&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
66
- [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=OpenSTEF_openstef&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
67
- [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=OpenSTEF_openstef&metric=security_rating)](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
68
- [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=OpenSTEF_openstef&metric=sqale_index)](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
69
- [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=OpenSTEF_openstef&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
70
-
71
- OpenSTEF is a Python package designed for generating short-term forecasts in the energy sector. The repository includes all the essential components required for machine learning pipelines that facilitate the forecasting process. To utilize the package, users are required to furnish their own data storage and retrieval interface.
72
-
73
- # Table of contents
74
- - [OpenSTEF](#openstef)
75
- - [Table of contents](#table-of-contents)
76
- - [External information sources](#external-information-sources)
77
- - [Installation](#installation)
78
- - [Usage](#usage)
79
- - [Example notebooks](#example-notebooks)
80
- - [Reference Implementation](#reference-implementation)
81
- - [Database connector for OpenSTEF](#database-connector-for-openstef)
82
- - [License](license)
83
- - [Contributing](#contributing)
84
- - [Contact](#contact)
85
-
86
- # External information sources
87
- - [Documentation website](https://openstef.github.io/openstef/index.html);
88
- - [Python package](https://pypi.org/project/openstef/);
89
- - [Linux Foundation project page](https://www.lfenergy.org/projects/openstef/);
90
- - [Documentation on dashboard](https://raw.githack.com/OpenSTEF/.github/main/profile/html/openstef_dashboard_doc.html);
91
- - [Video about OpenSTEF](https://www.lfenergy.org/forecasting-to-create-a-more-resilient-optimized-grid/);
92
-
93
- # Installation
94
-
95
- ## Install the openstef package
96
-
97
- ```shell
98
- pip install openstef
99
- ```
100
-
101
- ### Remark regarding installation within a **conda environment on Windows**
102
-
103
- A version of the pywin32 package will be installed as a secondary dependency along with the installation of the openstef package. Since conda relies on an old version of pywin32, the new installation can break conda's functionality. The following command can solve this issue:
104
- ```shell
105
- pip install pywin32==300
106
- ```
107
- For more information on this issue see the [readme of pywin32](https://github.com/mhammond/pywin32#installing-via-pip) or [this Github issue](https://github.com/mhammond/pywin32/issues/1865#issue-1212752696).
108
-
109
- ## Remark regarding installation on Apple Silicon
110
-
111
- If you want to install the `openstef` package on Apple Silicon (Mac with M1-chip or newer), you can encounter issues with the dependencies, such as `xgboost`. Solution:
112
-
113
- 1. Run `brew install libomp` (if you haven’t installed Homebrew: [follow instructions here](https://brew.sh/))
114
- 2. If your interpreter can not find the `libomp` installation in `/usr/local/bin`, it is probably in `/opt/brew/Cellar`. Run:
115
- ```sh
116
- mkdir -p /usr/local/opt/libomp/
117
- ln -s /opt/brew/Cellar/libomp/{your_version}/lib /usr/local/opt/libomp/lib
118
- ```
119
- 3. Uninstall `xgboost` with `pip` (`pip uninstall xgboost`) and install with `conda-forge` (`conda install -c conda-forge xgboost`)
120
- 4. If you encounter similar issues with `lightgbm`: uninstall `lightgbm` with `pip` (`pip uninstall lightgbm`) and install later version with `conda-forge` (`conda install -c conda-forge 'lightgbm>=4.2.0'`)
121
-
122
- # Usage
123
-
124
- ## Example notebooks
125
- To help you get started, a set of fundamental example notebooks has been created. You can access these offline examples [here](https://github.com/OpenSTEF/openstef-offline-example).
126
-
127
- ## Reference Implementation
128
- A complete implementation including databases, user interface, example data, etc. is available at: https://github.com/OpenSTEF/openstef-reference
129
-
130
- ![screenshot](https://user-images.githubusercontent.com/60883372/146760483-29af3ac7-62af-4f13-98c7-982a79c517d1.jpg)
131
- Screenshot of the operational dashboard showing the key functionality of OpenSTEF.
132
- Dashboard documentation can be found [here](https://raw.githack.com/OpenSTEF/.github/main/profile/html/openstef_dashboard_doc.html).
133
-
134
- To run a task use:
135
-
136
- ```shell
137
- python -m openstef task <task_name>
138
- ```
139
-
140
- ## Database connector for openstef
141
- This repository provides an interface to OpenSTEF (reference) databases. The repository can be found [here](https://github.com/OpenSTEF/openstef-dbc).
142
-
143
- # License
144
- This project is licensed under the Mozilla Public License, version 2.0 - see LICENSE for details.
145
-
146
- ## Licenses third-party libraries
147
- This project includes third-party libraries, which are licensed under their own respective Open-Source licenses. SPDX-License-Identifier headers are used to show which license is applicable. The concerning license files can be found in the LICENSES directory.
148
-
149
- # Contributing
150
- Please read [CODE_OF_CONDUCT.md](https://github.com/OpenSTEF/.github/blob/main/CODE_OF_CONDUCT.md), [CONTRIBUTING.md](https://github.com/OpenSTEF/.github/blob/main/CONTRIBUTING.md) and [PROJECT_GOVERNANCE.md](https://github.com/OpenSTEF/.github/blob/main/PROJECT_GOVERNANCE.md) for details on the process for submitting pull requests to us.
151
-
152
- # Contact
153
- Please read [SUPPORT.md](https://github.com/OpenSTEF/.github/blob/main/SUPPORT.md) for how to connect and get into contact with the OpenSTEF project
154
-
@@ -1,102 +0,0 @@
1
- openstef/__init__.py,sha256=93UM6m0LLQhO69-mSqLuUy73jgs4W7Iuxfo3Lm8c98g,419
2
- openstef/__main__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
3
- openstef/app_settings.py,sha256=EJTDtimctFQQ-3f7ZcOQaRYohpZk3JD6aZBWPFYM2_A,582
4
- openstef/enums.py,sha256=FrP0m_Tk0kV7gSZ2hTY_8iD45KIKnexHrjNufhpKXpE,2829
5
- openstef/exceptions.py,sha256=U4u2LTcdT6cmzpipT2Jh7kq9nCjT_-6gntn8yjuhGU0,1993
6
- openstef/settings.py,sha256=nSgkBqFxuqB3w7Rwo60i8j37c5ngDbt6vpjHS6QtJXQ,354
7
- openstef/data/NL_terrestrial_radiation.csv,sha256=A4kbW56GDzWi4tWUwY2C-4PiOvcKJCwkWQQtdg4ekPE,820246
8
- openstef/data/NL_terrestrial_radiation.csv.license,sha256=AxxHusqwIXU5RHl5ZMU65LyXmgtbj6QlcnFaOEN4kEE,145
9
- openstef/data/dutch_holidays.csv,sha256=Cg8EYjXp1O0lcFOkIOmrS5HaOArrxZwOXsZ9pVkIcKI,49847
10
- openstef/data/dutch_holidays.csv.license,sha256=AxxHusqwIXU5RHl5ZMU65LyXmgtbj6QlcnFaOEN4kEE,145
11
- openstef/data/pv_single_coefs.csv,sha256=jadIEYdHvl1lnV_06X_FASkJZ6C3Hecs5xZnH1gPMvI,24779
12
- openstef/data/pv_single_coefs.csv.license,sha256=AxxHusqwIXU5RHl5ZMU65LyXmgtbj6QlcnFaOEN4kEE,145
13
- openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_baseline_model.z,sha256=2HEXuEvt5BMZMcDPiMfRiABgDQ698H_eM410XREIQK0,1293
14
- openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_baseline_model.z.license,sha256=AxxHusqwIXU5RHl5ZMU65LyXmgtbj6QlcnFaOEN4kEE,145
15
- openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_model_card.md,sha256=KJ8S8jg2k_aL1pCK_b3wOLMZqGdDALa4in73c4Am8gY,539
16
- openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_model_card.md.license,sha256=AxxHusqwIXU5RHl5ZMU65LyXmgtbj6QlcnFaOEN4kEE,145
17
- openstef/data_classes/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
18
- openstef/data_classes/data_prep.py,sha256=gRSL7UiHvZis8m8z7VoTCZc0Ccffhef5_hmSyApnqK0,3417
19
- openstef/data_classes/model_specifications.py,sha256=Uod1W3QzhRqVLb6zvXwxh9wRL3EHCzSvX0oDNd28cFk,1197
20
- openstef/data_classes/prediction_job.py,sha256=OFGg6h0XQZOIkJEYr1EoT3LE2oV6YULaCCxhkaES4wA,5874
21
- openstef/data_classes/split_function.py,sha256=ljQIQQu1t1Y_CVWGAy25jrM6wG9odIVVQVimrT1n-1s,3358
22
- openstef/feature_engineering/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
23
- openstef/feature_engineering/apply_features.py,sha256=9Yzg61Whd4n0osQBfrcW8cI0gaUiv7u8KnQIQPR40fY,5327
24
- openstef/feature_engineering/bidding_zone_to_country_mapping.py,sha256=u9aabjFDImydkO6_cXiaQxBT4gb5zy0gGTg2EoIUO_Y,2106
25
- openstef/feature_engineering/cyclic_features.py,sha256=0Z3wZeF_qrkmEcOq91gtdSMZucAq99kUoBuFDV0SHqk,5962
26
- openstef/feature_engineering/data_preparation.py,sha256=htca9LBO3ZN1D-iX4vXf0UN1fw_rRO7y6N3AuYVMpfk,5628
27
- openstef/feature_engineering/feature_adder.py,sha256=aSqDl_gUrB3H2TD3cNvU5JniY_KOb4u4a2A6J7zB2BQ,6835
28
- openstef/feature_engineering/feature_applicator.py,sha256=bU1Pu5V1fxMCQCwh6HG66nmctBjrNa7gHUYqOqPmLTU,7501
29
- openstef/feature_engineering/general.py,sha256=tgU4_1stag9jJmaQAfWCMhfBscznVuQvW5hPK_z9_9g,4438
30
- openstef/feature_engineering/holiday_features.py,sha256=CbolIP5bfiQkqDct-9TbD828-lhC48bfeNQ2-VFnsJA,8274
31
- openstef/feature_engineering/lag_features.py,sha256=Dr6qS8UhdgEHPZZSe-w6ibtjl_lcbcQohhqdZN9fqEU,5652
32
- openstef/feature_engineering/missing_values_transformer.py,sha256=o_zCVEOCPn2tWzvlY44XZuDysV0TuxqeVYhilYU54YY,5010
33
- openstef/feature_engineering/rolling_features.py,sha256=UW_zvUR0Ru6tt-0S1UybvKJEJ5t4NAc_lWkZDTFOHfU,1955
34
- openstef/feature_engineering/weather_features.py,sha256=Lr9DItyHvJ2CpWQ1r6A83tJKtR2k_Wwn32FdFTGblO0,15750
35
- openstef/metrics/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
36
- openstef/metrics/figure.py,sha256=KDoezYem9wdS13kUx7M7FOy-4u88Sg3OX1DuhNT6kgQ,9751
37
- openstef/metrics/metrics.py,sha256=BsVrKalhgs20YsVBGyYZI2Uzor2nTPKTBCLHFCogCH8,15475
38
- openstef/metrics/reporter.py,sha256=w1Q6xWoYGmvnjwjXik-Gz7_gnb0lOeJMep-whEV5mNk,7897
39
- openstef/model/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
40
- openstef/model/basecase.py,sha256=caI6Q-8y0ymlxGK9Js_H3Vh0q6ruNHlGD5RG0_kE5M0,2878
41
- openstef/model/confidence_interval_applicator.py,sha256=Bx0mm4zGKlqopMZ589cVyDN_k6jfuyqtV1FoViXxc2Y,9775
42
- openstef/model/fallback.py,sha256=VV9ehgnoMZtWzqKk9H1t8wnERFh5CyC4TvDIuRP_ZDI,2861
43
- openstef/model/model_creator.py,sha256=L84A4_HVYL7bRZY0D77j4c4kHRleVGCRXqZZkT9BZY0,6668
44
- openstef/model/objective.py,sha256=qJdI6GAzv8l5Mxd8G7BIqQnfdJNM7aOlg9DMzMGjWqA,14558
45
- openstef/model/objective_creator.py,sha256=jqMvdXiVRc9GmOvSijQY0zuyxS07-ezkVXclvoW98g4,2208
46
- openstef/model/serializer.py,sha256=IUiiAWvoGVoWzmS-akI6LC7jHRY5Ln_vOCBZy1LnESY,17238
47
- openstef/model/standard_deviation_generator.py,sha256=Od9bzXi2TLb1v8Nz-VhBMZHSopWH6ssaDe8gYLlqO1I,2911
48
- openstef/model/metamodels/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
49
- openstef/model/metamodels/feature_clipper.py,sha256=wDsf4k_2YuC6rrFlwE12LpgOdOwHHWuET2ZrJ_gr4yo,2861
50
- openstef/model/metamodels/grouped_regressor.py,sha256=yMN_a6TnQSyFaqlB_6Nifq-ydpb5hs6w_b97IaBbHj4,8337
51
- openstef/model/metamodels/missing_values_handler.py,sha256=veyvYZHhKvlYZxaUpxRQ7XoE033_3Lcg9LrbuKchlOk,5241
52
- openstef/model/regressors/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
53
- openstef/model/regressors/arima.py,sha256=wt7FVykjSvljpl7vjtliq61SiyjQ7KKtw8PF9x0xf04,7587
54
- openstef/model/regressors/custom_regressor.py,sha256=Hsmxahc9nfSWD0aEZ6cm4pxW2noQ8B1SujS17_fmxcU,1768
55
- openstef/model/regressors/dazls.py,sha256=Xt89yFHjkwpIUTkkhPmPZ74F8_tht_XV88INuP5GU2E,3994
56
- openstef/model/regressors/flatliner.py,sha256=T9u-ukhqFcatQmlgUtBL_G-1b_wQzgdVRq0ac64GnjQ,2789
57
- openstef/model/regressors/gblinear_quantile.py,sha256=DSRjL_kadBfDKrDEgrOfU1N60grTiAovtcBszBa41TI,11271
58
- openstef/model/regressors/lgbm.py,sha256=zCdn1euEdSFxYJzH8XqQFFnb6R4JVUnmineKjX_Gy-g,800
59
- openstef/model/regressors/linear.py,sha256=uOvZMLGZH_9nXfmS5honCMfyVeyGXP1Cza9A_BdXlVw,3665
60
- openstef/model/regressors/linear_quantile.py,sha256=sI5cl6_W-hh13mg4Gf09LQ1caZmBy7COc8_5BBJxySQ,10534
61
- openstef/model/regressors/regressor.py,sha256=uJcx59AyCPE9f_yPcAQ59h2ZS7eNsDpIHJrladKvHIw,3461
62
- openstef/model/regressors/xgb.py,sha256=SH-UiYJtMbfmRBK6738dU0ZRfYfzNynnikwbxINCE7Q,1467
63
- openstef/model/regressors/xgb_multioutput_quantile.py,sha256=xWzA7tymC_o-F1OS3I7vUKf9zP6RR1ZglEeY4NAgjU0,9146
64
- openstef/model/regressors/xgb_quantile.py,sha256=PzKIxqN_CnEPFmzXACNuzLSmZSHbooTuiJ5ckJ9vh_E,7805
65
- openstef/model_selection/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
66
- openstef/model_selection/model_selection.py,sha256=3xTiAkP5KecB2jFOvHa8-AkVqFbwx0j_d8IMUTbkKBE,11181
67
- openstef/monitoring/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
68
- openstef/monitoring/performance_meter.py,sha256=6aCGjJFXFq-7qwaJyBkF3MLqjgVK6FMFVcO-bcLLUb4,2803
69
- openstef/monitoring/teams.py,sha256=A-tlZeuAgolxFHjgT3gGjraxzW2dmuB-UAOz4xgYNIQ,6668
70
- openstef/pipeline/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
71
- openstef/pipeline/create_basecase_forecast.py,sha256=YkpiqohETTAETb4GiVlK_btw5dpixJy2LmFZdm10iaI,4623
72
- openstef/pipeline/create_component_forecast.py,sha256=U2v_R-FSOXWVbWeknsJbkulN1YK56fL7-bB1h2B1yzw,6021
73
- openstef/pipeline/create_forecast.py,sha256=F09civdIumNQwJq2hraea5QTQx7DgvEliXKs4Y3f8Mc,5689
74
- openstef/pipeline/optimize_hyperparameters.py,sha256=3SLkcLR7XC4IeN48C-XT_lxlfCqW_D0NoMpZcrB9UUM,11045
75
- openstef/pipeline/train_create_forecast_backtest.py,sha256=-kZqCWal5zYLL0k0Sapks1zTmU5unNAooVPaPos1_7E,6050
76
- openstef/pipeline/train_model.py,sha256=ThZwPo5otikVqVe6NdXkYcxkVFh-kegRVxMsQg1lbFc,19743
77
- openstef/pipeline/utils.py,sha256=23mB31p19FoGWelLJzxNmqlzGwEr3fCDBEA37V2kpYY,2167
78
- openstef/postprocessing/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
79
- openstef/postprocessing/postprocessing.py,sha256=iR1dhfIqBSRl1NpQiMAceDsY-fHs1qnzDc-b5jFdzvc,9321
80
- openstef/preprocessing/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
81
- openstef/preprocessing/preprocessing.py,sha256=bM_cSSSb2vGTD79RGzUrI6KoELbzlCyJwc7jqQGNEsE,1454
82
- openstef/tasks/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
83
- openstef/tasks/calculate_kpi.py,sha256=O8m-K7lmkU3tY2H4E3gLqRAhhALZ75Y18x8Y_-D8Htw,11876
84
- openstef/tasks/create_basecase_forecast.py,sha256=rexAt6jGbW3YTXvDo606rzJvYETCoLVYCsBRihZas9U,4213
85
- openstef/tasks/create_components_forecast.py,sha256=bhBVN1v8mhBQhYP1fBfbhag58DmQlxSKDTSz5YfTYGc,6179
86
- openstef/tasks/create_forecast.py,sha256=OOXfM3wTPEMa5CnlFPXNPe9kNN4LQG-3fHbeAUsiOKo,6096
87
- openstef/tasks/create_solar_forecast.py,sha256=cZiIoCVHlLlDrsWeH3ZX4zfcMMrgGgqkG2CmbCp8lqM,15074
88
- openstef/tasks/create_wind_forecast.py,sha256=RhshkmNSyFWx4Y6yQn02GzHjWTREbN5A5GAeWv0JpcE,2907
89
- openstef/tasks/optimize_hyperparameters.py,sha256=meiOn5S4yBrk5ANCFwcBCfTZIhm-b1rdh9TFh7KFr3E,4754
90
- openstef/tasks/split_forecast.py,sha256=AF_AwFcD6BqOrfvNLhIm_8gb7SpyKxEx60mymoxohPg,9323
91
- openstef/tasks/train_model.py,sha256=PLkZMMZppsHuc2miCKDeVKoPhrwZi68xXL0axH2cDoA,8518
92
- openstef/tasks/utils/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
93
- openstef/tasks/utils/dependencies.py,sha256=Jy9dtV_G7lTEa5Cdy--wvMxJuAb0adb3R0X4QDjVteM,3077
94
- openstef/tasks/utils/predictionjobloop.py,sha256=Ysy3zF5lzPMz_asYDKeF5m0qgVT3tCtwSPihqMjnI5Q,9580
95
- openstef/tasks/utils/taskcontext.py,sha256=L9K14ycwgVxbIVUjH2DIn_QWbnu-OfxcGtQ1K9T6sus,5630
96
- openstef/validation/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
97
- openstef/validation/validation.py,sha256=6FY-mD7bWxM7NpM9y-RcGZJt-kyyOmPl8QSemYRY11w,11200
98
- openstef-3.4.56.dist-info/LICENSE,sha256=7Pm2fWFFHHUG5lDHed1vl5CjzxObIXQglnYsEdtjo_k,14907
99
- openstef-3.4.56.dist-info/METADATA,sha256=rMQR-9KWXJppECBpZTJg05GnhOZi8aKrjDZlySvl_6I,8305
100
- openstef-3.4.56.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
101
- openstef-3.4.56.dist-info/top_level.txt,sha256=kD0H4PqrQoncZ957FvqwfBxa89kTrun4Z_RAPs_HhLs,9
102
- openstef-3.4.56.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- openstef