Spaces:
Sleeping
Sleeping
File size: 5,998 Bytes
00bbaba 855209b 00bbaba 9dec033 696a9b4 3ad230f 696a9b4 3ad230f 00bbaba 9dec033 00bbaba 696a9b4 00bbaba 696a9b4 00bbaba 696a9b4 00bbaba 696a9b4 00bbaba 696a9b4 72473af 00bbaba 82de839 696a9b4 00bbaba 696a9b4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | import numpy as np
import tensorflow as tf
import streamlit as st
import os
import requests
import matplotlib.pyplot as plt
import joblib
from pathlib import Path
MODEL_PATH = "output_predictions_to_meteo_smape_25.keras"
MODEL_PATH_SOLARMON = "model_24h_base_on_Me_open_meteo_weather_predictions.keras"
MODEL_PATH_SOLARMON_HIST = "model_hist/model_24h_predictions_hist.keras"
TRANSFORMER_INPUT_PATH_HIST = "model_hist/input_preprocessor.pkl"
TRANSFORMER_OUTPUT_PATH_HIST = "model_hist/output_preprocessor.pkl"
@st.cache_resource
def load_model():
model = tf.keras.models.load_model(MODEL_PATH)
return model
@st.cache_resource
def load_model_solarmon():
# model = tf.keras.models.load_model(MODEL_PATH_SOLARMON)
model = tf.keras.models.load_model(MODEL_PATH_SOLARMON_HIST)
return model
@st.cache_resource
def load_transformers():
input_preprocessor = joblib.load('input_preprocessor_meteo_to_smape25.pkl')
output_scaler = joblib.load('output_scaler_meteo_to_smape25.pkl')
return input_preprocessor, output_scaler
@st.cache_resource
def load_transformers_solarmon():
#input_preprocessor = joblib.load('input_preprocessor.pkl')
#output_scaler = joblib.load('output_preprocessor.pkl')
input_preprocessor = joblib.load(TRANSFORMER_INPUT_PATH_HIST)
output_scaler = joblib.load(TRANSFORMER_OUTPUT_PATH_HIST)
return input_preprocessor, output_scaler
import numpy as np
def create_sequences_solarmon(data, window, horizon, past_features, future_features):
"""
Vytvoří sekvence vstupních dat a odpovídající cílové hodnoty pro trénování LSTM modelu.
Parametry:
----------
data : pandas.DataFrame
DataFrame obsahující časové řady.
window : int
Počet časových kroků v minulosti.
horizon : int
Počet časových kroků do budoucnosti.
past_features : list
Seznam sloupců, které budou použity jako vstupní vlastnosti v minulosti.
future_features : list
Seznam sloupců, které budou použity jako vstupní vlastnosti v budoucnosti.
target : str
Název sloupce, který bude použit jako cílová hodnota.
Návratové hodnoty:
-------------------
X : numpy.ndarray
Pole tvaru (vzorky, window, past_features + future_features), obsahující sekvence vstupních dat.
y : numpy.ndarray
Pole tvaru (vzorky, horizon), obsahující odpovídající cílové hodnoty.
"""
# Vytvoření historických sekvencí (past_features)
X_past = np.lib.stride_tricks.sliding_window_view(
data[past_features].values, (window, len(past_features))
)[:-horizon, :, :]
X_past = np.squeeze(X_past, axis=1) # Výstup: (vzorky, window, len(past_features))
# Vytvoření budoucích sekvencí (future_features)
X_future = np.lib.stride_tricks.sliding_window_view(
data[future_features].values, (window, len(future_features))
)[horizon-1 : len(X_past) + horizon-1, :, :]
X_future = np.squeeze(X_future, axis=1) # Výstup: (vzorky, window, len(future_features))
# Spojení historických a budoucích proměnných do jednoho pole
X = np.concatenate([X_past, X_future], axis=2) # (vzorky, window, past_features + future_features)
return X
def create_sequences(data, window, horizon, past_features, future_features):
"""
Vytvoří sekvence vstupních dat a odpovídající cílové hodnoty pro trénování LSTM modelu.
Parametry:
----------
data : pandas.DataFrame
DataFrame obsahující časové řady.
window : int
Počet časových kroků v minulosti.
horizon : int
Počet časových kroků do budoucnosti.
past_features : list
Seznam sloupců, které budou použity jako vstupní vlastnosti v minulosti.
future_features : list
Seznam sloupců, které budou použity jako vstupní vlastnosti v budoucnosti.
target : str
Název sloupce, který bude použit jako cílová hodnota.
Návratové hodnoty:
-------------------
X : numpy.ndarray
Pole tvaru (vzorky, window, past_features + future_features), obsahující sekvence vstupních dat.
y : numpy.ndarray
Pole tvaru (vzorky, horizon), obsahující odpovídající cílové hodnoty.
"""
X_past = np.lib.stride_tricks.sliding_window_view(
data[past_features].values, (window, len(past_features))
)[:-horizon, :, :]
X_past = np.squeeze(X_past, axis=1)
X_future = np.lib.stride_tricks.sliding_window_view(
data[future_features].values, (window, len(future_features))
)[horizon-1 : len(X_past) + horizon-1, :, :]
X_future = np.squeeze(X_future, axis=1)
X = np.concatenate([X_past, X_future], axis=2)
return X
import numpy as np
import matplotlib.pyplot as plt
def plot_solar_power_prediction(y_pred_trans, df_true=None):
"""
Vytvoří graf predikce výkonu fotovoltaické elektrárny v průběhu dne.
Args:
y_pred_trans (numpy.ndarray): Pole s predikovanými hodnotami výkonu (kW) ve tvaru (1, 24).
df_true (pd.DataFrame, optional): DataFrame se skutečnými hodnotami výkonu.
Musí obsahovat sloupec 'output' s 24 hodnotami.
Returns:
plt.Figure: Graf pro zobrazení.
"""
hours = np.arange(24)
plt.figure(figsize=(10, 6))
plt.plot(hours, y_pred_trans.flatten(), marker='o', label='Predikce (kW)', color='tab:blue')
if df_true is not None and 'output' in df_true.columns and len(df_true) >= 24:
plt.plot(hours, df_true['output'].values[23:-1], marker='x', label='Skutečný výkon (kW)', color='tab:orange')
plt.xlabel('Hodiny (UTC)')
plt.ylabel('Výkon (kW)')
# plt.title('Predikce vs. skutečný výkon FVE v průběhu dne')
plt.title('Predikce průběhu výkonu FVE pro zvolený den')
plt.xticks(hours)
plt.grid(True)
plt.legend()
return plt
|