聚烯烃图片报告标题更改

This commit is contained in:
workpc 2025-08-18 15:43:21 +08:00
parent 63de7af71d
commit ae2dba7981
11 changed files with 262 additions and 242 deletions

View File

@ -380,7 +380,7 @@ DEFAULT_CONFIG = {
# 开关 # 开关
is_train = True # 是否训练 is_train = True # 是否训练
is_debug = False # 是否调试 is_debug = False # 是否调试
is_eta = False # 是否使用eta接口 is_eta = True # 是否使用eta接口
is_market = True # 是否通过市场信息平台获取特征 ,在is_eta 为true 的情况下生效 is_market = True # 是否通过市场信息平台获取特征 ,在is_eta 为true 的情况下生效
is_timefurture = True # 是否使用时间特征 is_timefurture = True # 是否使用时间特征
is_fivemodels = False # 是否使用之前保存的最佳的5个模型 is_fivemodels = False # 是否使用之前保存的最佳的5个模型

View File

@ -143,165 +143,23 @@ ClassifyId = 1161
# 变量定义--线上环境 # 变量定义--线上环境
# server_host = '10.200.32.39' server_host = '10.200.32.39'
# login_pushreport_url = "http://10.200.32.39/jingbo-api/api/server/login" 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_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" upload_warning_url = "http://10.200.32.39/jingbo-api/api/basicBuiness/crudeOilWarning/save"
# query_data_list_item_nos_url = f"http://{server_host}/jingbo-api/api/warehouse/dwDataItem/queryDataListItemNos" query_data_list_item_nos_url = f"http://{server_host}/jingbo-api/api/warehouse/dwDataItem/queryDataListItemNos"
# # 上传数据项值
# push_data_value_list_url = f"http://{server_host}/jingbo-api/api/dw/dataValue/pushDataValueList"
# # 上传停更数据到市场信息平台
# push_waring_data_value_list_url = f"http://{server_host}/jingbo-api/api/basicBuiness/crudeOilWarning/crudeSaveOrupdate"
# # 获取预警数据中取消订阅指标ID
# get_waring_data_value_list_url = f"http://{server_host}/jingbo-api/api/basicBuiness/crudeOilWarning/dataList"
# login_data = {
# "data": {
# "account": "api_dev",
# "password": "ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=",
# "tenantHashCode": "8a4577dbd919675758d57999a1e891fe",
# "terminal": "API"
# },
# "funcModule": "API",
# "funcOperation": "获取token"
# }
# upload_data = {
# "funcModule": '研究报告信息',
# "funcOperation": '上传聚烯烃PP价格预测报告',
# "data": {
# "groupNo": '000211', # 用户组编号
# "ownerAccount": '36541', # 报告所属用户账号  36541 - 贾青雪
# "reportType": 'OIL_PRICE_FORECAST', # 报告类型固定为OIL_PRICE_FORECAST
# "fileName": '', # 文件名称
# "fileBase64": '', # 文件内容base64
# "categoryNo": 'jxtjgycbg', # 研究报告分类编码
# "smartBusinessClassCode": 'JXTJGYCBG', # 分析报告分类编码
# "reportEmployeeCode": "E40482", # 报告人  E40482  - 管理员  0000027663 - 刘小朋  
# "reportDeptCode": "JXTJGYCBG", # 报告部门 - 002000621000  SH期货研究部  
# "productGroupCode": "RAW_MATERIAL" # 商品分类
# }
# }
# warning_data = {
# "funcModule": '原油特征停更预警',
# "funcOperation": '原油特征停更预警',
# "data": {
# "groupNo": "000211",
# 'WARNING_TYPE_NAME': '特征数据停更预警',
# 'WARNING_CONTENT': '',
# 'WARNING_DATE': ''
# }
# }
# query_data_list_item_nos_data = {
# "funcModule": "数据项",
# "funcOperation": "查询",
# "data": {
# "dateStart": "20200101",
# "dateEnd": "",
# # 数据项编码,代表 PP期货 价格
# "dataItemNoList": ["MAIN_CONFT_SETTLE_PRICE"]
# }
# }
# 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
# }
# ]
# }
# push_waring_data_value_list_data = {
# "data": {
# "crudeOilWarningDtoList": [
# {
# "lastUpdateDate": "20240501",
# "updateSuspensionCycle": 1,
# "dataSource": "9",
# "frequency": "1",
# "indicatorName": "美元指数",
# "indicatorId": "myzs001",
# "warningDate": "2024-05-13"
# }
# ],
# "dataSource": "9"
# },
# "funcModule": "商品数据同步",
# "funcOperation": "同步"
# }
# get_waring_data_value_list_data = {
# "data": "9", "funcModule": "商品数据同步", "funcOperation": "同步"}
# # 八大维度数据项编码
# bdwd_items = {
# 'ciri': '251889263|FORECAST|PRICE|T01',
# 'cierri': '251889263|FORECAST|PRICE|T02',
# 'cisanri': '251889263|FORECAST|PRICE|T03',
# 'cisiri': '251889263|FORECAST|PRICE|T04',
# 'benzhou': '251889263|FORECAST|PRICE|T05',
# 'cizhou': '251889263|FORECAST|PRICE|W_01',
# 'gezhou': '251889263|FORECAST|PRICE|W_02',
# 'ciyue': '251889263|FORECAST|PRICE|M_01',
# 'cieryue': '251889263|FORECAST|PRICE|M_02',
# 'cisanyue': '251889263|FORECAST|PRICE|M_03',
# 'cisiyue': '251889263|FORECAST|PRICE|M_04',
# }
# # 生产环境数据库
# host = 'rm-2zehj3r1n60ttz9x5.mysql.rds.aliyuncs.com'
# port = 3306
# dbusername = 'jingbo'
# password = 'shihua@123'
# dbname = 'jingbo'
# table_name = 'v_tbl_crude_oil_warning'
# 变量定义--测试环境
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_value_list_url = f"http://{server_host}:8080/jingbo-dev/api/dw/dataValue/pushDataValueList" push_data_value_list_url = f"http://{server_host}/jingbo-api/api/dw/dataValue/pushDataValueList"
# 上传停更数据到市场信息平台 # 上传停更数据到市场信息平台
push_waring_data_value_list_url = f"http://{server_host}:8080/jingbo-dev/api/basicBuiness/crudeOilWarning/crudeSaveOrupdate" push_waring_data_value_list_url = f"http://{server_host}/jingbo-api/api/basicBuiness/crudeOilWarning/crudeSaveOrupdate"
# 获取预警数据中取消订阅指标ID # 获取预警数据中取消订阅指标ID
get_waring_data_value_list_url = f"http://{server_host}:8080/jingbo-dev/api/basicBuiness/crudeOilWarning/dataList" get_waring_data_value_list_url = f"http://{server_host}/jingbo-api/api/basicBuiness/crudeOilWarning/dataList"
login_data = { login_data = {
"data": { "data": {
"account": "api_test", "account": "api_dev",
# "password": "MmVmNzNlOWI0MmY0ZDdjZGUwNzE3ZjFiMDJiZDZjZWU=", # Shihua@123456 "password": "ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=",
"password": "ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=", # 123456
"tenantHashCode": "8a4577dbd919675758d57999a1e891fe", "tenantHashCode": "8a4577dbd919675758d57999a1e891fe",
"terminal": "API" "terminal": "API"
}, },
@ -309,29 +167,29 @@ login_data = {
"funcOperation": "获取token" "funcOperation": "获取token"
} }
upload_data = { upload_data = {
"funcModule": '研究报告信息', "funcModule": '研究报告信息',
"funcOperation": '上传聚烯烃PP价格预测报告', "funcOperation": '上传聚烯烃PP价格预测报告',
"data": { "data": {
"groupNo": "000127", "groupNo": '000211', # 用户组编号
"ownerAccount": 'arui', # 报告所属用户账号 "ownerAccount": '36541', # 报告所属用户账号  36541 - 贾青雪
"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": '', # 文件名称
"fileBase64": '', # 文件内容base64 "fileBase64": '', # 文件内容base64
"categoryNo": 'yyjgycbg', # 研究报告分类编码 "categoryNo": 'jxtjgycbg', # 研究报告分类编码
"smartBusinessClassCode": 'JXTJGYCBG', # 分析报告分类编码 "smartBusinessClassCode": 'JXTJGYCBG', # 分析报告分类编码
"reportEmployeeCode": "E40116", # 报告人 "reportEmployeeCode": "E40482", # 报告人  E40482  - 管理员  0000027663 - 刘小朋  
"reportDeptCode": "D0044", # 报告部门 "reportDeptCode": "JXTJGYCBG", # 报告部门 - 002000621000  SH期货研究部  
"productGroupCode": "RAW_MATERIAL" # 商品分类 "productGroupCode": "RAW_MATERIAL" # 商品分类
} }
} }
# 已弃用
warning_data = { warning_data = {
"funcModule": '原油特征停更预警', "funcModule": '原油特征停更预警',
"funcOperation": '原油特征停更预警', "funcOperation": '原油特征停更预警',
"data": { "data": {
"groupNo": "000127", "groupNo": "000211",
'WARNING_TYPE_NAME': '特征数据停更预警', 'WARNING_TYPE_NAME': '特征数据停更预警',
'WARNING_CONTENT': '', 'WARNING_CONTENT': '',
'WARNING_DATE': '' 'WARNING_DATE': ''
@ -399,18 +257,160 @@ get_waring_data_value_list_data = {
# 八大维度数据项编码 # 八大维度数据项编码
bdwd_items = { bdwd_items = {
'ciri': 'jxtppbdwdcr', 'ciri': '251889263|FORECAST|PRICE|T01',
'cierri': 'jxtppbdwdcer', 'cierri': '251889263|FORECAST|PRICE|T02',
'cisanri': 'jxtppbdwdcsanr', 'cisanri': '251889263|FORECAST|PRICE|T03',
'cisiri': 'jxtppbdwdcsir', 'cisiri': '251889263|FORECAST|PRICE|T04',
'benzhou': 'jxtppbdwdbz', 'benzhou': '251889263|FORECAST|PRICE|T05',
'cizhou': 'jxtppbdwdcz', 'cizhou': '251889263|FORECAST|PRICE|W_01',
'gezhou': 'jxtppbdwdgz', 'gezhou': '251889263|FORECAST|PRICE|W_02',
'ciyue': 'jxtppbdwdcy', 'ciyue': '251889263|FORECAST|PRICE|M_01',
'cieryue': 'jxtppbdwdcey', 'cieryue': '251889263|FORECAST|PRICE|M_02',
'cisanyue': 'jxtppbdwdcsany', 'cisanyue': '251889263|FORECAST|PRICE|M_03',
'cisiyue': 'jxtppbdwdcsiy', 'cisiyue': '251889263|FORECAST|PRICE|M_04',
} }
# 生产环境数据库
# host = 'rm-2zehj3r1n60ttz9x5.mysql.rds.aliyuncs.com'
# port = 3306
# dbusername = 'jingbo'
# password = 'shihua@123'
# dbname = 'jingbo'
# table_name = 'v_tbl_crude_oil_warning'
# 变量定义--测试环境
# 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_value_list_url = f"http://{server_host}:8080/jingbo-dev/api/dw/dataValue/pushDataValueList"
# # 上传停更数据到市场信息平台
# push_waring_data_value_list_url = f"http://{server_host}:8080/jingbo-dev/api/basicBuiness/crudeOilWarning/crudeSaveOrupdate"
# # 获取预警数据中取消订阅指标ID
# get_waring_data_value_list_url = f"http://{server_host}:8080/jingbo-dev/api/basicBuiness/crudeOilWarning/dataList"
# 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": '上传聚烯烃PP价格预测报告',
# "data": {
# "groupNo": "000127",
# "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": 'JXTJGYCBG', # 分析报告分类编码
# "reportEmployeeCode": "E40116", # 报告人
# "reportDeptCode": "D0044", # 报告部门
# "productGroupCode": "RAW_MATERIAL" # 商品分类
# }
# }
# # 已弃用
# warning_data = {
# "funcModule": '原油特征停更预警',
# "funcOperation": '原油特征停更预警',
# "data": {
# "groupNo": "000127",
# 'WARNING_TYPE_NAME': '特征数据停更预警',
# 'WARNING_CONTENT': '',
# 'WARNING_DATE': ''
# }
# }
# query_data_list_item_nos_data = {
# "funcModule": "数据项",
# "funcOperation": "查询",
# "data": {
# "dateStart": "20200101",
# "dateEnd": "",
# # 数据项编码,代表 PP期货 价格
# "dataItemNoList": ["MAIN_CONFT_SETTLE_PRICE"]
# }
# }
# 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
# }
# ]
# }
# push_waring_data_value_list_data = {
# "data": {
# "crudeOilWarningDtoList": [
# {
# "lastUpdateDate": "20240501",
# "updateSuspensionCycle": 1,
# "dataSource": "9",
# "frequency": "1",
# "indicatorName": "美元指数",
# "indicatorId": "myzs001",
# "warningDate": "2024-05-13"
# }
# ],
# "dataSource": "9"
# },
# "funcModule": "商品数据同步",
# "funcOperation": "同步"
# }
# get_waring_data_value_list_data = {
# "data": "9", "funcModule": "商品数据同步", "funcOperation": "同步"}
# # 八大维度数据项编码
# bdwd_items = {
# 'ciri': 'jxtppbdwdcr',
# 'cierri': 'jxtppbdwdcer',
# 'cisanri': 'jxtppbdwdcsanr',
# 'cisiri': 'jxtppbdwdcsir',
# 'benzhou': 'jxtppbdwdbz',
# 'cizhou': 'jxtppbdwdcz',
# 'gezhou': 'jxtppbdwdgz',
# 'ciyue': 'jxtppbdwdcy',
# 'cieryue': 'jxtppbdwdcey',
# 'cisanyue': 'jxtppbdwdcsany',
# 'cisiyue': 'jxtppbdwdcsiy',
# }
# 北京环境数据库 # 北京环境数据库
host = '192.168.101.27' host = '192.168.101.27'
port = 3306 port = 3306
@ -437,7 +437,7 @@ DEFAULT_CONFIG = {
# 开关 # 开关
is_train = True # 是否训练 is_train = True # 是否训练
is_debug = False # 是否调试 is_debug = False # 是否调试
is_eta = False # 是否使用eta接口 is_eta = True # 是否使用eta接口
is_market = True # 是否通过市场信息平台获取特征 ,在is_eta 为true 的情况下生效 is_market = True # 是否通过市场信息平台获取特征 ,在is_eta 为true 的情况下生效
is_timefurture = True # 是否使用时间特征 is_timefurture = True # 是否使用时间特征
is_fivemodels = False # 是否使用之前保存的最佳的5个模型 is_fivemodels = False # 是否使用之前保存的最佳的5个模型

View File

@ -336,12 +336,12 @@ columnsrename = {'251889263|FORECAST|PRICE|T05': '本周', '251889263|FORECAST|P
# 生产环境数据库 # 生产环境数据库
# host = 'rm-2zehj3r1n60ttz9x5.mysql.rds.aliyuncs.com' host = 'rm-2zehj3r1n60ttz9x5.mysql.rds.aliyuncs.com'
# port = 3306 port = 3306
# dbusername ='jingbo' dbusername ='jingbo'
# password = 'shihua@123' password = 'shihua@123'
# dbname = 'jingbo' dbname = 'jingbo'
# table_name = 'v_tbl_crude_oil_warning' table_name = 'v_tbl_crude_oil_warning'
# 变量定义--测试环境 # 变量定义--测试环境
@ -460,12 +460,12 @@ columnsrename = {'251889263|FORECAST|PRICE|T05': '本周', '251889263|FORECAST|P
# 'jxtppbdwdcsany': '次三月', 'jxtppbdwdcy': '次月', 'jxtppbdwdcz': '次周', 'jxtppbdwdgz': '隔周', } # 'jxtppbdwdcsany': '次三月', 'jxtppbdwdcy': '次月', 'jxtppbdwdcz': '次周', 'jxtppbdwdgz': '隔周', }
# 北京环境数据库 # 北京环境数据库
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'
DEFAULT_CONFIG = { DEFAULT_CONFIG = {
'feature_factor_frequency': 'D', 'feature_factor_frequency': 'D',

View File

@ -301,12 +301,12 @@ bdwd_items = {
# # 生产环境数据库 # # 生产环境数据库
# host = 'rm-2zehj3r1n60ttz9x5.mysql.rds.aliyuncs.com' host = 'rm-2zehj3r1n60ttz9x5.mysql.rds.aliyuncs.com'
# port = 3306 port = 3306
# dbusername = 'jingbo' dbusername = 'jingbo'
# password = 'shihua@123' password = 'shihua@123'
# dbname = 'jingbo' dbname = 'jingbo'
# table_name = 'v_tbl_crude_oil_warning' table_name = 'v_tbl_crude_oil_warning'
# 变量定义--测试环境 # 变量定义--测试环境
@ -439,12 +439,12 @@ bdwd_items = {
# 北京环境数据库 # 北京环境数据库
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'
DEFAULT_CONFIG = { DEFAULT_CONFIG = {
'feature_factor_frequency': 'D', 'feature_factor_frequency': 'D',

View File

@ -3,6 +3,8 @@ from lib.dataread import *
from config_juxiting_yuedu import * from config_juxiting_yuedu import *
import datetime import datetime
from models.nerulforcastmodels import pp_bdwd_png
global_config.update({ global_config.update({
# 核心参数 # 核心参数
'logger': logger, 'logger': logger,
@ -111,4 +113,12 @@ def push_png_report():
if __name__ == '__main__': if __name__ == '__main__':
# 图片报告
try:
logger.info('图片报告ing')
pp_bdwd_png(global_config=global_config)
logger.info('图片报告end')
except Exception as e:
logger.info(f'图片报告失败:{e}')
time.sleep(5)
push_png_report() push_png_report()

View File

@ -994,6 +994,9 @@ def datachuli(df_zhibiaoshuju, df_zhibiaoliebiao, datecol='date', end_time='', y
# kdj指标 # kdj指标
if add_kdj: if add_kdj:
df = calculate_kdj(df) df = calculate_kdj(df)
# 保存填充后的数据
df.to_csv(os.path.join(
dataset, '处理后的特征数据.csv'), index=False)
# 特征分析 # 特征分析
featureAnalysis(df, dataset=dataset, y=y) featureAnalysis(df, dataset=dataset, y=y)
@ -1080,7 +1083,6 @@ def zhoududatachuli(df_zhibiaoshuju, df_zhibiaoliebiao, datecol='date', end_time
def datachuli_juxiting(df_zhibiaoshuju, df_zhibiaoliebiao, datecol='date', end_time='', y='y', dataset='dataset', delweekenday=True, add_kdj=False, is_timefurture=False): def datachuli_juxiting(df_zhibiaoshuju, df_zhibiaoliebiao, datecol='date', end_time='', y='y', dataset='dataset', delweekenday=True, add_kdj=False, is_timefurture=False):
''' '''
聚烯烃特征数据处理函数 聚烯烃特征数据处理函数
接收的是两个df一个是指标数据一个是指标列表 接收的是两个df一个是指标数据一个是指标列表
@ -1175,14 +1177,12 @@ def datachuli_juxiting(df_zhibiaoshuju, df_zhibiaoliebiao, datecol='date', end_t
# 删除预测列空值的行 # 删除预测列空值的行
# df = df.dropna(subset=['y']) # df = df.dropna(subset=['y'])
# config.logger.info(f'删除预测列为空值的行后数据量:{df.shape}') # config.logger.info(f'删除预测列为空值的行后数据量:{df.shape}')
# 去掉指标列表中的columns_to_drop的行 # 去掉指标列表中的columns_to_drop的行
df_zhibiaoliebiao = df_zhibiaoliebiao[df_zhibiaoliebiao['指标名称'].isin( df_zhibiaoliebiao = df_zhibiaoliebiao[df_zhibiaoliebiao['指标名称'].isin(
df.columns.tolist())] df.columns.tolist())]
df_zhibiaoliebiao.to_csv(os.path.join( df_zhibiaoliebiao.to_csv(os.path.join(
dataset, '特征处理后的指标名称及分类.csv'), index=False) dataset, '特征处理后的指标名称及分类.csv'), index=False)
if add_kdj: if add_kdj:
df = calculate_kdj(df) df = calculate_kdj(df)
@ -1334,7 +1334,6 @@ def getdata_juxiting(filename, datecol='date', y='y', dataset='', add_kdj=False,
df = datachuli_juxiting(df_zhibiaoshuju, df_zhibiaoliebiao, datecol, y=y, dataset=dataset, df = datachuli_juxiting(df_zhibiaoshuju, df_zhibiaoliebiao, datecol, y=y, dataset=dataset,
add_kdj=add_kdj, is_timefurture=is_timefurture, end_time=end_time) add_kdj=add_kdj, is_timefurture=is_timefurture, end_time=end_time)
return df, df_zhibiaoliebiao return df, df_zhibiaoliebiao

View File

@ -865,8 +865,6 @@ def convert_df_to_pydantic_pp(df_predict, model_id_name_dict, global_config):
def find_best_models(date='', global_config=None): def find_best_models(date='', global_config=None):
best_models = {} best_models = {}
model_id_name_dict = get_model_id_name_dict(global_config=global_config) model_id_name_dict = get_model_id_name_dict(global_config=global_config)
# 处理日期输入 # 处理日期输入
if not date: if not date:
@ -881,7 +879,6 @@ def find_best_models(date='', global_config=None):
return best_models return best_models
current_date = datetime.datetime.strptime(date, '%Y-%m-%d') current_date = datetime.datetime.strptime(date, '%Y-%m-%d')
# 上一交易日日期 Last trading day # 上一交易日日期 Last trading day
last_trading_day = pd.Timestamp(date) - pd.tseries.offsets.BusinessDay(1) last_trading_day = pd.Timestamp(date) - pd.tseries.offsets.BusinessDay(1)
last_trading_day_str = last_trading_day.strftime('%Y-%m-%d') last_trading_day_str = last_trading_day.strftime('%Y-%m-%d')
@ -978,7 +975,8 @@ def find_best_models(date='', global_config=None):
if i == 0: if i == 0:
# 计算当前日期的前一工作日日期 # 计算当前日期的前一工作日日期
ciridate = last_trading_day_str ciridate = last_trading_day_str
global_config['logger'].info(f'计算预测{last_trading_day}的次日{last_trading_day}最佳模型') global_config['logger'].info(
f'计算预测{last_trading_day}的次日{last_trading_day}最佳模型')
global_config['logger'].info( global_config['logger'].info(
f'{date}真实价格:{true_price[true_price["ds"] == ciridate]["y"].values[0]}') f'{date}真实价格:{true_price[true_price["ds"] == ciridate]["y"].values[0]}')
price = df[['data_date', wd, 'model_id']] price = df[['data_date', wd, 'model_id']]
@ -1006,7 +1004,8 @@ def find_best_models(date='', global_config=None):
# 计算五个工作日之前的日期 # 计算五个工作日之前的日期
benzhoudate = (pd.Timestamp(last_trading_day) - benzhoudate = (pd.Timestamp(last_trading_day) -
pd.Timedelta(days=7)).strftime('%Y-%m-%d') pd.Timedelta(days=7)).strftime('%Y-%m-%d')
global_config['logger'].info(f'计算预测{last_trading_day}的五天前{benzhoudate}最佳模型') global_config['logger'].info(
f'计算预测{last_trading_day}的五天前{benzhoudate}最佳模型')
global_config['logger'].info( global_config['logger'].info(
f'{date}真实价格:{true_price[true_price["ds"] == last_trading_day_str]["y"].values[0]}') f'{date}真实价格:{true_price[true_price["ds"] == last_trading_day_str]["y"].values[0]}')
price = df[['data_date', wd, 'model_id']] price = df[['data_date', wd, 'model_id']]
@ -1033,12 +1032,14 @@ def find_best_models(date='', global_config=None):
elif i in [2, 3]: elif i in [2, 3]:
weeks_ago = 1 if i == 2 else 2 weeks_ago = 1 if i == 2 else 2
ago_monday = last_trading_day - \ ago_monday = last_trading_day - \
datetime.timedelta(days=last_trading_day.weekday() + 7 * weeks_ago) datetime.timedelta(
days=last_trading_day.weekday() + 7 * weeks_ago)
ago_sunday = ago_monday + datetime.timedelta(days=6) ago_sunday = ago_monday + datetime.timedelta(days=6)
ago_date_str = f"{ago_monday.strftime('%Y-%m-%d')} - {ago_sunday.strftime('%Y-%m-%d')}" ago_date_str = f"{ago_monday.strftime('%Y-%m-%d')} - {ago_sunday.strftime('%Y-%m-%d')}"
global_config['logger'].info( global_config['logger'].info(
f'计算预测{date}的前{weeks_ago}{ago_date_str}最佳模型') f'计算预测{date}的前{weeks_ago}{ago_date_str}最佳模型')
weektrueprice = true_price[(true_price['ds'] >= ago_monday.strftime('%Y-%m-%d')) & (true_price['ds'] <= ago_sunday.strftime('%Y-%m-%d'))]['y'].mean() weektrueprice = true_price[(true_price['ds'] >= ago_monday.strftime(
'%Y-%m-%d')) & (true_price['ds'] <= ago_sunday.strftime('%Y-%m-%d'))]['y'].mean()
global_config['logger'].info( global_config['logger'].info(
f'当周{date_monday.strftime("%Y-%m-%d")}---{last_trading_day_str}真实价格的周均价:{weektrueprice}') f'当周{date_monday.strftime("%Y-%m-%d")}---{last_trading_day_str}真实价格的周均价:{weektrueprice}')
@ -1102,7 +1103,7 @@ def find_best_models(date='', global_config=None):
return best_models return best_models
def plot_pp_predict_result(y_hat, global_config,wd='yuedu'): def plot_pp_predict_result(y_hat, global_config, wd='yuedu'):
""" """
绘制PP期货预测结果的图表 绘制PP期货预测结果的图表
""" """
@ -1115,11 +1116,16 @@ def plot_pp_predict_result(y_hat, global_config,wd='yuedu'):
global_config['dataset'], '指标数据.csv'))[['ds', 'y']][-12:] global_config['dataset'], '指标数据.csv'))[['ds', 'y']][-12:]
xgx_df = pd.read_csv(os.path.join( xgx_df = pd.read_csv(os.path.join(
global_config['dataset'], '相关系数.csv')) global_config['dataset'], '相关系数.csv'))
title = 'PP期货月维度预测价格走势'
else: else:
y = pd.read_csv('juxitingdataset/指标数据.csv')[['ds', 'y']][-30:] y = pd.read_csv('juxitingdataset/指标数据.csv')[['ds', 'y']][-30:]
xgx_df = pd.read_csv('juxitingdataset/相关系数.csv') xgx_df = pd.read_csv('juxitingdataset/相关系数.csv')
xgx_df = xgx_df.rename(columns={xgx_df.columns[0]: '指标', xgx_df.columns[1]: '系数'}) title = 'PP期货日、周维度预测价格走势'
top_10_correlations = xgx_df.sort_values(by='系数', ascending=False)[1:11].round(2) xgx_df = xgx_df.rename(
columns={xgx_df.columns[0]: '指标', xgx_df.columns[1]: '系数'})
top_10_correlations = xgx_df.sort_values(
by='系数', ascending=False)[1:11].round(2)
y['ds'] = pd.to_datetime(y['ds']) y['ds'] = pd.to_datetime(y['ds'])
y = y[y['ds'] < y_hat['ds'].iloc[0]] y = y[y['ds'] < y_hat['ds'].iloc[0]]
@ -1146,8 +1152,7 @@ def plot_pp_predict_result(y_hat, global_config,wd='yuedu'):
color='orange', label='预测值', ax=ax, linestyle='--', linewidth=2) color='orange', label='预测值', ax=ax, linestyle='--', linewidth=2)
# 绘制散点图 # 绘制散点图
sns.scatterplot(x=y_y_hat['ds'], y=y_y_hat['predictresult'], sns.scatterplot(x=y_y_hat['ds'], y=y_y_hat['predictresult'],
color='orange', ax=ax, marker='o', s=100) color='orange', ax=ax, marker='o', s=100)
# 绘制 y 的折线图,颜色为蓝色 # 绘制 y 的折线图,颜色为蓝色
sns.lineplot(x=y['ds'], y=y['y'], color='blue', label='真实值', ax=ax) sns.lineplot(x=y['ds'], y=y['y'], color='blue', label='真实值', ax=ax)
@ -1158,7 +1163,9 @@ def plot_pp_predict_result(y_hat, global_config,wd='yuedu'):
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m')) ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
# date_str = pd.Timestamp(y_hat["ds"].iloc[0]).strftime('%Y-%m-%d') # date_str = pd.Timestamp(y_hat["ds"].iloc[0]).strftime('%Y-%m-%d')
ax.set_title(f'{datetime.datetime.now().strftime("%Y-%m-%d")} PP期货十一大维度 预测价格走势', fontsize=24) ax.set_title(
f'{datetime.datetime.now().strftime("%Y-%m-%d")} {title}', fontsize=24)
ax.set_xlabel('日期') ax.set_xlabel('日期')
ax.set_ylabel('预测结果') ax.set_ylabel('预测结果')
ax.tick_params(axis='x', rotation=45) ax.tick_params(axis='x', rotation=45)
@ -1181,18 +1188,18 @@ def plot_pp_predict_result(y_hat, global_config,wd='yuedu'):
# 在图表下方添加表格 # 在图表下方添加表格
table = ax.table(cellText=data, colLabels=columns, table = ax.table(cellText=data, colLabels=columns,
loc='bottom', bbox=[0, -0.4, 1, 0.2],cellLoc='center') loc='bottom', bbox=[0, -0.4, 1, 0.2], cellLoc='center')
# 设置表头为浅蓝色 # 设置表头为浅蓝色
for (i, j), cell in table.get_celld().items(): for (i, j), cell in table.get_celld().items():
if i == 0: # 表头行 if i == 0: # 表头行
cell.set_facecolor('lightblue') cell.set_facecolor('lightblue')
table.auto_set_font_size(False) table.auto_set_font_size(False)
table.set_fontsize(12) table.set_fontsize(12)
# 相关系数表格 - 准备数据(指标名称+相关系数两列) # 相关系数表格 - 准备数据(指标名称+相关系数两列)
table_data = top_10_correlations[['指标', '系数']].values.tolist() # 提取表格数据 table_data = top_10_correlations[['指标', '系数']].values.tolist() # 提取表格数据
table_data.insert(0, ['指标名称', '相关系数']) # 添加表头 table_data.insert(0, ['指标名称', '相关系数']) # 添加表头
# 在当前图表下方绘制表格调整bbox参数控制位置和大小 # 在当前图表下方绘制表格调整bbox参数控制位置和大小
table = ax.table( table = ax.table(
cellText=table_data, # 表格数据 cellText=table_data, # 表格数据
@ -1207,14 +1214,15 @@ def plot_pp_predict_result(y_hat, global_config,wd='yuedu'):
table.auto_set_font_size(False) # 关闭自动字体大小 table.auto_set_font_size(False) # 关闭自动字体大小
table.set_fontsize(10) # 设置表格字体大小 table.set_fontsize(10) # 设置表格字体大小
table.scale(1.1, 1.5) # 调整表格缩放比例(宽度, 高度) table.scale(1.1, 1.5) # 调整表格缩放比例(宽度, 高度)
plt.tight_layout() # 自动调整整体布局 plt.tight_layout() # 自动调整整体布局
plt.savefig(os.path.join( plt.savefig(os.path.join(
global_config['dataset'], f'pp_{wd}correlation.png'), global_config['dataset'], f'pp_{wd}correlation.png'),
bbox_inches='tight', bbox_inches='tight',
pad_inches=1.0 # 增加边距 pad_inches=1.0 # 增加边距
) )
def merge_images(image1_path, image2_path, output_path, direction='horizontal'): def merge_images(image1_path, image2_path, output_path, direction='horizontal'):
img1 = Image.open(image1_path).convert('RGBA') # 保留透明通道 img1 = Image.open(image1_path).convert('RGBA') # 保留透明通道
img2 = Image.open(image2_path).convert('RGBA') img2 = Image.open(image2_path).convert('RGBA')
@ -1226,12 +1234,16 @@ def merge_images(image1_path, image2_path, output_path, direction='horizontal'):
# 统一尺寸(横向拼接统一高度,纵向拼接统一宽度) # 统一尺寸(横向拼接统一高度,纵向拼接统一宽度)
if direction == 'horizontal': if direction == 'horizontal':
new_height = max(height1, height2) new_height = max(height1, height2)
img1 = img1.resize((int(width1 * new_height / height1), new_height), Image.LANCZOS) img1 = img1.resize(
img2 = img2.resize((int(width2 * new_height / height2), new_height), Image.LANCZOS) (int(width1 * new_height / height1), new_height), Image.LANCZOS)
img2 = img2.resize(
(int(width2 * new_height / height2), new_height), Image.LANCZOS)
else: else:
new_width = max(width1, width2) new_width = max(width1, width2)
img1 = img1.resize((new_width, int(height1 * new_width / width1)), Image.LANCZOS) img1 = img1.resize(
img2 = img2.resize((new_width, int(height2 * new_width / width2)), Image.LANCZOS) (new_width, int(height1 * new_width / width1)), Image.LANCZOS)
img2 = img2.resize(
(new_width, int(height2 * new_width / width2)), Image.LANCZOS)
# 重新获取调整后的尺寸 # 重新获取调整后的尺寸
width1, height1 = img1.size width1, height1 = img1.size
@ -1245,12 +1257,12 @@ def merge_images(image1_path, image2_path, output_path, direction='horizontal'):
# 粘贴图片 # 粘贴图片
new_img.paste(img1, (0, 0)) new_img.paste(img1, (0, 0))
new_img.paste(img2, (width1, 0) if direction == 'horizontal' else (0, height1)) new_img.paste(img2, (width1, 0) if direction ==
'horizontal' else (0, height1))
# 保存为PNG保留透明如需JPG可转为RGB # 保存为PNG保留透明如需JPG可转为RGB
new_img.save(output_path, 'PNG') new_img.save(output_path, 'PNG')
if __name__ == '__main__': if __name__ == '__main__':
print('This is a tool, not a script.') print('This is a tool, not a script.')

View File

@ -7,6 +7,7 @@ from models.nerulforcastmodels import ex_Model_Juxiting, model_losss_juxiting, p
import datetime import datetime
import torch import torch
torch.set_float32_matmul_precision("high") torch.set_float32_matmul_precision("high")
torch.set_num_threads(4)
global_config.update({ global_config.update({
# 核心参数 # 核心参数
@ -566,9 +567,10 @@ if __name__ == '__main__':
# except Exception as e: # except Exception as e:
# logger.info(f'预测失败:{e}') # logger.info(f'预测失败:{e}')
# continue # continue
# global_config['end_time'] = '2025-08-05'
# global_config['end_time'] = '2025-08-14'
predict_main() predict_main()
# global_config['end_time'] = '2025-08-12' # global_config['end_time'] = '2025-08-14'
# push_market_value() # push_market_value()
# sql_inset_predict(global_config) # sql_inset_predict(global_config)

View File

@ -7,6 +7,7 @@ from models.nerulforcastmodels import ex_Model_Juxiting, model_losss_juxiting, p
import datetime import datetime
import torch import torch
torch.set_float32_matmul_precision("high") torch.set_float32_matmul_precision("high")
torch.set_num_threads(4)
global_config.update({ global_config.update({
# 核心参数 # 核心参数
@ -510,13 +511,7 @@ def predict_main():
# logger.info('制作报告end') # logger.info('制作报告end')
# 图片报告
try:
logger.info('图片报告ing')
pp_bdwd_png(global_config=global_config)
logger.info('图片报告end')
except Exception as e:
logger.info(f'图片报告失败:{e}')
# # LSTM 单变量模型 # # LSTM 单变量模型
# ex_Lstm(df,input_seq_len=input_size,output_seq_len=horizon,is_debug=is_debug,dataset=dataset) # ex_Lstm(df,input_seq_len=input_size,output_seq_len=horizon,is_debug=is_debug,dataset=dataset)
@ -552,7 +547,7 @@ if __name__ == '__main__':
# logger.info(f'预测失败:{e}') # logger.info(f'预测失败:{e}')
# continue # continue
# global_config['end_time'] = '2025-08-13' # global_config['end_time'] = '2025-08-14'
predict_main() predict_main()
# push_market_value() # push_market_value()
# sql_inset_predict(global_config) # sql_inset_predict(global_config)

View File

@ -7,6 +7,7 @@ from models.nerulforcastmodels import ex_Model_Juxiting, model_losss_juxiting, p
import datetime import datetime
import torch import torch
torch.set_float32_matmul_precision("high") torch.set_float32_matmul_precision("high")
torch.set_num_threads(4)
global_config.update({ global_config.update({
# 核心参数 # 核心参数
@ -520,7 +521,7 @@ if __name__ == '__main__':
# continue # continue
# global_config['end_time'] = '2025-08-12' # global_config['end_time'] = '2025-08-14'
predict_main() predict_main()

View File

@ -17,7 +17,8 @@ def run_predictions(target_date):
# 依次执行每个脚本 # 依次执行每个脚本
for script in scripts: for script in scripts:
# command = [r"C:\Users\Hello\.conda\envs\predict\python", script] # liuruipc # command = [r"C:\Users\Hello\.conda\envs\predict\python", script] # liuruipc
command = [r"C:/Users/EDY/.conda/envs/priceforecast/python.exe", script] #168pc command = [r"D:/yuanyouyuce/envs/priceforecast/python", script] # 线上配置
# command = [r"C:/Users/EDY/.conda/envs/priceforecast/python.exe", script] #168pc
# command = [r"C:/Users/Hello/.conda/envs/jaigeyuce/python.exe", script] #yitijipc # command = [r"C:/Users/Hello/.conda/envs/jaigeyuce/python.exe", script] #yitijipc
subprocess.run(command, check=True) subprocess.run(command, check=True)