聚烯烃配置文件更改

This commit is contained in:
workpc 2025-03-19 15:47:04 +08:00
parent 7701a974cb
commit c9b4673389
4 changed files with 329 additions and 331 deletions

View File

@ -209,7 +209,7 @@ is_timefurture = True # 是否使用时间特征
is_fivemodels = False # 是否使用之前保存的最佳的5个模型 is_fivemodels = False # 是否使用之前保存的最佳的5个模型
is_edbcode = False # 特征使用edbcoding列表中的 is_edbcode = False # 特征使用edbcoding列表中的
is_edbnamelist = False # 自定义特征对应上面的edbnamelist is_edbnamelist = False # 自定义特征对应上面的edbnamelist
is_update_eta = False # 预测结果上传到eta is_update_eta = True # 预测结果上传到eta
is_update_report = False # 是否上传报告 is_update_report = False # 是否上传报告
is_update_warning_data = False # 是否上传预警数据 is_update_warning_data = False # 是否上传预警数据
is_del_corr = 0.6 # 是否删除相关性高的特征,取值为 0-1 0 为不删除0.6 表示删除相关性小于0.6的特征 is_del_corr = 0.6 # 是否删除相关性高的特征,取值为 0-1 0 为不删除0.6 表示删除相关性小于0.6的特征

View File

@ -2,7 +2,7 @@ import logging
import os import os
import logging.handlers import logging.handlers
import datetime import datetime
from lib.tools import MySQLDB,SQLiteHandler from lib.tools import MySQLDB, SQLiteHandler
# eta 接口token # eta 接口token
@ -10,35 +10,35 @@ APPID = "XNLDvxZHHugj7wJ7"
SECRET = "iSeU4s6cKKBVbt94htVY1p0sqUMqb2xa" SECRET = "iSeU4s6cKKBVbt94htVY1p0sqUMqb2xa"
# eta 接口url # eta 接口url
sourcelisturl = 'http://10.189.2.78:8108/v1/edb/source/list' sourcelisturl = 'http://10.189.2.78:8108/v1/edb/source/list'
classifylisturl = 'http://10.189.2.78:8108/v1/edb/classify/list?ClassifyType=' classifylisturl = 'http://10.189.2.78:8108/v1/edb/classify/list?ClassifyType='
uniquecodedataurl = 'http://10.189.2.78:8108/v1/edb/data?UniqueCode=4991c37becba464609b409909fe4d992&StartDate=2024-02-01' uniquecodedataurl = 'http://10.189.2.78:8108/v1/edb/data?UniqueCode=4991c37becba464609b409909fe4d992&StartDate=2024-02-01'
classifyidlisturl = 'http://10.189.2.78:8108/v1/edb/list?ClassifyId=' classifyidlisturl = 'http://10.189.2.78:8108/v1/edb/list?ClassifyId='
edbcodedataurl = 'http://10.189.2.78:8108/v1/edb/data?EdbCode=' edbcodedataurl = 'http://10.189.2.78:8108/v1/edb/data?EdbCode='
edbdatapushurl = 'http://10.189.2.78:8108/v1/edb/push' edbdatapushurl = 'http://10.189.2.78:8108/v1/edb/push'
edbdeleteurl = 'http://10.189.2.78:8108/v1/edb/business/edb/del' edbdeleteurl = 'http://10.189.2.78:8108/v1/edb/business/edb/del'
edbbusinessurl = 'http://10.189.2.78:8108/v1/edb/business/data/del' edbbusinessurl = 'http://10.189.2.78:8108/v1/edb/business/data/del'
edbcodelist = ['ID01385938','lmcads03 lme comdty', edbcodelist = ['ID01385938', 'lmcads03 lme comdty',
'GC1 COMB Comdty', 'GC1 COMB Comdty',
'C2404171822', 'C2404171822',
'dxy curncy', 'dxy curncy',
'S5443199 ', 'S5443199 ',
'S5479800', 'S5479800',
'S5443108', 'S5443108',
'H7358586', 'H7358586',
'LC3FM1 INDEX', 'LC3FM1 INDEX',
'CNY REGN Curncy', 'CNY REGN Curncy',
's0105897', 's0105897',
'M0067419', 'M0067419',
'M0066351', 'M0066351',
'S0266372', 'S0266372',
'S0266438', 'S0266438',
'S0266506', 'S0266506',
'ID01384463'] 'ID01384463']
# 临时写死用指定的列,与上面的edbcode对应后面更改 # 临时写死用指定的列,与上面的edbcode对应后面更改
edbnamelist = [ edbnamelist = [
'ds','y', 'ds', 'y',
'LME铜价', 'LME铜价',
'黄金连1合约', '黄金连1合约',
'Brent-WTI', 'Brent-WTI',
@ -52,66 +52,65 @@ edbnamelist = [
'南华工业品指数', '南华工业品指数',
'PVC期货主力', 'PVC期货主力',
'PE期货收盘价', 'PE期货收盘价',
'PP连续-1月', 'PP连续-1月',
'PP连续-5月', 'PP连续-5月',
'PP连续-9月', 'PP连续-9月',
'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料' 'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料'
] ]
edbcodenamedict = { edbcodenamedict = {
'ID01385938':'PP拉丝1102K市场价青州国家能源宁煤', 'ID01385938': 'PP拉丝1102K市场价青州国家能源宁煤',
'ID01384463':'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料', 'ID01384463': 'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料',
'lmcads03 lme comdty':'LME铜价', 'lmcads03 lme comdty': 'LME铜价',
'GC1 COMB Comdty':'黄金连1合约', 'GC1 COMB Comdty': '黄金连1合约',
'C2404171822':'Brent-WTI', 'C2404171822': 'Brent-WTI',
'dxy curncy':'美元指数', 'dxy curncy': '美元指数',
'S5443199 ':'甲醇鲁南价格', 'S5443199 ': '甲醇鲁南价格',
'S5479800':'甲醇太仓港口价格', 'S5479800': '甲醇太仓港口价格',
'S5443108':'山东丙烯主流价', 'S5443108': '山东丙烯主流价',
'H7358586':'丙烷(山东)', 'H7358586': '丙烷(山东)',
'LC3FM1 INDEX':'FEI丙烷 M1', 'LC3FM1 INDEX': 'FEI丙烷 M1',
'CNY REGN Curncy':'在岸人民币汇率', 'CNY REGN Curncy': '在岸人民币汇率',
's0105897':'南华工业品指数', 's0105897': '南华工业品指数',
'M0067419':'PVC期货主力', 'M0067419': 'PVC期货主力',
'M0066351':'PE期货收盘价', 'M0066351': 'PE期货收盘价',
'S0266372':'PP连续-1月', 'S0266372': 'PP连续-1月',
'S0266438':'PP连续-5月', 'S0266438': 'PP连续-5月',
'S0266506':'PP连续-9月', 'S0266506': 'PP连续-9月',
} }
# eta自有数据指标编码 # eta自有数据指标编码
modelsindex = { modelsindex = {
'NHITS': 'SELF0000077', 'NHITS': 'SELF0000077',
'Informer':'SELF0000078', 'Informer': 'SELF0000078',
'LSTM':'SELF0000079', 'LSTM': 'SELF0000079',
'iTransformer':'SELF0000080', 'iTransformer': 'SELF0000080',
'TSMixer':'SELF0000081', 'TSMixer': 'SELF0000081',
'TSMixerx':'SELF0000082', 'TSMixerx': 'SELF0000082',
'PatchTST':'SELF0000083', 'PatchTST': 'SELF0000083',
'RNN':'SELF0000084', 'RNN': 'SELF0000084',
'GRU':'SELF0000085', 'GRU': 'SELF0000085',
'TCN':'SELF0000086', 'TCN': 'SELF0000086',
'BiTCN':'SELF0000087', 'BiTCN': 'SELF0000087',
'DilatedRNN':'SELF0000088', 'DilatedRNN': 'SELF0000088',
'MLP':'SELF0000089', 'MLP': 'SELF0000089',
'DLinear':'SELF0000090', 'DLinear': 'SELF0000090',
'NLinear':'SELF0000091', 'NLinear': 'SELF0000091',
'TFT':'SELF0000092', 'TFT': 'SELF0000092',
'FEDformer':'SELF0000093', 'FEDformer': 'SELF0000093',
'StemGNN':'SELF0000094', 'StemGNN': 'SELF0000094',
'MLPMultivariate':'SELF0000095', 'MLPMultivariate': 'SELF0000095',
'TiDE':'SELF0000096', 'TiDE': 'SELF0000096',
'DeepNPTS':'SELF0000097' 'DeepNPTS': 'SELF0000097'
} }
# eta 上传预测结果的请求体,后面发起请求的时候更改 model datalist 数据 # eta 上传预测结果的请求体,后面发起请求的时候更改 model datalist 数据
data = { data = {
"IndexCode": "", "IndexCode": "",
"IndexName": "价格预测模型", "IndexName": "价格预测模型",
"Unit": "", "Unit": "",
"Frequency": "日度", "Frequency": "日度",
"SourceName": f"价格预测", "SourceName": f"价格预测",
"Remark": 'ddd', "Remark": 'ddd',
@ -121,19 +120,18 @@ data = {
"Value": 333444 "Value": 333444
} }
] ]
} }
# eta 分类 # eta 分类
# level3才可以获取到数据所以需要人工把能源化工下所有的level3级都找到 # level3才可以获取到数据所以需要人工把能源化工下所有的level3级都找到
# url = 'http://10.189.2.78:8108/v1/edb/list?ClassifyId=1214' # url = 'http://10.189.2.78:8108/v1/edb/list?ClassifyId=1214'
#ParentId ":1160, 能源化工 # ParentId ":1160, 能源化工
# ClassifyId ":1214,原油 # ClassifyId ":1214,原油
#ParentId ":1214,",就是原油下所有的数据。 # ParentId ":1214,",就是原油下所有的数据。
ClassifyId = 1161 ClassifyId = 1161
# 变量定义--测试环境
############################################################################################################### 变量定义--测试环境
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"
@ -145,7 +143,7 @@ login_data = {
"data": { "data": {
"account": "api_test", "account": "api_test",
# "password": "MmVmNzNlOWI0MmY0ZDdjZGUwNzE3ZjFiMDJiZDZjZWU=", # Shihua@123456 # "password": "MmVmNzNlOWI0MmY0ZDdjZGUwNzE3ZjFiMDJiZDZjZWU=", # Shihua@123456
"password": "ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=", # 123456 "password": "ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=", # 123456
"tenantHashCode": "8a4577dbd919675758d57999a1e891fe", "tenantHashCode": "8a4577dbd919675758d57999a1e891fe",
"terminal": "API" "terminal": "API"
}, },
@ -154,39 +152,39 @@ login_data = {
} }
upload_data = { upload_data = {
"funcModule":'研究报告信息', "funcModule": '研究报告信息',
"funcOperation":'上传聚烯烃PP价格预测报告', "funcOperation": '上传聚烯烃PP价格预测报告',
"data":{ "data": {
"ownerAccount":'arui', #报告所属用户账号 "ownerAccount": 'arui', # 报告所属用户账号
"reportType":'OIL_PRICE_FORECAST', # 报告类型固定为OIL_PRICE_FORECAST "reportType": 'OIL_PRICE_FORECAST', # 报告类型固定为OIL_PRICE_FORECAST
"fileName": '2000-40-5-50--100-原油指标数据.xlsx-Brent活跃合约--2024-09-06-15-01-29-预测报告.pdf', #文件名称 "fileName": '2000-40-5-50--100-原油指标数据.xlsx-Brent活跃合约--2024-09-06-15-01-29-预测报告.pdf', # 文件名称
"fileBase64": '' ,#文件内容base64 "fileBase64": '', # 文件内容base64
"categoryNo":'yyjgycbg', # 研究报告分类编码 "categoryNo": 'yyjgycbg', # 研究报告分类编码
"smartBusinessClassCode":'JXTJGYCBG', #分析报告分类编码 "smartBusinessClassCode": 'JXTJGYCBG', # 分析报告分类编码
"reportEmployeeCode":"E40116", # 报告人 "reportEmployeeCode": "E40116", # 报告人
"reportDeptCode" :"D0044" ,# 报告部门 "reportDeptCode": "D0044", # 报告部门
"productGroupCode":"RAW_MATERIAL" # 商品分类 "productGroupCode": "RAW_MATERIAL" # 商品分类
} }
} }
warning_data = { warning_data = {
"funcModule":'原油特征停更预警', "funcModule": '原油特征停更预警',
"funcOperation":'原油特征停更预警', "funcOperation": '原油特征停更预警',
"data":{ "data": {
'WARNING_TYPE_NAME':'特征数据停更预警', 'WARNING_TYPE_NAME': '特征数据停更预警',
'WARNING_CONTENT':'', 'WARNING_CONTENT': '',
'WARNING_DATE':'' 'WARNING_DATE': ''
} }
} }
query_data_list_item_nos_data = { query_data_list_item_nos_data = {
"funcModule": "数据项", "funcModule": "数据项",
"funcOperation": "查询", "funcOperation": "查询",
"data": { "data": {
"dateStart":"20200101", "dateStart": "20200101",
"dateEnd":"20241231", "dateEnd": "20241231",
"dataItemNoList":["Brentzdj","Brentzgj"] # 数据项编码,代表 brent最低价和最高价 "dataItemNoList": ["Brentzdj", "Brentzgj"] # 数据项编码,代表 brent最低价和最高价
} }
} }
@ -194,104 +192,104 @@ query_data_list_item_nos_data = {
# 北京环境数据库 # 北京环境数据库
host = '192.168.101.27' host = '192.168.101.27'
port = 3306 port = 3306
dbusername ='root' dbusername = 'root'
password = '123456' password = '123456'
dbname = 'jingbo_test' dbname = 'jingbo_test'
table_name = 'v_tbl_crude_oil_warning' table_name = 'v_tbl_crude_oil_warning'
### 开关 # 开关
is_train = True # 是否训练 is_train = True # 是否训练
is_debug = True # 是否调试 is_debug = False # 是否调试
is_eta = True # 是否使用eta接口 is_eta = True # 是否使用eta接口
is_market = False # 是否通过市场信息平台获取特征 ,在is_eta 为true 的情况下生效 is_market = False # 是否通过市场信息平台获取特征 ,在is_eta 为true 的情况下生效
is_timefurture = True # 是否使用时间特征 is_timefurture = True # 是否使用时间特征
is_fivemodels = False # 是否使用之前保存的最佳的5个模型 is_fivemodels = False # 是否使用之前保存的最佳的5个模型
is_edbcode = False # 特征使用edbcoding列表中的 is_edbcode = False # 特征使用edbcoding列表中的
is_edbnamelist = False # 自定义特征对应上面的edbnamelist 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_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 # 是否删除两个月不更新的特征
# 连接到数据库 # 连接到数据库
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)
# 数据截取日期 # 数据截取日期
start_year = 2000 # 数据开始年份 start_year = 2000 # 数据开始年份
end_time = '' # 数据截取日期 end_time = '' # 数据截取日期
freq = 'M' # 时间频率,"D": 天 "W": 周"M": 月"Q": 季度"A": 年 "H": 小时 "T": 分钟 "S": 秒 "B": 工作日 freq = 'M' # 时间频率,"D": 天 "W": 周"M": 月"Q": 季度"A": 年 "H": 小时 "T": 分钟 "S": 秒 "B": 工作日
delweekenday = True if freq == 'B' else False # 是否删除周末数据 delweekenday = True if freq == 'B' else False # 是否删除周末数据
is_corr = False # 特征是否参与滞后领先提升相关系数 is_corr = False # 特征是否参与滞后领先提升相关系数
add_kdj = False # 是否添加kdj指标 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 = 'AVG-金能大唐久泰青州' y = 'AVG-金能大唐久泰青州'
avg_cols = [ avg_cols = [
'PP拉丝1102K出厂价青州国家能源宁煤', 'PP拉丝1102K出厂价青州国家能源宁煤',
'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料', 'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料',
'PP拉丝L5E89出厂价河北、鲁北大唐内蒙多伦', 'PP拉丝L5E89出厂价河北、鲁北大唐内蒙多伦',
'PP拉丝HP550J市场价青岛金能化学' 'PP拉丝HP550J市场价青岛金能化学'
] ]
offsite = 80 offsite = 80
offsite_col = ['PP拉丝HP550J市场价青岛金能化学'] offsite_col = ['PP拉丝HP550J市场价青岛金能化学']
horizon =4 # 预测的步长 horizon = 4 # 预测的步长
input_size = 16 # 输入序列长度 input_size = 16 # 输入序列长度
train_steps = 50 if is_debug else 1000 # 训练步数,用来限定epoch次数 train_steps = 50 if is_debug else 1000 # 训练步数,用来限定epoch次数
val_check_steps = 30 # 评估频率 val_check_steps = 30 # 评估频率
early_stop_patience_steps = 5 # 早停的耐心步数 early_stop_patience_steps = 5 # 早停的耐心步数
# --- 交叉验证用的参数 # --- 交叉验证用的参数
test_size = 200 # 测试集大小定义100后面使用的时候重新赋值 test_size = 200 # 测试集大小定义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 = 'PP指标数据.xlsx' # 数据集文件 data_set = 'PP指标数据.xlsx' # 数据集文件
dataset = 'juxitingyuedudataset' # 数据集文件夹 dataset = 'juxitingyuedudataset' # 数据集文件夹
# 数据库名称 # 数据库名称
db_name = os.path.join(dataset,'jbsh_juxiting_yuedu.db') db_name = os.path.join(dataset, 'jbsh_juxiting_yuedu.db')
sqlitedb = SQLiteHandler(db_name) sqlitedb = SQLiteHandler(db_name)
sqlitedb.connect() sqlitedb.connect()
settings = f'{input_size}-{horizon}-{train_steps}--{k}-{data_set}-{y}' settings = f'{input_size}-{horizon}-{train_steps}--{k}-{data_set}-{y}'
# 获取日期时间 # 获取日期时间
# now = datetime.datetime.now().strftime('%Y%m%d%H%M%S') # 获取当前日期时间 # now = datetime.datetime.now().strftime('%Y%m%d%H%M%S') # 获取当前日期时间
now = datetime.datetime.now().strftime('%Y-%m-%d') # 获取当前日期时间 now = datetime.datetime.now().strftime('%Y-%m-%d') # 获取当前日期时间
reportname = f'PP大模型预测报告--{end_time}.pdf' # 报告文件名 reportname = f'PP大模型预测报告--{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']
recv=['liurui_test@163.com'] recv = ['liurui_test@163.com']
# recv=['liurui_test@163.com'] # recv=['liurui_test@163.com']
title='reportname' title = 'reportname'
content=y+'预测报告请看附件' content = y+'预测报告请看附件'
file=os.path.join(dataset,'reportname') file = os.path.join(dataset, 'reportname')
# file=os.path.join(dataset,'14-7-50--100-原油指标数据.xlsx-Brent连1合约价格--20240731175936-预测报告.pdf') # file=os.path.join(dataset,'14-7-50--100-原油指标数据.xlsx-Brent连1合约价格--20240731175936-预测报告.pdf')
ssl=True ssl = True
### 日志配置 # 日志配置
# 创建日志目录(如果不存在) # 创建日志目录(如果不存在)
log_dir = 'logs' log_dir = 'logs'
@ -303,8 +301,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()
@ -315,4 +315,3 @@ logger.addHandler(file_handler)
logger.addHandler(console_handler) logger.addHandler(console_handler)
# logger.info('当前配置:'+settings) # logger.info('当前配置:'+settings)

View File

@ -2,7 +2,7 @@ import logging
import os import os
import logging.handlers import logging.handlers
import datetime import datetime
from lib.tools import MySQLDB,SQLiteHandler from lib.tools import MySQLDB, SQLiteHandler
# eta 接口token # eta 接口token
@ -10,35 +10,35 @@ APPID = "XNLDvxZHHugj7wJ7"
SECRET = "iSeU4s6cKKBVbt94htVY1p0sqUMqb2xa" SECRET = "iSeU4s6cKKBVbt94htVY1p0sqUMqb2xa"
# eta 接口url # eta 接口url
sourcelisturl = 'http://10.189.2.78:8108/v1/edb/source/list' sourcelisturl = 'http://10.189.2.78:8108/v1/edb/source/list'
classifylisturl = 'http://10.189.2.78:8108/v1/edb/classify/list?ClassifyType=' classifylisturl = 'http://10.189.2.78:8108/v1/edb/classify/list?ClassifyType='
uniquecodedataurl = 'http://10.189.2.78:8108/v1/edb/data?UniqueCode=4991c37becba464609b409909fe4d992&StartDate=2024-02-01' uniquecodedataurl = 'http://10.189.2.78:8108/v1/edb/data?UniqueCode=4991c37becba464609b409909fe4d992&StartDate=2024-02-01'
classifyidlisturl = 'http://10.189.2.78:8108/v1/edb/list?ClassifyId=' classifyidlisturl = 'http://10.189.2.78:8108/v1/edb/list?ClassifyId='
edbcodedataurl = 'http://10.189.2.78:8108/v1/edb/data?EdbCode=' edbcodedataurl = 'http://10.189.2.78:8108/v1/edb/data?EdbCode='
edbdatapushurl = 'http://10.189.2.78:8108/v1/edb/push' edbdatapushurl = 'http://10.189.2.78:8108/v1/edb/push'
edbdeleteurl = 'http://10.189.2.78:8108/v1/edb/business/edb/del' edbdeleteurl = 'http://10.189.2.78:8108/v1/edb/business/edb/del'
edbbusinessurl = 'http://10.189.2.78:8108/v1/edb/business/data/del' edbbusinessurl = 'http://10.189.2.78:8108/v1/edb/business/data/del'
edbcodelist = ['ID01385938','lmcads03 lme comdty', edbcodelist = ['ID01385938', 'lmcads03 lme comdty',
'GC1 COMB Comdty', 'GC1 COMB Comdty',
'C2404171822', 'C2404171822',
'dxy curncy', 'dxy curncy',
'S5443199 ', 'S5443199 ',
'S5479800', 'S5479800',
'S5443108', 'S5443108',
'H7358586', 'H7358586',
'LC3FM1 INDEX', 'LC3FM1 INDEX',
'CNY REGN Curncy', 'CNY REGN Curncy',
's0105897', 's0105897',
'M0067419', 'M0067419',
'M0066351', 'M0066351',
'S0266372', 'S0266372',
'S0266438', 'S0266438',
'S0266506', 'S0266506',
'ID01384463'] 'ID01384463']
# 临时写死用指定的列,与上面的edbcode对应后面更改 # 临时写死用指定的列,与上面的edbcode对应后面更改
edbnamelist = [ edbnamelist = [
'ds','y', 'ds', 'y',
'LME铜价', 'LME铜价',
'黄金连1合约', '黄金连1合约',
'Brent-WTI', 'Brent-WTI',
@ -52,66 +52,65 @@ edbnamelist = [
'南华工业品指数', '南华工业品指数',
'PVC期货主力', 'PVC期货主力',
'PE期货收盘价', 'PE期货收盘价',
'PP连续-1月', 'PP连续-1月',
'PP连续-5月', 'PP连续-5月',
'PP连续-9月', 'PP连续-9月',
'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料' 'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料'
] ]
edbcodenamedict = { edbcodenamedict = {
'ID01385938':'PP拉丝1102K市场价青州国家能源宁煤', 'ID01385938': 'PP拉丝1102K市场价青州国家能源宁煤',
'ID01384463':'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料', 'ID01384463': 'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料',
'lmcads03 lme comdty':'LME铜价', 'lmcads03 lme comdty': 'LME铜价',
'GC1 COMB Comdty':'黄金连1合约', 'GC1 COMB Comdty': '黄金连1合约',
'C2404171822':'Brent-WTI', 'C2404171822': 'Brent-WTI',
'dxy curncy':'美元指数', 'dxy curncy': '美元指数',
'S5443199 ':'甲醇鲁南价格', 'S5443199 ': '甲醇鲁南价格',
'S5479800':'甲醇太仓港口价格', 'S5479800': '甲醇太仓港口价格',
'S5443108':'山东丙烯主流价', 'S5443108': '山东丙烯主流价',
'H7358586':'丙烷(山东)', 'H7358586': '丙烷(山东)',
'LC3FM1 INDEX':'FEI丙烷 M1', 'LC3FM1 INDEX': 'FEI丙烷 M1',
'CNY REGN Curncy':'在岸人民币汇率', 'CNY REGN Curncy': '在岸人民币汇率',
's0105897':'南华工业品指数', 's0105897': '南华工业品指数',
'M0067419':'PVC期货主力', 'M0067419': 'PVC期货主力',
'M0066351':'PE期货收盘价', 'M0066351': 'PE期货收盘价',
'S0266372':'PP连续-1月', 'S0266372': 'PP连续-1月',
'S0266438':'PP连续-5月', 'S0266438': 'PP连续-5月',
'S0266506':'PP连续-9月', 'S0266506': 'PP连续-9月',
} }
# eta自有数据指标编码 # eta自有数据指标编码
modelsindex = { modelsindex = {
'NHITS': 'SELF0000077', 'NHITS': 'SELF0000077',
'Informer':'SELF0000078', 'Informer': 'SELF0000078',
'LSTM':'SELF0000079', 'LSTM': 'SELF0000079',
'iTransformer':'SELF0000080', 'iTransformer': 'SELF0000080',
'TSMixer':'SELF0000081', 'TSMixer': 'SELF0000081',
'TSMixerx':'SELF0000082', 'TSMixerx': 'SELF0000082',
'PatchTST':'SELF0000083', 'PatchTST': 'SELF0000083',
'RNN':'SELF0000084', 'RNN': 'SELF0000084',
'GRU':'SELF0000085', 'GRU': 'SELF0000085',
'TCN':'SELF0000086', 'TCN': 'SELF0000086',
'BiTCN':'SELF0000087', 'BiTCN': 'SELF0000087',
'DilatedRNN':'SELF0000088', 'DilatedRNN': 'SELF0000088',
'MLP':'SELF0000089', 'MLP': 'SELF0000089',
'DLinear':'SELF0000090', 'DLinear': 'SELF0000090',
'NLinear':'SELF0000091', 'NLinear': 'SELF0000091',
'TFT':'SELF0000092', 'TFT': 'SELF0000092',
'FEDformer':'SELF0000093', 'FEDformer': 'SELF0000093',
'StemGNN':'SELF0000094', 'StemGNN': 'SELF0000094',
'MLPMultivariate':'SELF0000095', 'MLPMultivariate': 'SELF0000095',
'TiDE':'SELF0000096', 'TiDE': 'SELF0000096',
'DeepNPTS':'SELF0000097' 'DeepNPTS': 'SELF0000097'
} }
# eta 上传预测结果的请求体,后面发起请求的时候更改 model datalist 数据 # eta 上传预测结果的请求体,后面发起请求的时候更改 model datalist 数据
data = { data = {
"IndexCode": "", "IndexCode": "",
"IndexName": "价格预测模型", "IndexName": "价格预测模型",
"Unit": "", "Unit": "",
"Frequency": "日度", "Frequency": "日度",
"SourceName": f"价格预测", "SourceName": f"价格预测",
"Remark": 'ddd', "Remark": 'ddd',
@ -121,19 +120,18 @@ data = {
"Value": 333444 "Value": 333444
} }
] ]
} }
# eta 分类 # eta 分类
# level3才可以获取到数据所以需要人工把能源化工下所有的level3级都找到 # level3才可以获取到数据所以需要人工把能源化工下所有的level3级都找到
# url = 'http://10.189.2.78:8108/v1/edb/list?ClassifyId=1214' # url = 'http://10.189.2.78:8108/v1/edb/list?ClassifyId=1214'
#ParentId ":1160, 能源化工 # ParentId ":1160, 能源化工
# ClassifyId ":1214,原油 # ClassifyId ":1214,原油
#ParentId ":1214,",就是原油下所有的数据。 # ParentId ":1214,",就是原油下所有的数据。
ClassifyId = 1161 ClassifyId = 1161
# 变量定义--测试环境
############################################################################################################### 变量定义--测试环境
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"
@ -145,7 +143,7 @@ login_data = {
"data": { "data": {
"account": "api_test", "account": "api_test",
# "password": "MmVmNzNlOWI0MmY0ZDdjZGUwNzE3ZjFiMDJiZDZjZWU=", # Shihua@123456 # "password": "MmVmNzNlOWI0MmY0ZDdjZGUwNzE3ZjFiMDJiZDZjZWU=", # Shihua@123456
"password": "ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=", # 123456 "password": "ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=", # 123456
"tenantHashCode": "8a4577dbd919675758d57999a1e891fe", "tenantHashCode": "8a4577dbd919675758d57999a1e891fe",
"terminal": "API" "terminal": "API"
}, },
@ -154,39 +152,39 @@ login_data = {
} }
upload_data = { upload_data = {
"funcModule":'研究报告信息', "funcModule": '研究报告信息',
"funcOperation":'上传聚烯烃PP价格预测报告', "funcOperation": '上传聚烯烃PP价格预测报告',
"data":{ "data": {
"ownerAccount":'arui', #报告所属用户账号 "ownerAccount": 'arui', # 报告所属用户账号
"reportType":'OIL_PRICE_FORECAST', # 报告类型固定为OIL_PRICE_FORECAST "reportType": 'OIL_PRICE_FORECAST', # 报告类型固定为OIL_PRICE_FORECAST
"fileName": '2000-40-5-50--100-原油指标数据.xlsx-Brent活跃合约--2024-09-06-15-01-29-预测报告.pdf', #文件名称 "fileName": '2000-40-5-50--100-原油指标数据.xlsx-Brent活跃合约--2024-09-06-15-01-29-预测报告.pdf', # 文件名称
"fileBase64": '' ,#文件内容base64 "fileBase64": '', # 文件内容base64
"categoryNo":'yyjgycbg', # 研究报告分类编码 "categoryNo": 'yyjgycbg', # 研究报告分类编码
"smartBusinessClassCode":'JXTJGYCBG', #分析报告分类编码 "smartBusinessClassCode": 'JXTJGYCBG', # 分析报告分类编码
"reportEmployeeCode":"E40116", # 报告人 "reportEmployeeCode": "E40116", # 报告人
"reportDeptCode" :"D0044" ,# 报告部门 "reportDeptCode": "D0044", # 报告部门
"productGroupCode":"RAW_MATERIAL" # 商品分类 "productGroupCode": "RAW_MATERIAL" # 商品分类
} }
} }
warning_data = { warning_data = {
"funcModule":'原油特征停更预警', "funcModule": '原油特征停更预警',
"funcOperation":'原油特征停更预警', "funcOperation": '原油特征停更预警',
"data":{ "data": {
'WARNING_TYPE_NAME':'特征数据停更预警', 'WARNING_TYPE_NAME': '特征数据停更预警',
'WARNING_CONTENT':'', 'WARNING_CONTENT': '',
'WARNING_DATE':'' 'WARNING_DATE': ''
} }
} }
query_data_list_item_nos_data = { query_data_list_item_nos_data = {
"funcModule": "数据项", "funcModule": "数据项",
"funcOperation": "查询", "funcOperation": "查询",
"data": { "data": {
"dateStart":"20200101", "dateStart": "20200101",
"dateEnd":"20241231", "dateEnd": "20241231",
"dataItemNoList":["Brentzdj","Brentzgj"] # 数据项编码,代表 brent最低价和最高价 "dataItemNoList": ["Brentzdj", "Brentzgj"] # 数据项编码,代表 brent最低价和最高价
} }
} }
@ -194,104 +192,104 @@ query_data_list_item_nos_data = {
# 北京环境数据库 # 北京环境数据库
host = '192.168.101.27' host = '192.168.101.27'
port = 3306 port = 3306
dbusername ='root' dbusername = 'root'
password = '123456' password = '123456'
dbname = 'jingbo_test' dbname = 'jingbo_test'
table_name = 'v_tbl_crude_oil_warning' table_name = 'v_tbl_crude_oil_warning'
### 开关 # 开关
is_train = False # 是否训练 is_train = True # 是否训练
is_debug = True # 是否调试 is_debug = False # 是否调试
is_eta = True # 是否使用eta接口 is_eta = True # 是否使用eta接口
is_market = False # 是否通过市场信息平台获取特征 ,在is_eta 为true 的情况下生效 is_market = False # 是否通过市场信息平台获取特征 ,在is_eta 为true 的情况下生效
is_timefurture = True # 是否使用时间特征 is_timefurture = True # 是否使用时间特征
is_fivemodels = False # 是否使用之前保存的最佳的5个模型 is_fivemodels = False # 是否使用之前保存的最佳的5个模型
is_edbcode = False # 特征使用edbcoding列表中的 is_edbcode = False # 特征使用edbcoding列表中的
is_edbnamelist = False # 自定义特征对应上面的edbnamelist 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_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 # 是否删除两个月不更新的特征
# 连接到数据库 # 连接到数据库
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)
# 数据截取日期 # 数据截取日期
start_year = 2015 # 数据开始年份 start_year = 2015 # 数据开始年份
end_time = '' # 数据截取日期 end_time = '' # 数据截取日期
freq = 'WW' # 时间频率,"D": 天 "W": 周"M": 月"Q": 季度"A": 年 "H": 小时 "T": 分钟 "S": 秒 "B": 工作日 freq = 'WW' # 时间频率,"D": 天 "W": 周"M": 月"Q": 季度"A": 年 "H": 小时 "T": 分钟 "S": 秒 "B": 工作日
delweekenday = True if freq == 'B' else False # 是否删除周末数据 delweekenday = True if freq == 'B' else False # 是否删除周末数据
is_corr = False # 特征是否参与滞后领先提升相关系数 is_corr = False # 特征是否参与滞后领先提升相关系数
add_kdj = False # 是否添加kdj指标 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 = 'AVG-金能大唐久泰青州' y = 'AVG-金能大唐久泰青州'
avg_cols = [ avg_cols = [
'PP拉丝1102K出厂价青州国家能源宁煤', 'PP拉丝1102K出厂价青州国家能源宁煤',
'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料', 'PP拉丝L5E89出厂价华北第二区域内蒙古久泰新材料',
'PP拉丝L5E89出厂价河北、鲁北大唐内蒙多伦', 'PP拉丝L5E89出厂价河北、鲁北大唐内蒙多伦',
'PP拉丝HP550J市场价青岛金能化学' 'PP拉丝HP550J市场价青岛金能化学'
] ]
offsite = 80 offsite = 80
offsite_col = ['PP拉丝HP550J市场价青岛金能化学'] offsite_col = ['PP拉丝HP550J市场价青岛金能化学']
horizon =2 # 预测的步长 horizon = 2 # 预测的步长
input_size = 14 # 输入序列长度 input_size = 14 # 输入序列长度
train_steps = 50 if is_debug else 1000 # 训练步数,用来限定epoch次数 train_steps = 50 if is_debug else 1000 # 训练步数,用来限定epoch次数
val_check_steps = 30 # 评估频率 val_check_steps = 30 # 评估频率
early_stop_patience_steps = 5 # 早停的耐心步数 early_stop_patience_steps = 5 # 早停的耐心步数
# --- 交叉验证用的参数 # --- 交叉验证用的参数
test_size = 200 # 测试集大小定义100后面使用的时候重新赋值 test_size = 200 # 测试集大小定义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 = 'PP指标数据.xlsx' # 数据集文件 data_set = 'PP指标数据.xlsx' # 数据集文件
dataset = 'juxitingzhoududataset' # 数据集文件夹 dataset = 'juxitingzhoududataset' # 数据集文件夹
# 数据库名称 # 数据库名称
db_name = os.path.join(dataset,'jbsh_juxiting_zhoudu.db') db_name = os.path.join(dataset, 'jbsh_juxiting_zhoudu.db')
sqlitedb = SQLiteHandler(db_name) sqlitedb = SQLiteHandler(db_name)
sqlitedb.connect() sqlitedb.connect()
settings = f'{input_size}-{horizon}-{train_steps}--{k}-{data_set}-{y}' settings = f'{input_size}-{horizon}-{train_steps}--{k}-{data_set}-{y}'
# 获取日期时间 # 获取日期时间
# now = datetime.datetime.now().strftime('%Y%m%d%H%M%S') # 获取当前日期时间 # now = datetime.datetime.now().strftime('%Y%m%d%H%M%S') # 获取当前日期时间
now = datetime.datetime.now().strftime('%Y-%m-%d') # 获取当前日期时间 now = datetime.datetime.now().strftime('%Y-%m-%d') # 获取当前日期时间
reportname = f'PP大模型预测报告--{end_time}.pdf' # 报告文件名 reportname = f'PP大模型预测报告--{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']
recv=['liurui_test@163.com'] recv = ['liurui_test@163.com']
# recv=['liurui_test@163.com'] # recv=['liurui_test@163.com']
title='reportname' title = 'reportname'
content=y+'预测报告请看附件' content = y+'预测报告请看附件'
file=os.path.join(dataset,'reportname') file = os.path.join(dataset, 'reportname')
# file=os.path.join(dataset,'14-7-50--100-原油指标数据.xlsx-Brent连1合约价格--20240731175936-预测报告.pdf') # file=os.path.join(dataset,'14-7-50--100-原油指标数据.xlsx-Brent连1合约价格--20240731175936-预测报告.pdf')
ssl=True ssl = True
### 日志配置 # 日志配置
# 创建日志目录(如果不存在) # 创建日志目录(如果不存在)
log_dir = 'logs' log_dir = 'logs'
@ -303,8 +301,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()
@ -315,4 +315,3 @@ logger.addHandler(file_handler)
logger.addHandler(console_handler) logger.addHandler(console_handler)
# logger.info('当前配置:'+settings) # logger.info('当前配置:'+settings)

View File

@ -9,8 +9,8 @@ import time
def run_predictions(target_date): def run_predictions(target_date):
"""执行三个预测脚本""" """执行三个预测脚本"""
scripts = [ scripts = [
# "main_yuanyou.py", "main_yuanyou.py",
# "main_yuanyou_zhoudu.py", "main_yuanyou_zhoudu.py",
"main_yuanyou_yuedu.py" "main_yuanyou_yuedu.py"
] ]