From db6e6ae28e8eb6f5eea497b5ae07e2c7d98ef423 Mon Sep 17 00:00:00 2001 From: workpc Date: Thu, 12 Dec 2024 17:19:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BA=BF=E4=B8=8A=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config_jingbo.py | 4 +- config_jingbo_pro.py | 323 +++++++++++++++++++++++++++++++++++++++++++ lib/dataread.py | 3 +- 3 files changed, 327 insertions(+), 3 deletions(-) create mode 100644 config_jingbo_pro.py diff --git a/config_jingbo.py b/config_jingbo.py index 25efd63..0c7f70b 100644 --- a/config_jingbo.py +++ b/config_jingbo.py @@ -134,7 +134,7 @@ ClassifyId = 1214 # } # } -# 生产环境数据库 +# # 生产环境数据库 # host = 'rm-2zehj3r1n60ttz9x5.mysql.rds.aliyuncs.com' # port = 3306 # dbusername ='jingbo' @@ -154,7 +154,7 @@ ClassifyId = 1214 -### 线上开关 +# ## 线上开关 # is_train = True # 是否训练 # is_debug = False # 是否调试 # is_eta = True # 是否使用eta接口 diff --git a/config_jingbo_pro.py b/config_jingbo_pro.py new file mode 100644 index 0000000..4d09fda --- /dev/null +++ b/config_jingbo_pro.py @@ -0,0 +1,323 @@ +import logging +import os +import logging.handlers +import datetime +from lib.tools import MySQLDB,SQLiteHandler + + +# eta 接口token +APPID = "XNLDvxZHHugj7wJ7" +SECRET = "iSeU4s6cKKBVbt94htVY1p0sqUMqb2xa" + +# eta 接口url +sourcelisturl = 'http://10.189.2.78:8108/v1/edb/source/list' +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' +classifyidlisturl = 'http://10.189.2.78:8108/v1/edb/list?ClassifyId=' +edbcodedataurl = 'http://10.189.2.78:8108/v1/edb/data?EdbCode=' +edbdatapushurl = 'http://10.189.2.78:8108/v1/edb/push' +edbdeleteurl = 'http://10.189.2.78:8108/v1/edb/business/edb/del' +edbbusinessurl = 'http://10.189.2.78:8108/v1/edb/business/data/del' +edbcodelist = ['CO1 Comdty', 'ovx index', 'C2404194834', 'C2404199738', 'dxy curncy', 'C2403128043', 'C2403150124', + 'DOESCRUD Index', 'WTRBM1 EEGC Index', 'FVHCM1 INDEX', 'doedtprd index', 'CFFDQMMN INDEX', + 'C2403083739', 'C2404167878', 'C2403250571', 'lmcads03 lme comdty', 'GC1 COMB Comdty', + 'C2404171822','C2404167855', + # 'W000825','W000826','G.IPE', # 美国汽柴油 + # 'S5131019','ID00135604','FSGAM1 Index','S5120408','ID00136724', # 新加坡汽柴油 + ] + +# 临时写死用指定的列,与上面的edbcode对应,后面更改 +edbnamelist = [ + 'ds','y', + 'Brent c1-c6','Brent c1-c3','Brent-WTI','美国商业原油库存', + 'DFL','美国汽油裂解价差','ovx index','dxy curncy','lmcads03 lme comdty', + 'C2403128043','C2403150124','FVHCM1 INDEX','doedtprd index','CFFDQMMN INDEX', + 'C2403083739','C2404167878', + 'GC1 COMB Comdty','C2404167855', + # 'A汽油价格','W000826','ICE柴油价格', + # '新加坡(含硫0.05%) 柴油现货价','柴油:10ppm:国际市场:FOB中间价:新加坡(日)','Bloomberg Commodity Fair Value Singapore Mogas 92 Swap Month 1','97#汽油FOB新加坡现货价','无铅汽油:97#:国际市场:FOB中间价:新加坡(日)' + ] + + + +# eta自有数据指标编码 +modelsindex = { + 'NHITS': 'SELF0000001', + 'Informer':'SELF0000057', + 'LSTM':'SELF0000058', + 'iTransformer':'SELF0000059', + 'TSMixer':'SELF0000060', + 'TSMixerx':'SELF0000061', + 'PatchTST':'SELF0000062', + 'RNN':'SELF0000063', + 'GRU':'SELF0000064', + 'TCN':'SELF0000065', + 'BiTCN':'SELF0000066', + 'DilatedRNN':'SELF0000067', + 'MLP':'SELF0000068', + 'DLinear':'SELF0000069', + 'NLinear':'SELF0000070', + 'TFT':'SELF0000071', + 'FEDformer':'SELF0000072', + 'StemGNN':'SELF0000073', + 'MLPMultivariate':'SELF0000074', + 'TiDE':'SELF0000075', + 'DeepNPTS':'SELF0000076' + } + +# eta 上传预测结果的请求体,后面发起请求的时候更改 model datalist 数据 +data = { + "IndexCode": "", + "IndexName": "价格预测模型", + "Unit": "无", + "Frequency": "日度", + "SourceName": f"价格预测", + "Remark": 'ddd', + "DataList": [ + { + "Date": "2024-05-02", + "Value": 333444 + } + ] + } + +# eta 分类 +# level:3才可以获取到数据,所以需要人工把能源化工下所有的level3级都找到 + # url = 'http://10.189.2.78:8108/v1/edb/list?ClassifyId=1214' + #ParentId ":1160, 能源化工 + # ClassifyId ":1214,原油 + #ParentId ":1214,",就是原油下所有的数据。 +ClassifyId = 1214 + + +################################################################################################################ 变量定义--线上环境 +login_pushreport_url = "http://10.200.32.39/jingbo-api/api/server/login" +upload_url = "http://10.200.32.39/jingbo-api/api/analysis/reportInfo/researchUploadReportSave" +upload_warning_url = "http://10.200.32.39/jingbo-api/api/basicBuiness/crudeOilWarning/save" + +login_data = { + "data": { + "account": "api_dev", + "password": "ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=", + "tenantHashCode": "8a4577dbd919675758d57999a1e891fe", + "terminal": "API" + }, + "funcModule": "API", + "funcOperation": "获取token" +} + + + +upload_data = { + "funcModule":'研究报告信息', + "funcOperation":'上传原油价格预测报告', + "data":{ + "ownerAccount":'27663', #报告所属用户账号 27663 - 刘小朋 + "reportType":'OIL_PRICE_FORECAST', # 报告类型,固定为OIL_PRICE_FORECAST + "fileName": '', #文件名称 + "fileBase64": '' ,#文件内容base64 + "categoryNo":'yyjgycbg', # 研究报告分类编码 + "smartBusinessClassCode":'YCJGYCBG', #分析报告分类编码 + "reportEmployeeCode":"E40482" ,# 报告人 E40482 - 管理员 0000027663 - 刘小朋 + "reportDeptCode" :"002000621000", # 报告部门 - 002000621000 SH期货研究部 + "productGroupCode":"RAW_MATERIAL" # 商品分类 + } +} + +warning_data = { + "funcModule":'原油特征停更预警', + "funcOperation":'原油特征停更预警', + "data":{ + 'WARNING_TYPE_NAME':'特征数据停更预警', + 'WARNING_CONTENT':'', + 'WARNING_DATE':'' + } +} + +# 生产环境数据库 +host = 'rm-2zehj3r1n60ttz9x5.mysql.rds.aliyuncs.com' +port = 3306 +dbusername ='jingbo' +password = 'shihua@123' +dbname = 'jingbo' +table_name = 'v_tbl_crude_oil_warning' + + + +# 预生产环境 +# host = 'rm-2zehj3r1n60ttz9x5ko.mysql.rds.aliyuncs.com' +# port = 3306 +# dbusername ='jingbo' +# password = 'shihua@123' +# dbname = 'jingbo-test' +# table_name = 'v_tbl_crude_oil_warning' + + + +## 线上开关 +is_train = True # 是否训练 +is_debug = False # 是否调试 +is_eta = True # 是否使用eta接口 +is_timefurture = True # 是否使用时间特征 +is_fivemodels = False # 是否使用之前保存的最佳的5个模型 +is_edbcode = False # 特征使用edbcoding列表中的 +is_edbnamelist = False # 自定义特征,对应上面的edbnamelist +is_update_eta = True # 预测结果上传到eta +is_update_report = True # 是否上传报告 +is_update_warning_data = True if datetime.datetime.now().weekday() == 1 else False # 是否上传预警数据 +is_del_corr = 0.6 # 是否删除相关性高的特征,取值为 0-1 ,0 为不删除,0.6 表示删除相关性小于0.6的特征 + + +################################################################################################################ 变量定义--测试环境 +# login_pushreport_url = "http://192.168.100.53:8080/jingbo-dev/api/server/login" +# upload_url = "http://192.168.100.53:8080/jingbo-dev/api/analysis/reportInfo/researchUploadReportSave" +# # upload_url = "http://192.168.100.109:8080/jingbo/api/analysis/reportInfo/researchUploadReportSave" # zhaoqiwei +# upload_warning_url = "http://192.168.100.53:8080/jingbo-dev/api/basicBuiness/crudeOilWarning/save" + + +# login_data = { +# "data": { +# "account": "api_test", +# # "password": "MmVmNzNlOWI0MmY0ZDdjZGUwNzE3ZjFiMDJiZDZjZWU=", # Shihua@123456 +# "password": "ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=", # 123456 +# "tenantHashCode": "8a4577dbd919675758d57999a1e891fe", +# "terminal": "API" +# }, +# "funcModule": "API", +# "funcOperation": "获取token" +# } + +# upload_data = { +# "funcModule":'研究报告信息', +# "funcOperation":'上传原油价格预测报告', +# "data":{ +# "ownerAccount":'arui', #报告所属用户账号 +# "reportType":'OIL_PRICE_FORECAST', # 报告类型,固定为OIL_PRICE_FORECAST +# "fileName": '2000-40-5-50--100-原油指标数据.xlsx-Brent活跃合约--2024-09-06-15-01-29-预测报告.pdf', #文件名称 +# "fileBase64": '' ,#文件内容base64 +# "categoryNo":'yyjgycbg', # 研究报告分类编码 +# "smartBusinessClassCode":'YCJGYCBG', #分析报告分类编码 +# "reportEmployeeCode":"E40116", # 报告人 +# "reportDeptCode" :"D0044" ,# 报告部门 +# "productGroupCode":"RAW_MATERIAL" # 商品分类 +# } +# } + +# warning_data = { +# "funcModule":'原油特征停更预警', +# "funcOperation":'原油特征停更预警', +# "data":{ +# 'WARNING_TYPE_NAME':'特征数据停更预警', +# 'WARNING_CONTENT':'', +# 'WARNING_DATE':'' +# } +# } + +# # 北京环境数据库 +# host = '192.168.101.27' +# port = 3306 +# dbusername ='root' +# password = '123456' +# dbname = 'jingbo_test' +# table_name = 'v_tbl_crude_oil_warning' + + +# ### 开关 +# is_train = True # 是否训练 +# is_debug = False # 是否调试 +# is_eta = False # 是否使用eta接口 +# is_timefurture = True # 是否使用时间特征 +# is_fivemodels = False # 是否使用之前保存的最佳的5个模型 +# is_edbcode = False # 特征使用edbcoding列表中的 +# is_edbnamelist = False # 自定义特征,对应上面的edbnamelist +# is_update_eta = False # 预测结果上传到eta +# is_update_report = False # 是否上传报告 +# is_update_warning_data = False # 是否上传预警数据 +# is_del_corr = 0.6 # 是否删除相关性高的特征,取值为 0-1 ,0 为不删除,0.6 表示删除相关性小于0.6的特征 + +# 连接到数据库 +db_mysql = MySQLDB(host=host, user=dbusername, password=password, database=dbname) +db_mysql.connect() +print("数据库连接成功",host,dbname,dbusername) + + +# 数据截取日期 +start_year = 2018 # 数据开始年份 +end_time = '' # 数据截取日期 +freq = 'B' # 时间频率,"D": 天 "W": 周"M": 月"Q": 季度"A": 年 "H": 小时 "T": 分钟 "S": 秒 "B": 工作日 +delweekenday = True if freq == 'B' else False # 是否删除周末数据 +is_corr = False # 特征是否参与滞后领先提升相关系数 +add_kdj = False # 是否添加kdj指标 +if add_kdj and is_edbnamelist: + edbnamelist = edbnamelist+['K','D','J'] +### 模型参数 +y = 'Brent连1合约价格' # 原油指标数据的目标变量 Brent连1合约价格 Brent活跃合约 +# y = '期货结算价(连续):布伦特原油:前一个观测值' # ineoil的目标变量 +horizon =5 # 预测的步长 +input_size = 40 # 输入序列长度 +train_steps = 50 if is_debug else 1000 # 训练步数,用来限定epoch次数 +val_check_steps = 30 # 评估频率 +early_stop_patience_steps = 5 # 早停的耐心步数 +# --- 交叉验证用的参数 +test_size = 100 # 测试集大小,定义100,后面使用的时候重新赋值 +val_size = test_size # 验证集大小,同测试集大小 + +### 特征筛选用到的参数 +k = 100 # 特征筛选数量,如果是0或者值比特征数量大,代表全部特征 +corr_threshold = 0.6 # 相关性大于0.6的特征 +rote = 0.06 # 绘图上下界阈值 + +### 文件 +data_set = '原油指标数据.xlsx' # 数据集文件 +# data_set = 'INE_OIL(1).csv' +### 文件夹 +dataset = 'yuanyoudataset' # 数据集文件夹 + +# 数据库名称 +db_name = os.path.join(dataset,'jbsh_yuanyou.db') +sqlitedb = SQLiteHandler(db_name) +sqlitedb.connect() + +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') # 获取当前日期时间 +reportname = f'Brent原油大模型预测--{now}.pdf' # 报告文件名 +reportname = reportname.replace(':', '-') # 替换冒号 + +### 邮件配置 +username='1321340118@qq.com' +passwd='wgczgyhtyyyyjghi' +# recv=['liurui_test@163.com','52585119@qq.com'] +recv=['liurui_test@163.com'] +title='reportname' +content='brent价格预测报告请看附件' +file=os.path.join(dataset,'reportname') +# file=os.path.join(dataset,'14-7-50--100-原油指标数据.xlsx-Brent连1合约价格--20240731175936-预测报告.pdf') +ssl=True + + +### 日志配置 + +# 创建日志目录(如果不存在) +log_dir = 'logs' +if not os.path.exists(log_dir): + os.makedirs(log_dir) + +# 配置日志记录器 +logger = logging.getLogger('my_logger') +logger.setLevel(logging.INFO) + +# 配置文件处理器,将日志记录到文件 +file_handler = logging.handlers.RotatingFileHandler(os.path.join(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.setFormatter(logging.Formatter('%(message)s')) + +# 将处理器添加到日志记录器 +logger.addHandler(file_handler) +logger.addHandler(console_handler) + +# logger.info('当前配置:'+settings) \ No newline at end of file diff --git a/lib/dataread.py b/lib/dataread.py index 34ccce9..594fda8 100644 --- a/lib/dataread.py +++ b/lib/dataread.py @@ -40,7 +40,8 @@ pdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf')) plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 -from config_jingbo import * +from config_jingbo_pro import * +# from config_jingbo import * # from config_juxiting import *