原油周度调试上传预测值到市场信息平台

This commit is contained in:
workpc 2025-03-12 13:29:45 +08:00
parent 843d1e5b4b
commit 709e2ff3dd
3 changed files with 277 additions and 171 deletions

View File

@ -39,7 +39,6 @@ edbnamelist = [
] ]
# eta自有数据指标编码 # eta自有数据指标编码
modelsindex = { modelsindex = {
'NHITS': 'SELF0000001', 'NHITS': 'SELF0000001',
@ -90,15 +89,18 @@ data = {
ClassifyId = 1214 ClassifyId = 1214
# 变量定义--测试环境
############################################################################################################### 变量定义--测试环境
server_host = '192.168.100.53' server_host = '192.168.100.53'
login_pushreport_url = f"http://{server_host}:8080/jingbo-dev/api/server/login" 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" # 停更预警 upload_url = f"http://{server_host}:8080/jingbo-dev/api/analysis/reportInfo/researchUploadReportSave"
query_data_list_item_nos_url = f"http://{server_host}:8080/jingbo-dev/api/warehouse/dwDataItem/queryDataListItemNos" # 查询数据项编码 # 停更预警
push_data_value_list_url = f"http://{server_host}:8080/jingbo-dev/api/dw/dataValue/pushDataValueList" # 上传数据项值 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_value_list_url = f"http://{server_host}:8080/jingbo-dev/api/dw/dataValue/pushDataValueList"
login_data = { login_data = {
"data": { "data": {
@ -176,6 +178,12 @@ push_data_value_list_data = {
bdwd_items = { bdwd_items = {
'ciri': 'yyycbdwdcr', 'ciri': 'yyycbdwdcr',
'benzhou': 'yyycbdwdbz', 'benzhou': 'yyycbdwdbz',
'cizhou': 'yyycbdwdcz',
'gezhou': 'yyycbdwdgz',
'ciyue': 'yyycbdwdcy',
'cieryue': 'yyycbdwdcey',
'cisanyue': 'yyycbdwdcsy',
'cisiyue': 'yyycbdwdcsiy',
} }
@ -188,7 +196,7 @@ dbname = 'jingbo_test'
table_name = 'v_tbl_crude_oil_warning' table_name = 'v_tbl_crude_oil_warning'
### 开关 # 开关
is_train = False # 是否训练 is_train = False # 是否训练
is_debug = True # 是否调试 is_debug = True # 是否调试
is_eta = True # 是否使用eta接口 is_eta = True # 是否使用eta接口
@ -205,9 +213,9 @@ is_del_corr = 0.6 # 是否删除相关性高的特征,取值为 0-1 0 为不
is_del_tow_month = True # 是否删除两个月不更新的特征 is_del_tow_month = True # 是否删除两个月不更新的特征
# 连接到数据库 # 连接到数据库
db_mysql = MySQLDB(host=host, user=dbusername, password=password, database=dbname) db_mysql = MySQLDB(host=host, user=dbusername,
password=password, database=dbname)
db_mysql.connect() db_mysql.connect()
print("数据库连接成功", host, dbname, dbusername) print("数据库连接成功", host, dbname, dbusername)
@ -222,7 +230,7 @@ add_kdj = False # 是否添加kdj指标
if add_kdj and is_edbnamelist: if add_kdj and is_edbnamelist:
edbnamelist = edbnamelist+['K', 'D', 'J'] edbnamelist = edbnamelist+['K', 'D', 'J']
### 模型参数 # 模型参数
y = 'Brent连1合约价格' # 原油指标数据的目标变量 Brent连1合约价格 Brent活跃合约 y = 'Brent连1合约价格' # 原油指标数据的目标变量 Brent连1合约价格 Brent活跃合约
# y = 'Brent连1合约价格' # 原油指标数据的目标变量 Brent连1合约价格 Brent活跃合约 # y = 'Brent连1合约价格' # 原油指标数据的目标变量 Brent连1合约价格 Brent活跃合约
horizon = 5 # 预测的步长 horizon = 5 # 预测的步长
@ -234,16 +242,16 @@ early_stop_patience_steps = 5 # 早停的耐心步数
test_size = 100 # 测试集大小定义100后面使用的时候重新赋值 test_size = 100 # 测试集大小定义100后面使用的时候重新赋值
val_size = test_size # 验证集大小,同测试集大小 val_size = test_size # 验证集大小,同测试集大小
### 特征筛选用到的参数 # 特征筛选用到的参数
k = 100 # 特征筛选数量如果是0或者值比特征数量大代表全部特征 k = 100 # 特征筛选数量如果是0或者值比特征数量大代表全部特征
corr_threshold = 0.6 # 相关性大于0.6的特征 corr_threshold = 0.6 # 相关性大于0.6的特征
rote = 0.06 # 绘图上下界阈值 rote = 0.06 # 绘图上下界阈值
### 计算准确率 # 计算准确率
weight_dict = [0.4, 0.15, 0.1, 0.1, 0.25] # 权重 weight_dict = [0.4, 0.15, 0.1, 0.1, 0.25] # 权重
### 文件 # 文件
data_set = '原油指标数据.xlsx' # 数据集文件 data_set = '原油指标数据.xlsx' # 数据集文件
dataset = 'yuanyoudataset' # 数据集文件夹 dataset = 'yuanyoudataset' # 数据集文件夹
@ -260,7 +268,7 @@ reportname = f'Brent原油大模型预测--{end_time}.pdf' # 报告文件名
reportname = reportname.replace(':', '-') # 替换冒号 reportname = reportname.replace(':', '-') # 替换冒号
if end_time == '': if end_time == '':
end_time = now end_time = now
### 邮件配置 # 邮件配置
username = '1321340118@qq.com' username = '1321340118@qq.com'
passwd = 'wgczgyhtyyyyjghi' passwd = 'wgczgyhtyyyyjghi'
# recv=['liurui_test@163.com','52585119@qq.com'] # recv=['liurui_test@163.com','52585119@qq.com']
@ -273,7 +281,7 @@ file=os.path.join(dataset,'reportname')
ssl = True ssl = True
### 日志配置 # 日志配置
# 创建日志目录(如果不存在) # 创建日志目录(如果不存在)
log_dir = 'logs' log_dir = 'logs'
@ -285,8 +293,10 @@ logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO) logger.setLevel(logging.INFO)
# 配置文件处理器,将日志记录到文件 # 配置文件处理器,将日志记录到文件
file_handler = logging.handlers.RotatingFileHandler(os.path.join(log_dir, 'pricepredict.log'), maxBytes=1024 * 1024, backupCount=5) file_handler = logging.handlers.RotatingFileHandler(os.path.join(
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')) log_dir, 'pricepredict.log'), maxBytes=1024 * 1024, backupCount=5)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
# 配置控制台处理器,将日志打印到控制台 # 配置控制台处理器,将日志打印到控制台
console_handler = logging.StreamHandler() console_handler = logging.StreamHandler()
@ -297,4 +307,3 @@ logger.addHandler(file_handler)
logger.addHandler(console_handler) logger.addHandler(console_handler)
# logger.info('当前配置:'+settings) # logger.info('当前配置:'+settings)

View File

@ -96,6 +96,8 @@ 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_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" 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" query_data_list_item_nos_url = f"http://{server_host}:8080/jingbo-dev/api/warehouse/dwDataItem/queryDataListItemNos"
# 上传数据项值
push_data_value_list_url = f"http://{server_host}:8080/jingbo-dev/api/dw/dataValue/pushDataValueList"
login_data = { login_data = {
"data": { "data": {
@ -146,6 +148,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' host = '192.168.101.27'
@ -168,6 +203,7 @@ is_edbnamelist = False # 自定义特征对应上面的edbnamelist
is_update_eta = False # 预测结果上传到eta is_update_eta = False # 预测结果上传到eta
is_update_report = False # 是否上传报告 is_update_report = False # 是否上传报告
is_update_warning_data = 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_corr = 0.6 # 是否删除相关性高的特征,取值为 0-1 0 为不删除0.6 表示删除相关性小于0.6的特征
is_del_tow_month = True # 是否删除两个月不更新的特征 is_del_tow_month = True # 是否删除两个月不更新的特征

View File

@ -29,6 +29,7 @@ global_config.update({
'test_size': test_size, 'test_size': test_size,
'modelsindex': modelsindex, 'modelsindex': modelsindex,
'rote': rote, 'rote': rote,
'bdwd_items': bdwd_items,
# 特征工程开关 # 特征工程开关
'is_del_corr': is_del_corr, 'is_del_corr': is_del_corr,
@ -36,6 +37,7 @@ global_config.update({
'is_eta': is_eta, 'is_eta': is_eta,
'is_update_eta': is_update_eta, 'is_update_eta': is_update_eta,
'is_fivemodels': is_fivemodels, 'is_fivemodels': is_fivemodels,
'is_update_predict_value': is_update_predict_value,
'early_stop_patience_steps': early_stop_patience_steps, '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_url': query_data_list_item_nos_url,
'query_data_list_item_nos_data': query_data_list_item_nos_data, '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 配置 # eta 配置
'APPID': APPID, 'APPID': APPID,
'SECRET': SECRET, 'SECRET': SECRET,
@ -65,12 +71,67 @@ global_config.update({
'edbdatapushurl': edbdatapushurl, 'edbdatapushurl': edbdatapushurl,
'edbdeleteurl': edbdeleteurl, 'edbdeleteurl': edbdeleteurl,
'edbbusinessurl': edbbusinessurl, 'edbbusinessurl': edbbusinessurl,
'ClassifyId': ClassifyId,
'classifylisturl': classifylisturl, 'classifylisturl': classifylisturl,
# 数据库配置 # 数据库配置
'sqlitedb': sqlitedb, 'sqlitedb': sqlitedb,
}) })
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']])
# 准备要推送的数据
first_date = predictdata_df['ds'].iloc[0].replace('-', '')
last_date = predictdata_df['ds'].iloc[-1].replace('-', '')
first_mean = predictdata_df['top_models_mean'].iloc[0]
last_mean = predictdata_df['top_models_mean'].iloc[-1]
predictdata = [
{
"dataItemNo": global_config['bdwd_items']['cizhou'],
"dataDate": first_date,
"dataStatus": "add",
"dataValue": first_mean
},
{
"dataItemNo": global_config['bdwd_items']['gezhou'],
"dataDate": last_date,
"dataStatus": "add",
"dataValue": last_mean
}
]
print(predictdata)
# 推送数据到市场信息平台
try:
push_market_data(predictdata)
except Exception as e:
logger.error(f"推送数据失败: {e}")
def predict_main(): def predict_main():
""" """
主预测函数用于从 ETA 获取数据处理数据训练模型并进行预测 主预测函数用于从 ETA 获取数据处理数据训练模型并进行预测