model_prediction_bp.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from flask import Flask,request
  2. import time
  3. import logging
  4. import traceback
  5. from itertools import chain
  6. from common.database_dml import get_data_from_mongo,insert_data_into_mongo,get_h5_model_from_mongo,get_scaler_model_from_mongo
  7. from common.processing_data_common import str_to_list
  8. app = Flask('model_prediction_bp——service')
  9. # 创建时间序列数据
  10. def model_prediction(df,args):
  11. if 'is_limit' in df.columns:
  12. df = df[df['is_limit'] == False]
  13. features, time_steps, col_time, model_name,col_reserve,howlongago = str_to_list(args['features']), int(args['time_steps']),args['col_time'],args['model_name'],str_to_list(args['col_reserve']),int(args['howlongago'])
  14. feature_scaler,target_scaler = get_scaler_model_from_mongo(args)
  15. df = df.sort_values(by=col_time).fillna(method='ffill').fillna(method='bfill')
  16. scaled_features = feature_scaler.transform(df[features])
  17. # X_predict, _ = create_sequences(scaled_features, [], time_steps)
  18. # 加载模型时传入自定义损失函数
  19. # model = load_model(f'{farmId}_model.h5', custom_objects={'rmse': rmse})
  20. model = get_h5_model_from_mongo(args)
  21. y_predict = list(chain.from_iterable(target_scaler.inverse_transform([model.predict(scaled_features).flatten()])))
  22. result = df[-len(y_predict):]
  23. result['predict'] = y_predict
  24. result.loc[result['predict'] < 0, 'predict'] = 0
  25. result['model'] = model_name
  26. result['howlongago'] = howlongago
  27. features_reserve = col_reserve + ['model', 'predict', 'howlongago']
  28. return result[list(set(features_reserve))]
  29. @app.route('/model_prediction_bp', methods=['POST'])
  30. def model_prediction_bp():
  31. # 获取程序开始时间
  32. start_time = time.time()
  33. result = {}
  34. success = 0
  35. print("Program starts execution!")
  36. try:
  37. args = request.values.to_dict()
  38. print('args',args)
  39. logger.info(args)
  40. power_df = get_data_from_mongo(args)
  41. model = model_prediction(power_df,args)
  42. insert_data_into_mongo(model,args)
  43. success = 1
  44. except Exception as e:
  45. my_exception = traceback.format_exc()
  46. my_exception.replace("\n","\t")
  47. result['msg'] = my_exception
  48. end_time = time.time()
  49. result['success'] = success
  50. result['args'] = args
  51. result['start_time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(start_time))
  52. result['end_time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(end_time))
  53. print("Program execution ends!")
  54. return result
  55. if __name__=="__main__":
  56. print("Program starts execution!")
  57. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  58. logger = logging.getLogger("model_prediction_bp log")
  59. from waitress import serve
  60. serve(app, host="0.0.0.0", port=10104)
  61. print("server start!")