Added time as input feature
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user