def __init__(self, demo_raw, train_start_time = '2014-02-01',train_end_time = '2018-10-31', test_start_time = '2018-11-01 00:00:00', test_end_time = '2019-05-01 23:00:00' ): # self.raw_df = raw_df # demongraphic data [32, 32, 14] self.demo_raw = demo_raw self.train_start_time = train_start_time #self.train_end_time = '2018-03-31' self.train_end_time = train_end_time # set train/test set self.test_start_time = test_start_time self.test_end_time = test_end_time # prediction window: use one week's data to predict next hour self.window = datetime.timedelta(hours=24 * 7) self.step = datetime.timedelta(hours=1) # predict_start_time should be '2018-04-08 00:00:00' # e.g. use '2018-04-01 00:00:00' -> '2018-04-07 23:00:00', in total 168 time stamps # to predict '2018-04-08 00:00:00' # however, test_start_time + window = predict_start_time # e.g. '2018-04-01 00:00:00' + 168 hour window = '2018-04-08 00:00:00' # this is calculated by time interval, there is 1 hour shift between timestamp and time interval self.predict_start_time = datetime_utils.str_to_datetime(self.test_start_time) + self.window # predict_end_time = test_end_time = '2018-04-30 23:00:00' self.predict_end_time = datetime_utils.str_to_datetime(self.test_end_time) # if window = 7 days, test_end_time = '2018-04-30 23:00:00', actual_end_time = 04/23 - 23:00 self.actual_end_time = self.predict_end_time - self.window # 41616 self.train_hours = datetime_utils.get_total_hour_range(self.train_start_time, self.train_end_time)
def __init__(self, raw_df, window=168): self.raw_df = raw_df self.train_start_time = '2014-02-01' self.train_end_time = '2018-10-31' self.test_start_time = '2018-11-01 00:00:00' self.test_end_time = '2019-04-30 23:00:00' # if not speficied, prediction window: use one week's data to predict next hour #self.window = datetime.timedelta(hours=24 * 7) self.window = datetime.timedelta(hours=window) self.step = datetime.timedelta(hours=1) # predict_start_time should be '2018-04-08 00:00:00' # e.g. use '2018-04-01 00:00:00' -> '2018-04-07 23:00:00', in total 168 time stamps # to predict '2018-04-08 00:00:00' # however, test_start_time + window = predict_start_time # e.g. '2018-04-01 00:00:00' + 168 hour window = '2018-04-08 00:00:00' # this is calculated by time interval, there is 1 hour shift between timestamp and time interval self.predict_start_time = datetime_utils.str_to_datetime( self.test_start_time) + self.window # predict_end_time = test_end_time = '2018-04-30 23:00:00' self.predict_end_time = datetime_utils.str_to_datetime( self.test_end_time) # if window = 7 days, test_end_time = '2018-04-30 23:00:00', actual_end_time = 04/23 - 23:00 self.actual_end_time = self.predict_end_time - self.window self.train_df = raw_df[self.train_start_time:self.train_end_time] self.test_df = raw_df[self.test_start_time:self.test_end_time]
def __init__(self, raw_df, demo_raw, train_start_time='2014-02-01', train_end_time='2018-10-31', test_start_time='2018-11-01', test_end_time='2019-05-01'): self.raw_df = raw_df # demongraphic data [32, 32, 14] self.demo_raw = demo_raw self.train_start_time = train_start_time #self.train_end_time = '2018-03-31' self.train_end_time = train_end_time # set train/test set self.test_start_time = test_start_time self.test_end_time = test_end_time # prediction window: use one week's data to predict next hour self.window = datetime.timedelta(days=7) self.step = datetime.timedelta(hours=1) # this is calculated by time interval, there is 1 hour shift between timestamp and time interval self.predict_start_time = datetime_utils.str_to_datetime( self.test_start_time) + self.window # predict_end_time = test_end_time = '2018-04-30 23:00:00' self.predict_end_time = datetime_utils.str_to_datetime( self.test_end_time) # if window = 7 days, test_end_time = '2018-04-30 23:00:00', actual_end_time = 04/23 - 23:00 self.actual_end_time = self.predict_end_time - self.window self.train_df = raw_df[self.train_start_time:self.train_end_time] self.test_df = raw_df[self.test_start_time:self.test_end_time] self.grid_list = list(raw_df)
def arr_to_df(self): convlstm_predicted = pd.DataFrame( np.nan, index=self.test_df_cut[self.train_obj.predict_start_time:self. train_obj.predict_end_time].index, columns=list(self.test_df_cut)) sample_pred_squeeze = np.squeeze(self.predicted_vals) # test_squeeze = np.squeeze(self.test_data.y) pred_shape = self.predicted_vals.shape # loop through time stamps for i in range(0, pred_shape[0]): temp_image = sample_pred_squeeze[i] # test_image = test_squeeze[i] # rotate temp_rot = np.rot90(temp_image, axes=(1, 0)) # test_rot= np.rot90(test_image, axes=(1,0)) dt = datetime_utils.str_to_datetime( self.train_obj.test_start_time) + datetime.timedelta(hours=i) # dt_str = pd.to_datetime(datetime_utils.datetime_to_str(dt)) predicted_timestamp = dt + self.train_obj.window predicted_timestamp_str = pd.to_datetime( datetime_utils.datetime_to_str(predicted_timestamp)) # print('predicted_timestamp_str: ', predicted_timestamp_str) for c in range(pred_shape[1]): for r in range(pred_shape[2]): temp_str = str(r) + '_' + str(c) if temp_str in self.intersect_pos_set: #print('temp_str: ', temp_str) # count +=1 convlstm_predicted.loc[predicted_timestamp_str, temp_str] = temp_rot[r][c] return convlstm_predicted