107 lines
4.4 KiB
Python
107 lines
4.4 KiB
Python
import logging
|
||
import os
|
||
import logging.handlers
|
||
|
||
|
||
# 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='
|
||
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', 'ovx index', 'lmcads03 lme comdty', 'GC1 COMB Comdty',
|
||
'C2404171822']
|
||
|
||
# 临时写死用指定的列,与上面的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',
|
||
# 'ovx index',
|
||
'GC1 COMB Comdty'
|
||
]
|
||
|
||
# eta 分类
|
||
# level:3才可以获取到数据,所以需要人工把能源化工下所有的level3级都找到
|
||
# url = 'http://10.189.2.78:8108/v1/edb/list?ClassifyId=1214'
|
||
#ParentId ":1160, 能源化工
|
||
# ClassifyId ":1214,原油
|
||
#ParentId ":1214,",就是原油下所有的数据。
|
||
ClassifyId = 1214
|
||
|
||
### 开关
|
||
is_train = True # 是否训练
|
||
is_debug = True # 是否调试
|
||
is_eta = False # 是否使用eta接口
|
||
is_timefurture = False # 是否使用时间特征
|
||
is_fivemodels = False # 是否使用之前保存的最佳的5个模型
|
||
is_edbcode = False # 特征使用edbcoding列表中的
|
||
is_edbnamelist = False # 启用指定的edbname,影响特征选择,只有数据集 原油时 才考虑启用
|
||
|
||
# 数据截取日期
|
||
end_time = '2024-07-30' # 数据截取日期
|
||
delweekenday = True # 是否删除周末数据
|
||
|
||
### 模型参数
|
||
y = '电碳价格' # 原油指标数据的目标变量
|
||
horizon =5 # 预测的步长
|
||
input_size = 10 # 输入序列长度
|
||
train_steps = 10 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或者值比特征数量大,代表全部特征
|
||
|
||
### --- 文件
|
||
data_set = '碳酸锂合并数据.csv' # 数据集文件
|
||
### --- 文件夹
|
||
dataset = 'dataset' # 数据集文件夹
|
||
settings = f'{input_size}-{horizon}-{train_steps}--{k}-{data_set}-{y}'
|
||
import datetime
|
||
now = datetime.datetime.now().strftime('%Y%m%d%H%M%S') # 获取当前日期时间
|
||
reportname = f'{settings}--{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)
|