聚烯烃图形报告调试完成
This commit is contained in:
parent
30393b7fb3
commit
97ef8b63a3
@ -756,7 +756,7 @@ def calculate_correlation(df):
|
||||
# 去掉ds y
|
||||
df = df.drop(columns=['ds', 'y'])
|
||||
# 计算相关系数
|
||||
corr = df.corrwith(yy)
|
||||
corr = df.corrwith(yy).round(4)
|
||||
# 输出相关系数
|
||||
print(corr)
|
||||
# 保存结果
|
||||
|
50
lib/tools.py
50
lib/tools.py
@ -1074,7 +1074,7 @@ def find_best_models(date='', global_config=None):
|
||||
return best_models
|
||||
|
||||
|
||||
def plot_pp_predict_result(y_hat, global_config):
|
||||
def plot_pp_predict_result(y_hat, global_config,wd='yuedu'):
|
||||
"""
|
||||
绘制PP期货预测结果的图表
|
||||
"""
|
||||
@ -1082,11 +1082,18 @@ def plot_pp_predict_result(y_hat, global_config):
|
||||
import seaborn as sns
|
||||
|
||||
# 获取y的真实值
|
||||
# y = pd.read_csv(os.path.join(
|
||||
# global_config['dataset'], '指标数据.csv'))[['ds', 'y']]
|
||||
y = pd.read_csv('juxitingdataset/指标数据.csv')[['ds', 'y']]
|
||||
if wd == 'yuedu':
|
||||
y = pd.read_csv(os.path.join(
|
||||
global_config['dataset'], '指标数据.csv'))[['ds', 'y']][-12:]
|
||||
xgx_df = pd.read_csv(os.path.join(
|
||||
global_config['dataset'], '相关系数.csv'))
|
||||
else:
|
||||
y = pd.read_csv('juxitingdataset/指标数据.csv')[['ds', 'y']][-30:]
|
||||
xgx_df = pd.read_csv('juxitingdataset/相关系数.csv')
|
||||
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]
|
||||
y['ds'] = pd.to_datetime(y['ds'])
|
||||
y = y[y['ds'] < y_hat['ds'].iloc[0]][-30:]
|
||||
y = y[y['ds'] < y_hat['ds'].iloc[0]]
|
||||
|
||||
# 取y的最后一行数据追加到y_hat(将真实值最后一行作为预测值起点)
|
||||
if not y.empty:
|
||||
@ -1096,7 +1103,8 @@ def plot_pp_predict_result(y_hat, global_config):
|
||||
y_y_hat = pd.concat([y_last_row, y_hat], ignore_index=True)
|
||||
|
||||
# 创建图表和子图布局,为表格预留空间
|
||||
fig, ax = plt.subplots(figsize=(16, 9))
|
||||
fig = plt.figure(figsize=(16, 22))
|
||||
ax = fig.add_axes([0.05, 0.55, 0.9, 0.25]) # 16:9核心参数
|
||||
|
||||
# 对日期列进行排序,确保日期大的在右边
|
||||
y_y_hat = y_y_hat.sort_values(by='ds')
|
||||
@ -1132,13 +1140,33 @@ def plot_pp_predict_result(y_hat, global_config):
|
||||
|
||||
# 在图表下方添加表格
|
||||
table = ax.table(cellText=data, colLabels=columns,
|
||||
loc='bottom', bbox=[0, -0.6, 1, 0.2])
|
||||
loc='bottom', bbox=[0, -0.4, 1, 0.2],cellLoc='center')
|
||||
table.auto_set_font_size(False)
|
||||
table.set_fontsize(14)
|
||||
|
||||
plt.tight_layout(rect=[0, 0.1, 1, 1]) # 调整布局,为表格留出空间
|
||||
table.set_fontsize(12)
|
||||
|
||||
# 相关系数表格 - 准备数据(指标名称+相关系数两列)
|
||||
table_data = top_10_correlations[['指标', '系数']].values.tolist() # 提取表格数据
|
||||
table_data.insert(0, ['指标名称', '相关系数']) # 添加表头
|
||||
|
||||
# 在当前图表下方绘制表格(调整bbox参数控制位置和大小)
|
||||
table = ax.table(
|
||||
cellText=table_data, # 表格数据
|
||||
loc='bottom', # 表格位置(底部)
|
||||
bbox=[0, -0.9, 1, 0.4], # [左, 下, 宽, 高],调整下边界(-0.7)和高度(0.5)控制表格位置
|
||||
cellLoc='left'
|
||||
)
|
||||
table.auto_set_font_size(False) # 关闭自动字体大小
|
||||
table.set_fontsize(10) # 设置表格字体大小
|
||||
table.scale(1.1, 1.5) # 调整表格缩放比例(宽度, 高度)
|
||||
|
||||
plt.tight_layout() # 自动调整整体布局
|
||||
plt.savefig(os.path.join(
|
||||
global_config['dataset'], 'pp_predict_result.png'))
|
||||
global_config['dataset'], f'pp_{wd}correlation.png'),
|
||||
bbox_inches='tight',
|
||||
pad_inches=1.0 # 增加边距
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -528,13 +528,19 @@ def predict_main():
|
||||
if __name__ == '__main__':
|
||||
# global end_time
|
||||
# 遍历2024-11-25 到 2024-12-3 之间的工作日日期
|
||||
for i_time in pd.date_range('2025-7-28', '2025-7-29', freq='B'):
|
||||
try:
|
||||
global_config['end_time'] = i_time.strftime('%Y-%m-%d')
|
||||
global_config['db_mysql'].connect()
|
||||
predict_main()
|
||||
except Exception as e:
|
||||
logger.info(f'预测失败:{e}')
|
||||
continue
|
||||
# for i_time in pd.date_range('2025-7-28', '2025-7-29', freq='B'):
|
||||
# try:
|
||||
# global_config['end_time'] = i_time.strftime('%Y-%m-%d')
|
||||
# global_config['db_mysql'].connect()
|
||||
# predict_main()
|
||||
# except Exception as e:
|
||||
# logger.info(f'预测失败:{e}')
|
||||
# continue
|
||||
|
||||
# predict_main()
|
||||
predict_main()
|
||||
|
||||
# 图片报告
|
||||
# global_config['end_time'] = '2025-07-31'
|
||||
# logger.info('图片报告ing')
|
||||
# pp_bdwd_png(global_config=global_config)
|
||||
# logger.info('图片报告end')
|
||||
|
@ -3539,11 +3539,34 @@ def pp_export_pdf(num_indicators=475, num_models=21, num_dayindicator=202, input
|
||||
def pp_bdwd_png(global_config):
|
||||
best_bdwd_price = find_best_models(
|
||||
date=global_config['end_time'], global_config=global_config)
|
||||
# y_hat = pd.DataFrame(best_bdwd_price).T[['date', 'predictresult']][-4:]
|
||||
y_hat = pd.DataFrame(best_bdwd_price).T[['date', 'predictresult']]
|
||||
y_hat['ds'] = pd.to_datetime(y_hat['date'])
|
||||
# 绘制PP期货预测结果的图表
|
||||
plot_pp_predict_result(y_hat, global_config)
|
||||
y_hat_yuedu = pd.DataFrame(best_bdwd_price).T[['date', 'predictresult']][-4:]
|
||||
y_hat_yuedu['ds'] = pd.to_datetime(y_hat_yuedu['date'])
|
||||
# 绘制PP期货月度预测结果的图表
|
||||
plot_pp_predict_result(y_hat_yuedu, global_config)
|
||||
|
||||
y_hat_zhoudu = pd.DataFrame(best_bdwd_price).T[['date', 'predictresult']][2:4]
|
||||
y_hat_zhoudu['ds'] = pd.to_datetime(y_hat_zhoudu['date'])
|
||||
y_hat_zhoudu.drop(columns=['date'],inplace=True)
|
||||
print(y_hat_zhoudu)
|
||||
# 获取本周最佳模型的五日预测价格
|
||||
five_days_predict_price = pd.read_csv('juxitingdataset/predict.csv')
|
||||
week_price_modelname = best_bdwd_price['week_price']['model_name']
|
||||
five_days_predict_price = five_days_predict_price[['ds',week_price_modelname]]
|
||||
five_days_predict_price['ds'] = pd.to_datetime(five_days_predict_price['ds'])
|
||||
five_days_predict_price.rename(columns={week_price_modelname:'predictresult'},inplace=True)
|
||||
# 设置索引 次日 次二日 次三日 次四日 次五日
|
||||
index_labels = ["次日", "次二日", "次三日", "次四日", "次五日"]
|
||||
five_days_predict_price.index = index_labels
|
||||
y_hat_riduzhoudu = pd.concat([y_hat_zhoudu, five_days_predict_price], axis=0)
|
||||
y_hat_riduzhoudu = y_hat_riduzhoudu.sort_values(by='ds')
|
||||
print(y_hat_riduzhoudu)
|
||||
# 绘制PP期货日度周度预测结果的图表
|
||||
plot_pp_predict_result(y_hat_riduzhoudu, global_config,'zhoudu')
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def pp_export_pdf_v1(num_indicators=475, num_models=21, num_dayindicator=202, inputsize=5, dataset='dataset', time='2024-07-30', reportname='report.pdf'):
|
||||
|
@ -17,8 +17,8 @@ def run_predictions(target_date):
|
||||
# 依次执行每个脚本
|
||||
for script in scripts:
|
||||
# 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"C:/Users/Hello/.conda/envs/jaigeyuce/python.exe", script] #yitijipc
|
||||
command = [r"C:/Users/EDY/.conda/envs/priceforecast/python.exe", script] #168pc
|
||||
# command = [r"C:/Users/Hello/.conda/envs/jaigeyuce/python.exe", script] #yitijipc
|
||||
subprocess.run(command, check=True)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user