沥青定性模型添加数据更改逻辑;画图横轴时间自动展示

This commit is contained in:
workpc 2025-01-08 17:08:24 +08:00
parent 6250220f38
commit 16ec8f02a9
5 changed files with 78 additions and 1042 deletions

File diff suppressed because it is too large Load Diff

View File

@ -176,15 +176,15 @@ table_name = 'v_tbl_crude_oil_warning'
### 开关 ### 开关
is_train = False # 是否训练 is_train = False # 是否训练
is_debug = False # 是否调试 is_debug = False # 是否调试
is_eta = True # 是否使用eta接口 is_eta = False # 是否使用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个模型
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 = True # 是否上传报告 is_update_report = False # 是否上传报告
is_update_warning_data = True # 是否上传预警数据 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 # 是否删除两个月不更新的特征
@ -239,7 +239,7 @@ 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'Brent原油大模型预测--{now}.pdf' # 报告文件名 reportname = f'Brent原油大模型预测--{end_time}.pdf' # 报告文件名
reportname = reportname.replace(':', '-') # 替换冒号 reportname = reportname.replace(':', '-') # 替换冒号
if end_time == '': if end_time == '':
end_time = now end_time = now

View File

@ -41,9 +41,9 @@ plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# from config_jingbo_pro import * # from config_jingbo_pro import *
# from config_jingbo import * from config_jingbo import *
# from config_yongan import * # from config_yongan import *
from config_juxiting import * # from config_juxiting import *
@ -722,7 +722,8 @@ def datachuli(df_zhibiaoshuju,df_zhibiaoliebiao,datecol='date',end_time='',y='y'
# 按月取样 # 按月取样
df = df.resample('M', on='ds').mean().reset_index() df = df.resample('M', on='ds').mean().reset_index()
# 删除预测列空值的行 # 删除预测列空值的行
df = df.dropna(subset=['y']) ''' 工作日缺失,如果删除,会影响预测结果,导致统计准确率出错 '''
# df = df.dropna(subset=['y'])
logger.info(f'删除预测列为空值的行后数据量:{df.shape}') logger.info(f'删除预测列为空值的行后数据量:{df.shape}')
df = df.dropna(axis=1, how='all') df = df.dropna(axis=1, how='all')
logger.info(f'删除全为空值的列后数据量:{df.shape}') logger.info(f'删除全为空值的列后数据量:{df.shape}')

View File

@ -284,15 +284,15 @@ def predict_main():
file=max(glob.glob(os.path.join(dataset,'*.pdf')), key=os.path.getctime), file=max(glob.glob(os.path.join(dataset,'*.pdf')), key=os.path.getctime),
ssl=ssl, ssl=ssl,
) )
m.send_mail() # m.send_mail()
if __name__ == '__main__': if __name__ == '__main__':
# global end_time global end_time
# is_on = True is_on = True
# # 遍历2024-11-25 到 2024-12-3 之间的工作日日期 # 遍历2024-11-25 到 2024-12-3 之间的工作日日期
# for i_time in pd.date_range('2024-12-27', '2024-12-28', freq='B'): for i_time in pd.date_range('2024-10-7', '2024-10-30', freq='B'):
# end_time = i_time.strftime('%Y-%m-%d') end_time = i_time.strftime('%Y-%m-%d')
# predict_main()
predict_main() predict_main()
# predict_main()

View File

@ -889,7 +889,7 @@ def model_losss(sqlitedb,end_time):
# df['ACCURACY'] = df.apply(is_within_range, axis=1) # df['ACCURACY'] = df.apply(is_within_range, axis=1)
# 计算准确率并保存结果 # 计算准确率并保存结果
def _get_accuracy_rate(df,create_dates,ds_dates,endtime): def _get_accuracy_rate(df,create_dates,ds_dates):
df3 = df.copy() df3 = df.copy()
df3 = df3[df3['CREAT_DATE'].isin(create_dates)] df3 = df3[df3['CREAT_DATE'].isin(create_dates)]
df3 = df3[df3['ds'].isin(ds_dates)] df3 = df3[df3['ds'].isin(ds_dates)]
@ -901,7 +901,7 @@ def model_losss(sqlitedb,end_time):
df4.loc[len(df4)] = {'开始日期':ds_dates[0],'结束日期':ds_dates[-1],'准确率':accuracy_rote} df4.loc[len(df4)] = {'开始日期':ds_dates[0],'结束日期':ds_dates[-1],'准确率':accuracy_rote}
df4.to_sql("accuracy_rote", con=sqlitedb.connection, if_exists='append', index=False) df4.to_sql("accuracy_rote", con=sqlitedb.connection, if_exists='append', index=False)
create_dates,ds_dates = get_week_date(end_time) create_dates,ds_dates = get_week_date(end_time)
_get_accuracy_rate(df,create_dates,ds_dates,end_time) _get_accuracy_rate(df,create_dates,ds_dates)
def _add_abs_error_rate(): def _add_abs_error_rate():
# 计算每个预测值与真实值之间的偏差率 # 计算每个预测值与真实值之间的偏差率
@ -941,6 +941,9 @@ def model_losss(sqlitedb,end_time):
df = df[-lens:] # 取180个数据点画图 df = df[-lens:] # 取180个数据点画图
# 历史价格 # 历史价格
plt.figure(figsize=(20, 10)) plt.figure(figsize=(20, 10))
# 时间格式更改
df['ds'] = pd.to_datetime(df['ds'])
plt.plot(df['ds'], df['y'], label='真实值') plt.plot(df['ds'], df['y'], label='真实值')
# 颜色填充 # 颜色填充
plt.fill_between(df['ds'], df['max_within_quantile'], df['min_within_quantile'], alpha=0.2) plt.fill_between(df['ds'], df['max_within_quantile'], df['min_within_quantile'], alpha=0.2)
@ -962,6 +965,11 @@ def model_losss(sqlitedb,end_time):
plt.axvline(x=df['ds'].iloc[-horizon], color='r', linestyle='--') plt.axvline(x=df['ds'].iloc[-horizon], color='r', linestyle='--')
plt.legend() plt.legend()
plt.xlabel('日期') plt.xlabel('日期')
# 设置横轴日期格式为年-月-日
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
# 自动设置横轴日期显示
plt.gca().xaxis.set_major_locator(mdates.AutoDateLocator())
plt.xticks(rotation=45) # 日期标签旋转45度防止重叠
plt.ylabel('价格') plt.ylabel('价格')
plt.savefig(os.path.join(dataset,'历史价格-预测值.png'), bbox_inches='tight') plt.savefig(os.path.join(dataset,'历史价格-预测值.png'), bbox_inches='tight')
@ -969,6 +977,7 @@ def model_losss(sqlitedb,end_time):
def _plt_modeltopten_predict_ture(df): def _plt_modeltopten_predict_ture(df):
df['ds'] = pd.to_datetime(df['ds'])
df['max_cutoff'] = df.groupby('ds')['CREAT_DATE'].transform('max') df['max_cutoff'] = df.groupby('ds')['CREAT_DATE'].transform('max')
df = df[df['CREAT_DATE'] == df['max_cutoff']] df = df[df['CREAT_DATE'] == df['max_cutoff']]
df['mean'] = df['mean'].astype(float) df['mean'] = df['mean'].astype(float)
@ -996,6 +1005,10 @@ def model_losss(sqlitedb,end_time):
plt.axvline(x=df['ds'].iloc[-horizon], color='r', linestyle='--') plt.axvline(x=df['ds'].iloc[-horizon], color='r', linestyle='--')
plt.legend() plt.legend()
plt.xlabel('日期') plt.xlabel('日期')
# 自动设置横轴日期显示
plt.gca().xaxis.set_major_locator(mdates.AutoDateLocator())
plt.xticks(rotation=45) # 日期标签旋转45度防止重叠
plt.ylabel('价格') plt.ylabel('价格')
plt.savefig(os.path.join(dataset,'历史价格-预测值1.png'), bbox_inches='tight') plt.savefig(os.path.join(dataset,'历史价格-预测值1.png'), bbox_inches='tight')
@ -1367,7 +1380,7 @@ def brent_export_pdf(num_indicators=475,num_models=21, num_dayindicator=202,inpu
### 添加标题 ### 添加标题
content.append(Graphs.draw_title(f'{y}{end_time}预测报告')) content.append(Graphs.draw_title(f'{y}{time}预测报告'))
### 预测结果 ### 预测结果
content.append(Graphs.draw_little_title('一、预测结果:')) content.append(Graphs.draw_little_title('一、预测结果:'))