Implemented Non Autorgressive Quantile Regression
This commit is contained in:
@@ -12,6 +12,8 @@ class NrvDataset(Dataset):
|
||||
self.nrv = torch.tensor(dataframe['nrv'].to_numpy(), dtype=torch.float32)
|
||||
self.load_forecast = torch.tensor(dataframe['load_forecast'].to_numpy(), dtype=torch.float32)
|
||||
self.total_load = torch.tensor(dataframe['total_load'].to_numpy(), dtype=torch.float32)
|
||||
self.pv_gen_forecast = torch.tensor(dataframe['pv_forecast'].to_numpy(), dtype=torch.float32)
|
||||
self.wind_gen_forecast = torch.tensor(dataframe['wind_forecast'].to_numpy(), dtype=torch.float32)
|
||||
|
||||
self.sequence_length = sequence_length
|
||||
self.predict_sequence_length = predict_sequence_length
|
||||
@@ -45,10 +47,26 @@ class NrvDataset(Dataset):
|
||||
load_history = self.total_load[actual_idx:actual_idx+self.sequence_length]
|
||||
features.append(load_history.view(-1))
|
||||
|
||||
if self.data_config.PV_HISTORY:
|
||||
pv_history = self.pv_gen_forecast[actual_idx:actual_idx+self.sequence_length]
|
||||
features.append(pv_history.view(-1))
|
||||
|
||||
if self.data_config.WIND_HISTORY:
|
||||
wind_history = self.wind_gen_forecast[actual_idx:actual_idx+self.sequence_length]
|
||||
features.append(wind_history.view(-1))
|
||||
|
||||
if self.data_config.LOAD_FORECAST:
|
||||
load_forecast = self.load_forecast[actual_idx+self.sequence_length:actual_idx+self.sequence_length+self.predict_sequence_length]
|
||||
features.append(load_forecast.view(-1))
|
||||
|
||||
if self.data_config.PV_FORECAST:
|
||||
pv_forecast = self.pv_gen_forecast[actual_idx+self.sequence_length:actual_idx+self.sequence_length+self.predict_sequence_length]
|
||||
features.append(pv_forecast.view(-1))
|
||||
|
||||
if self.data_config.WIND_FORECAST:
|
||||
wind_forecast = self.wind_gen_forecast[actual_idx+self.sequence_length:actual_idx+self.sequence_length+self.predict_sequence_length]
|
||||
features.append(wind_forecast.view(-1))
|
||||
|
||||
if not features:
|
||||
raise ValueError("No features are configured to be included in the dataset.")
|
||||
|
||||
@@ -75,10 +93,28 @@ class NrvDataset(Dataset):
|
||||
load_history = self.total_load[idx:idx+self.sequence_length]
|
||||
features.append(load_history.view(-1))
|
||||
|
||||
if self.data_config.PV_HISTORY:
|
||||
pv_history = self.pv_gen_forecast[idx:idx+self.sequence_length]
|
||||
features.append(pv_history.view(-1))
|
||||
|
||||
if self.data_config.WIND_HISTORY:
|
||||
wind_history = self.wind_gen_forecast[idx:idx+self.sequence_length]
|
||||
features.append(wind_history.view(-1))
|
||||
|
||||
if self.data_config.LOAD_FORECAST:
|
||||
load_forecast = self.load_forecast[idx+self.sequence_length:idx+self.sequence_length+self.predict_sequence_length]
|
||||
features.append(load_forecast.view(-1))
|
||||
|
||||
if self.data_config.PV_FORECAST:
|
||||
pv_forecast = self.pv_gen_forecast[idx+self.sequence_length:idx+self.sequence_length+self.predict_sequence_length]
|
||||
features.append(pv_forecast.view(-1))
|
||||
|
||||
if self.data_config.WIND_FORECAST:
|
||||
wind_forecast = self.wind_gen_forecast[idx+self.sequence_length:idx+self.sequence_length+self.predict_sequence_length]
|
||||
features.append(wind_forecast.view(-1))
|
||||
|
||||
|
||||
|
||||
target = self.nrv[idx+self.sequence_length:idx+self.sequence_length+self.predict_sequence_length]
|
||||
|
||||
if len(features) == 0:
|
||||
|
||||
@@ -9,11 +9,24 @@ import pytz
|
||||
|
||||
history_data_path = "../../data/history-quarter-hour-data.csv"
|
||||
forecast_data_path = "../../data/load_forecast.csv"
|
||||
pv_forecast_data_path = "../../data/pv_gen_forecast.csv"
|
||||
wind_forecast_data_path = "../../data/wind_gen_forecast.csv"
|
||||
|
||||
class DataConfig:
|
||||
NRV_HISTORY: bool = True
|
||||
LOAD_FORECAST: bool = True
|
||||
LOAD_HISTORY: bool = False
|
||||
def __init__(self):
|
||||
self.NRV_HISTORY: bool = True
|
||||
|
||||
### LOAD ###
|
||||
self.LOAD_FORECAST: bool = True
|
||||
self.LOAD_HISTORY: bool = False
|
||||
|
||||
### PV ###
|
||||
self.PV_FORECAST: bool = False
|
||||
self.PV_HISTORY: bool = False
|
||||
|
||||
### WIND ###
|
||||
self.WIND_FORECAST: bool = False
|
||||
self.WIND_HISTORY: bool = False
|
||||
|
||||
class DataProcessor:
|
||||
def __init__(self, data_config: DataConfig):
|
||||
@@ -26,8 +39,12 @@ class DataProcessor:
|
||||
|
||||
self.history_features = self.get_nrv_history()
|
||||
self.future_features = self.get_load_forecast()
|
||||
self.pv_forecast = self.get_pv_forecast()
|
||||
self.wind_forecast = self.get_wind_forecast()
|
||||
|
||||
self.all_features = self.history_features.merge(self.future_features, on='datetime', how='left')
|
||||
self.all_features = self.all_features.merge(self.pv_forecast, on='datetime', how='left')
|
||||
self.all_features = self.all_features.merge(self.wind_forecast, on='datetime', how='left')
|
||||
|
||||
self.data_config = data_config
|
||||
|
||||
@@ -69,6 +86,31 @@ class DataProcessor:
|
||||
df.sort_values(by="datetime", inplace=True)
|
||||
return df
|
||||
|
||||
def get_pv_forecast(self):
|
||||
df = pd.read_csv(pv_forecast_data_path, delimiter=';')
|
||||
|
||||
df = df.rename(columns={'dayahead11hforecast': 'pv_forecast', 'Datetime': 'datetime'})
|
||||
df = df[['datetime', 'pv_forecast']]
|
||||
|
||||
df = df.groupby('datetime').mean().reset_index()
|
||||
df['datetime'] = pd.to_datetime(df['datetime'], utc=True)
|
||||
df.sort_values(by="datetime", inplace=True)
|
||||
return df
|
||||
|
||||
def get_wind_forecast(self):
|
||||
df = pd.read_csv(wind_forecast_data_path, delimiter=';')
|
||||
|
||||
df = df.rename(columns={'dayaheadforecast': 'wind_forecast', 'datetime': 'datetime'})
|
||||
df = df[['datetime', 'wind_forecast']]
|
||||
|
||||
# remove nan rows
|
||||
df = df[~df['wind_forecast'].isnull()]
|
||||
|
||||
df = df.groupby('datetime').mean().reset_index()
|
||||
df['datetime'] = pd.to_datetime(df['datetime'], utc=True)
|
||||
df.sort_values(by="datetime", inplace=True)
|
||||
return df
|
||||
|
||||
def set_batch_size(self, batch_size: int):
|
||||
self.batch_size = batch_size
|
||||
|
||||
|
||||
Reference in New Issue
Block a user