import numpy as np
import os
import logging
logger = logging.getLogger('telemanom')
class Channel:
def __init__(self,n_predictions,l_s):
# , config, chan_id):
"""
Load and reshape channel values (predicted and actual).
Args:
config (obj): Config object containing parameters for processing
chan_id (str): channel id
Attributes:
id (str): channel id
config (obj): see Args
X_train (arr): training inputs with dimensions
[timesteps, l_s, input dimensions)
X_test (arr): test inputs with dimensions
[timesteps, l_s, input dimensions)
y_train (arr): actual channel training values with dimensions
[timesteps, n_predictions, 1)
y_test (arr): actual channel test values with dimensions
[timesteps, n_predictions, 1)
train (arr): train data loaded from .npy file
test(arr): test data loaded from .npy file
"""
# self.id = chan_id
# self.config = config
self.X_train = None
self.y_train = None
self.X_test = None
self.y_test = None
self.y_hat = None
self.train = None
self.test = None
self._n_predictions = n_predictions
self._l_s = l_s
def shape_train_data(self, arr):
# , train=True):
"""Shape raw input streams for ingestion into LSTM. config.l_s specifies
the sequence length of prior timesteps fed into the model at
each timestep t.
Args:
arr (np array): array of input streams with
dimensions [timesteps, 1, input dimensions]
train (bool): If shaping training data, this indicates
data can be shuffled
"""
# print("in shape data")
# print("arr shape",arr.shape)
# print("ls",self.config.l_s)
# print("n_pred",self.config.n_predictions)
data = []
for i in range(len(arr) - self._l_s - self._n_predictions):
data.append(arr[i:i + self._l_s + self._n_predictions])
data = np.array(data)
# print("data shape",data.shape)
# assert len(data.shape) == 3
# if train:
# # np.random.shuffle(data)
# self.X_train = data[:, :-self.config.n_predictions, :]
# self.y_train = data[:, -self.config.n_predictions:, :] # telemetry value is at position 0
# self.y_train = np.reshape(self.y_train,(self.y_train.shape[0],self.y_train.shape[1]*self.y_train.shape[2]))
# print("X train shape",self.X_train .shape)
# print("Y train shape",self.y_train .shape)
# else:
self.X_train = data[:, :-self._n_predictions, :]
self.y_train = data[:, -self._n_predictions:, :] # telemetry value is at position 0
self.y_train = np.reshape(self.y_train,(self.y_train.shape[0],self.y_train.shape[1]*self.y_train.shape[2]))
def shape_test_data(self, arr):
data = []
for i in range(len(arr) - self._l_s - self._n_predictions):
data.append(arr[i:i + self._l_s + self._n_predictions])
data = np.array(data)
# print("data shape",data.shape)
self.X_test = data[:, :-self._n_predictions, :]
self.y_test = data[:, -self._n_predictions:, :] # telemetry value is at position 0
self.y_test = np.reshape(self.y_test,(self.y_test.shape[0],self.y_test.shape[1]*self.y_test.shape[2]))
# def load_data(self):
# """
# Load train and test data from local.
# """
# # try:
# # self.train = np.load(os.path.join("data", "train", "{}.npy".format(self.id)))
# # self.test = np.load(os.path.join("data", "test", "{}.npy".format(self.id)))
# # except FileNotFoundError as e:
# # # logger.critical(e)
# # # logger.critical("Source data not found, may need to add data to repo: ")
# # print("Source data not found, may need to add data to repo: ")
# print("before shape function")
# print(self.train.shape)
# self.shape_data(self.train)
# self.shape_data(self.test, train=False)