def create_model_neural_network(self):
     """
     Creamos modelo de red neuronal feed forward.
     Arquitectura.
     01 capa oculta con "n" neuronas.
     Función de activación: Tangente Hiperbólica.(Valores -1 a 1)
     Optimizador: Adam
     Métrica de Pérdida: (Loss) Error Absoluto Medio
     Para calcular el acuracy, se utilizará  Error Cuadrático Medio (MSE)
     """
     Console.highlight("6. CREANDO LA RED NEURONAL")
     self.print_info_neural_network()
     self.neurals_hidden_layer = int(
         input("Neuronas para la capa de entrada: "))
     print("\n")
     self.model_nn = Sequential()
     self.model_nn.add(
         Dense(self.neurals_hidden_layer,
               input_shape=(1, self.train_predictive_months),
               activation=self.activation))
     self.model_nn.add(Flatten())
     self.model_nn.add(Dense(1, activation=self.activation))
     self.model_nn.compile(loss=self.loss,
                           optimizer=self.optimizer,
                           metrics=["mse"])
     self.model_nn.summary()
     Console.stop_continue("[Enter para continuar]")
 def input_data(self):
     """
     Ingresar información (edificio y departamento) para obtener dataset de la base de datos.
     """
     Console.highlight("1. SELECCIONAR CONJUNTO DE DATOS")
     self.building = str(input("Ingrese nombre de edificio: ")).upper()
     self.apartment = str(input("Ingrese nombre de vivienda: ")).upper()
 def data_partition(self):
     Console.highlight("5. PARTICION DEL CONJUNTO DE DATOS")
     self.input_data_partition()
     self.set_data_partition()
     self.build_xy_train_test()
     self.print_data_partition()
     Console.stop_continue("[Enter para continuar]")
 def get_time_series_wc(self):
     """
     Obtener y mostrar informacion que conformará la serie de tiempo
     """
     self.df = self.df.drop(['Anio', 'Mes', 'Facturado'], axis=1)
     print("SERIE DE TIEMPO")
     print(self.df)
     Console.stop_continue("[Enter para continuar]")
 def predict_next_wc(self):
     """
     Realiza la predicción del próximo consumo de agua (wc = water consumption)
     """
     Console.highlight("8. PREDECIR PROXIMO CONSUMO MENSUAL DE AGUA")
     self.set_df_predict()
     self.build_matrix_predict()
     self.predict_model()
     print("El pronostico de su proximo consummo de agua es : {} m3".format(
         self.predicted_value))
 def question_continue_prediction(self):
     """
     Muestra texto con pregunta a fin de confirmar si se continua
     con el entrenamiento o si se va realizar la predicción
     """
     Console.highlight("VOLVER A ENTRENAR?")
     print("1. Si, volver a entrenar.")
     print("2. No, continuar con la prediccion.")
     response = int(input("=> "))
     self.iterate_train() if response == 1 else self.predict_next_wc()
 def execution_model_neural_network(self):
     Console.highlight("7. ENTRENAMIENTO DE LA RED NEURONAL")
     self.epochs = int(input("Numero de epochs: "))
     self.model_nn.fit(self.x_train,
                       self.y_train,
                       epochs=self.epochs,
                       validation_data=(self.x_val, self.x_val),
                       batch_size=self.train_predictive_months)
     print("\nFin de entrenamiento")
     Console.stop_continue("[Enter para ver resultado]")
 def normalize_wc(self):
     """
     Normalizar valores del consumo de m3 a valores entre -1 a 1.
     """
     Console.highlight("3. NORMALIZACION DE LOS DATOS")
     scaler = MinMaxScaler(feature_range=(-1, 1))
     self.wc_normalize = scaler.fit_transform(self.df.values.reshape(-1, 1))
     print("Datos de la serie de tiempo normalizados [-1,1].")
     print(self.wc_normalize)
     Console.stop_continue("[Enter para continuar]")
 def convert_time_series_to_supervised_learning_matrix(self):
     """
     Convertimos serie de tiempo en una matrix de aprendizaje supervisado, con tantas variables predictoras
     ingresadas por consola.
     """
     Console.highlight(
         "4. CONVERTIR SERIE DE TIEMPO EN MATRIZ DE APRENDIZAJE SUPERVISADO"
     )
     self.train_predictive_months = int(
         input("Ingresar la cantidad de variables predictoras: "))
     self.matrix_sl = self.convert_sequence_to_matrix(1)
     print(
         "Matriz de la serie de tiempo con {} variables predictoras (entrenamiento)"
         .format(self.train_predictive_months))
     print("\n")
     print(self.matrix_sl)
     Console.stop_continue("[Enter para continuar]")
 def build_wc_df(self):
     """
     Construir dataframe de consumo de agua
     """
     Console.highlight(
         "2. CONSUMOS MENSUALES DE AGUA DEL DEPARTAMENTO {}".format(
             self.apartment))
     self.get_dataset_water_consumption()
     self.set_dataframe_wc()
     self.show_dataframe_wc()
     Console.stop_continue("[Ver consumos del {}]".format(self.apartment))
     print(self.df)
     Console.stop_continue("[Enter para continuar]")