Added time as input feature

This commit is contained in:
Victor Mylle
2023-11-26 18:43:03 +00:00
parent a2c9427d16
commit 2f40f41786
9 changed files with 168 additions and 138 deletions

View File

@@ -33,6 +33,14 @@ class NrvDataset(Dataset):
dataframe["wind_forecast"].to_numpy(), dtype=torch.float32
)
self.quarter = torch.tensor(
dataframe["quarter"].to_numpy(), dtype=torch.float32
)
self.day_of_week = torch.tensor(
dataframe["day_of_week"].to_numpy(), dtype=torch.float32
)
self.sequence_length = sequence_length
self.predict_sequence_length = predict_sequence_length
@@ -125,6 +133,20 @@ class NrvDataset(Dataset):
]
features.append(wind_forecast.view(-1))
### Time Features ###
time_feature = 0
if self.data_config.QUARTER:
time_feature += self.quarter[actual_idx].item()
if self.data_config.DAY_OF_WEEK:
d_w = self.day_of_week[actual_idx].item()
if self.data_config.QUARTER:
d_w *= 96
time_feature += d_w
if time_feature is not None:
features.append(torch.tensor([time_feature]))
if not features:
raise ValueError(
"No features are configured to be included in the dataset."
@@ -193,6 +215,20 @@ class NrvDataset(Dataset):
]
features.append(wind_forecast.view(-1))
### Time Features ###
time_feature = 0
if self.data_config.QUARTER:
time_feature += self.quarter[idx]
if self.data_config.DAY_OF_WEEK:
d_w = self.day_of_week[idx].item()
if self.data_config.QUARTER:
d_w *= 96
time_feature += d_w
if time_feature is not None:
features.append(torch.tensor([time_feature]))
target = self.nrv[
idx
+ self.sequence_length : idx

View File

@@ -31,13 +31,14 @@ class DataConfig:
### TIME ###
self.YEAR: bool = False
self.DAY: bool = False
self.DAY_OF_WEEK: bool = False
self.QUARTER: bool = False
class DataProcessor:
def __init__(self, data_config: DataConfig):
def __init__(self, data_config: DataConfig, path:str="./"):
self.batch_size = 2048
self.path = path
self.train_range = (
-np.inf,
@@ -62,6 +63,13 @@ class DataProcessor:
self.wind_forecast, on="datetime", how="left"
)
self.all_features["quarter"] = (
self.all_features["datetime"].dt.hour * 4
+ self.all_features["datetime"].dt.minute / 15
)
self.all_features["day_of_week"] = self.all_features["datetime"].dt.dayofweek
self.output_size = 96
self.data_config = data_config
@@ -103,7 +111,7 @@ class DataProcessor:
)
def get_nrv_history(self):
df = pd.read_csv(history_data_path, delimiter=";")
df = pd.read_csv(self.path + history_data_path, delimiter=";")
df = df[["datetime", "netregulationvolume"]]
df = df.rename(columns={"netregulationvolume": "nrv"})
df["datetime"] = pd.to_datetime(df["datetime"])
@@ -114,7 +122,7 @@ class DataProcessor:
return df
def get_load_forecast(self):
df = pd.read_csv(forecast_data_path, delimiter=";")
df = pd.read_csv(self.path + forecast_data_path, delimiter=";")
df = df.rename(
columns={
"Day-ahead 6PM forecast": "load_forecast",
@@ -129,7 +137,7 @@ class DataProcessor:
return df
def get_pv_forecast(self):
df = pd.read_csv(pv_forecast_data_path, delimiter=";")
df = pd.read_csv(self.path + pv_forecast_data_path, delimiter=";")
df = df.rename(
columns={"dayahead11hforecast": "pv_forecast", "Datetime": "datetime"}
@@ -142,7 +150,7 @@ class DataProcessor:
return df
def get_wind_forecast(self):
df = pd.read_csv(wind_forecast_data_path, delimiter=";")
df = pd.read_csv(self.path + wind_forecast_data_path, delimiter=";")
df = df.rename(
columns={"dayaheadforecast": "wind_forecast", "datetime": "datetime"}
@@ -267,3 +275,14 @@ class DataProcessor:
)
input, _, _ = next(iter(data_loader))
return input.shape[-1]
def get_time_feature_size(self):
time_feature_size = 1
if self.data_config.QUARTER:
time_feature_size *= 96
if self.data_config.DAY_OF_WEEK:
time_feature_size *= 7
if time_feature_size == 1:
return 0
return time_feature_size