From c1f3da8340f3ecd8b2866c1c0d16cbbfc4be62a0 Mon Sep 17 00:00:00 2001 From: workpc Date: Wed, 12 Mar 2025 13:47:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=88=E5=BA=A6=E9=85=8D=E7=BD=AE=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E9=A2=84=E6=B5=8B=E7=BB=93=E6=9E=9C=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=88=B0=E5=B8=82=E5=9C=BA=E4=BF=A1=E6=81=AF=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config_jingbo.py | 4 +- config_jingbo_yuedu.py | 45 ++++++++++++++-- main_yuanyou_yuedu.py | 120 ++++++++++++++++++++++++++++++++--------- 3 files changed, 136 insertions(+), 33 deletions(-) diff --git a/config_jingbo.py b/config_jingbo.py index 5516e65..49e3ffb 100644 --- a/config_jingbo.py +++ b/config_jingbo.py @@ -90,8 +90,8 @@ ClassifyId = 1214 # 变量定义--测试环境 -server_host = '192.168.100.53' - +# server_host = '192.168.100.53' # 内网 +server_host = '183.242.74.28 ' # 外网 login_pushreport_url = f"http://{server_host}:8080/jingbo-dev/api/server/login" # 上传报告 upload_url = f"http://{server_host}:8080/jingbo-dev/api/analysis/reportInfo/researchUploadReportSave" diff --git a/config_jingbo_yuedu.py b/config_jingbo_yuedu.py index f32f8ee..6f7127b 100644 --- a/config_jingbo_yuedu.py +++ b/config_jingbo_yuedu.py @@ -90,15 +90,14 @@ ClassifyId = 1214 # 变量定义--测试环境 -server_host = '192.168.100.53' - +# server_host = '192.168.100.53' # 内网 +server_host = '183.242.74.28 ' # 外网 login_pushreport_url = f"http://{server_host}:8080/jingbo-dev/api/server/login" upload_url = f"http://{server_host}:8080/jingbo-dev/api/analysis/reportInfo/researchUploadReportSave" upload_warning_url = f"http://{server_host}:8080/jingbo-dev/api/basicBuiness/crudeOilWarning/save" query_data_list_item_nos_url = f"http://{server_host}:8080/jingbo-dev/api/warehouse/dwDataItem/queryDataListItemNos" -# 数据项推送接口 -push_data_balue_list = f"http://{server_host}:8080/jingbo-dev/api/dw/dataValue/pushDataValueList" - +# 上传数据项值 +push_data_value_list_url = f"http://{server_host}:8080/jingbo-dev/api/dw/dataValue/pushDataValueList" login_data = { "data": { @@ -113,6 +112,7 @@ login_data = { } upload_data = { + "groupNo": '', # 用户组id "funcModule": '研究报告信息', "funcOperation": '上传原油价格预测报告', "data": { @@ -130,6 +130,7 @@ upload_data = { warning_data = { + "groupNo": '', # 用户组id "funcModule": '原油特征停更预警', "funcOperation": '原油特征停更预警', "data": { @@ -149,6 +150,39 @@ query_data_list_item_nos_data = { } } +push_data_value_list_data = { + "funcModule": "数据表信息列表", + "funcOperation": "新增", + "data": [ + {"dataItemNo": "91230600716676129", + "dataDate": "20230113", + "dataStatus": "add", + "dataValue": 100.11 + }, + {"dataItemNo": "91230600716676129P|ETHYL_BEN|CAPACITY", + "dataDate": "20230113", + "dataStatus": "add", + "dataValue": 100.55 + }, + {"dataItemNo": "91230600716676129P|ETHYL_BEN|CAPACITY", + "dataDate": "20230113", + "dataStatus": "add", + "dataValue": 100.55 + } + ] +} +# 八大维度数据项编码 +bdwd_items = { + 'ciri': 'yyycbdwdcr', + 'benzhou': 'yyycbdwdbz', + 'cizhou': 'yyycbdwdcz', + 'gezhou': 'yyycbdwdgz', + 'ciyue': 'yyycbdwdcy', + 'cieryue': 'yyycbdwdcey', + 'cisanyue': 'yyycbdwdcsy', + 'cisiyue': 'yyycbdwdcsiy', +} + # 北京环境数据库 host = '192.168.101.27' @@ -171,6 +205,7 @@ is_edbnamelist = False # 自定义特征,对应上面的edbnamelist is_update_eta = False # 预测结果上传到eta is_update_report = False # 是否上传报告 is_update_warning_data = False # 是否上传预警数据 +is_update_predict_value = True # 是否上传预测值到市场信息平台 is_del_corr = 0.6 # 是否删除相关性高的特征,取值为 0-1 ,0 为不删除,0.6 表示删除相关性小于0.6的特征 is_del_tow_month = True # 是否删除两个月不更新的特征 diff --git a/main_yuanyou_yuedu.py b/main_yuanyou_yuedu.py index 5a504fa..1773143 100644 --- a/main_yuanyou_yuedu.py +++ b/main_yuanyou_yuedu.py @@ -29,6 +29,7 @@ global_config.update({ 'test_size': test_size, 'modelsindex': modelsindex, 'rote': rote, + 'bdwd_items': bdwd_items, # 特征工程开关 'is_del_corr': is_del_corr, @@ -36,6 +37,7 @@ global_config.update({ 'is_eta': is_eta, 'is_update_eta': is_update_eta, 'is_fivemodels': is_fivemodels, + 'is_update_predict_value': is_update_predict_value, 'early_stop_patience_steps': early_stop_patience_steps, # 时间参数 @@ -54,6 +56,10 @@ global_config.update({ 'query_data_list_item_nos_url': query_data_list_item_nos_url, 'query_data_list_item_nos_data': query_data_list_item_nos_data, + # 上传数据项 + 'push_data_value_list_url': push_data_value_list_url, + 'push_data_value_list_data': push_data_value_list_data, + # eta 配置 'APPID': APPID, 'SECRET': SECRET, @@ -73,6 +79,75 @@ global_config.update({ }) +def push_market_value(): + logger.info('发送预测结果到市场信息平台') + # 读取预测数据和模型评估数据 + predict_file_path = os.path.join(config.dataset, 'predict.csv') + model_eval_file_path = os.path.join(config.dataset, 'model_evaluation.csv') + try: + predictdata_df = pd.read_csv(predict_file_path) + top_models_df = pd.read_csv(model_eval_file_path) + except FileNotFoundError as e: + logger.error(f"文件未找到: {e}") + return + + predictdata = predictdata_df.copy() + + # 取模型前十 + top_models = top_models_df['模型(Model)'].head(10).tolist() + + # 计算前十模型的均值 + predictdata_df['top_models_mean'] = predictdata_df[top_models].mean(axis=1) + + # 打印日期和前十模型均值 + print(predictdata_df[['ds', 'top_models_mean']]) + + # 准备要推送的数据 + ciyue_date = predictdata_df['ds'].iloc[0].replace('-', '') + cieryue_date = predictdata_df['ds'].iloc[1].replace('-', '') + cisanyue_date = predictdata_df['ds'].iloc[2].replace('-', '') + cisiyue_date = predictdata_df['ds'].iloc[3].replace('-', '') + ciyue_mean = predictdata_df['top_models_mean'].iloc[0] + cieryue_mean = predictdata_df['top_models_mean'].iloc[1] + cisanyue_mean = predictdata_df['top_models_mean'].iloc[2] + cisieryue_mean = predictdata_df['top_models_mean'].iloc[3] + + predictdata = [ + { + "dataItemNo": global_config['bdwd_items']['ciyue'], + "dataDate": ciyue_date, + "dataStatus": "add", + "dataValue": ciyue_mean + }, + { + "dataItemNo": global_config['bdwd_items']['cieryue'], + "dataDate": cieryue_date, + "dataStatus": "add", + "dataValue": cieryue_mean + }, + { + "dataItemNo": global_config['bdwd_items']['cisanyue'], + "dataDate": cisanyue_date, + "dataStatus": "add", + "dataValue": cisanyue_mean + }, + { + "dataItemNo": global_config['bdwd_items']['cisiyue'], + "dataDate": cisiyue_date, + "dataStatus": "add", + "dataValue": cisieryue_mean + } + ] + + print(predictdata) + + # 推送数据到市场信息平台 + try: + push_market_data(predictdata) + except Exception as e: + logger.error(f"推送数据失败: {e}") + + def predict_main(): """ 主预测函数,用于从 ETA 获取数据、处理数据、训练模型并进行预测。 @@ -113,28 +188,19 @@ def predict_main(): None """ end_time = global_config['end_time'] - signature = BinanceAPI(APPID, SECRET) - etadata = EtaReader(signature=signature, - classifylisturl=classifylisturl, - classifyidlisturl=classifyidlisturl, - edbcodedataurl=edbcodedataurl, - edbcodelist=edbcodelist, - edbdatapushurl=edbdatapushurl, - edbdeleteurl=edbdeleteurl, - edbbusinessurl=edbbusinessurl - ) # 获取数据 if is_eta: logger.info('从eta获取数据...') signature = BinanceAPI(APPID, SECRET) etadata = EtaReader(signature=signature, - classifylisturl=classifylisturl, - classifyidlisturl=classifyidlisturl, - edbcodedataurl=edbcodedataurl, - edbcodelist=edbcodelist, - edbdatapushurl=edbdatapushurl, - edbdeleteurl=edbdeleteurl, - edbbusinessurl=edbbusinessurl, + classifylisturl=global_config['classifylisturl'], + classifyidlisturl=global_config['classifyidlisturl'], + edbcodedataurl=global_config['edbcodedataurl'], + edbcodelist=global_config['edbcodelist'], + edbdatapushurl=global_config['edbdatapushurl'], + edbdeleteurl=global_config['edbdeleteurl'], + edbbusinessurl=global_config['edbbusinessurl'], + classifyId=global_config['ClassifyId'], ) df_zhibiaoshuju, df_zhibiaoliebiao = etadata.get_eta_api_yuanyou_data( data_set=data_set, dataset=dataset) # 原始数据,未处理 @@ -348,16 +414,18 @@ def predict_main(): model_results3 = model_losss(sqlitedb, end_time=end_time) logger.info('训练数据绘图end') - # # 模型报告 - # logger.info('制作报告ing') - # title = f'{settings}--{end_time}-预测报告' # 报告标题 - # reportname = f'Brent原油大模型月度预测--{end_time}.pdf' # 报告文件名 - # reportname = reportname.replace(':', '-') # 替换冒号 - # brent_export_pdf(dataset=dataset, num_models=5 if is_fivemodels else 22, time=end_time, - # reportname=reportname, sqlitedb=sqlitedb), + # 模型报告 + logger.info('制作报告ing') + title = f'{settings}--{end_time}-预测报告' # 报告标题 + reportname = f'Brent原油大模型月度预测--{end_time}.pdf' # 报告文件名 + reportname = reportname.replace(':', '-') # 替换冒号 + brent_export_pdf(dataset=dataset, num_models=5 if is_fivemodels else 22, time=end_time, + reportname=reportname, sqlitedb=sqlitedb), - # logger.info('制作报告end') - # logger.info('模型训练完成') + logger.info('制作报告end') + logger.info('模型训练完成') + + push_market_value() # # LSTM 单变量模型 # ex_Lstm(df,input_seq_len=input_size,output_seq_len=horizon,is_debug=is_debug,dataset=dataset)