diff --git a/各地级市日电量模型/jinhua.bin b/各地级市日电量模型/jinhua.bin index 9ed8192..61e2fe0 100644 Binary files a/各地级市日电量模型/jinhua.bin and b/各地级市日电量模型/jinhua.bin differ diff --git a/各地级市日电量模型/丽水.py b/各地级市日电量模型/丽水.py index 33dce7a..e536fa7 100644 --- a/各地级市日电量模型/丽水.py +++ b/各地级市日电量模型/丽水.py @@ -49,7 +49,7 @@ data['season'] = data.index.map(season) df_eval = data.loc['2023-10'] # df_train = data.loc['2021-1':'2023-8'] df_train = data[450:-1] - +# df_train = data.loc['2022-4':'2023-9'][:-3] df_train = df_train[['tem_max','tem_min','holiday','24ST','售电量','season']] X = df_train[['tem_max','tem_min','24ST','holiday','season']] @@ -85,7 +85,7 @@ print(goal2) # with open(r'C:\Users\user\Desktop\9月各地市日电量预测结果\偏差率.txt','a',encoding='utf-8') as f: # f.write(f'丽水月末3天偏差率:{goal},9号-月底偏差率:{goal2}') # # 保存模型 -model.save_model('lishui.bin') +# model.save_model('lishui.bin') import numpy as np loaded_model = xgb.XGBRegressor() loaded_model.load_model('lishui.bin') diff --git a/各地级市日电量模型/台州.py b/各地级市日电量模型/台州.py index 75ffc96..3ae6660 100644 --- a/各地级市日电量模型/台州.py +++ b/各地级市日电量模型/台州.py @@ -40,10 +40,12 @@ data = data.loc[normal(data['售电量']).index] # print(list0,list1,list2) data['season'] = data.index.map(season) - +# data = data.loc[:'2023-9'] df_eval = data.loc['2023-10'] df_train = data[500:-1] +# df_train = data[500:][:-3] +print(df_train) df_train = df_train[['tem_max','tem_min','holiday','24ST','售电量','season']] @@ -79,7 +81,7 @@ print(result_eval) # print(best_i,best_goal) # 保存模型 -# model.save_model('taizhou.bin') +model.save_model('taizhou.bin') import numpy as np loaded_model = xgb.XGBRegressor() loaded_model.load_model('taizhou.bin') diff --git a/各地级市日电量模型/嘉兴.py b/各地级市日电量模型/嘉兴.py index 5023762..78e5f86 100644 --- a/各地级市日电量模型/嘉兴.py +++ b/各地级市日电量模型/嘉兴.py @@ -40,11 +40,11 @@ data = data.loc[normal(data['售电量']).index] # list1.append(i) # print(list0,list1,list2) data['season'] = data.index.map(season) - +# data = data.loc[:'2023-9'] df_eval = data.loc['2023-10'] df_train = data.iloc[450:-1] -# df_train = data.loc['2021-01':'2023-07'] - +# df_train = data[450:][:-3] +print(df_train) df_train = df_train[['tem_max','tem_min','holiday','24ST','售电量','season']] @@ -83,7 +83,7 @@ print(result_eval) # print(best_i,best_goal,x) # 保存模型 -# model.save_model('jiaxing.bin') +model.save_model('jiaxing.bin') loaded_model = xgb.XGBRegressor() loaded_model.load_model('jiaxing.bin') import numpy as np diff --git a/各地级市日电量模型/宁波.py b/各地级市日电量模型/宁波.py index dc29ffc..1be7cd3 100644 --- a/各地级市日电量模型/宁波.py +++ b/各地级市日电量模型/宁波.py @@ -41,8 +41,8 @@ data = data.loc[normal(data['售电量']).index] data['season'] = data.index.map(season) df_eval = data.loc['2023-10'] -# df_train = data.loc['2021-01':'2023-08'] -# df_train = data[450:900] +# df_train = data.loc['2022-01':'2023-09'][:-3] + df_train = data.loc['2022-01':'2023-10'][:-1] diff --git a/各地级市日电量模型/杭州.py b/各地级市日电量模型/杭州.py index cb57f7b..95adec6 100644 --- a/各地级市日电量模型/杭州.py +++ b/各地级市日电量模型/杭州.py @@ -48,13 +48,12 @@ data = data.loc[normal(data['售电量']).index] # data['month'] = data.index.strftime('%Y-%m-%d').str[6] # data['month'] = data['month'].astype('int') data['season'] = data.index.map(season) - - +# data = data.loc[:'2023-9'] df_train = data[500:-1] - -# df_train = data.loc['2021-01':'2023-08'] +# df_train = data[500:][:-3] df_eval = data.loc['2023-10'] +print(df_train) X = df_train[['tem_max','tem_min','24ST','holiday','season']] X_eval = df_eval[['tem_max','tem_min','24ST','holiday','season']] y = df_train['售电量'] @@ -96,7 +95,7 @@ print('r2:',r2_score(y_test,y_pred)) # # with open(r'C:\Users\user\Desktop\9月各地市日电量预测结果\偏差率.txt','a',encoding='utf-8') as f: # # f.write(f'杭州月末3天偏差率:{round(goal,5)},9号-月底偏差率:{round(goal2,5)}\n') # 保存模型 -# model.save_model('hangzhou.bin') +model.save_model('hangzhou.bin') # X_eval = df_eval[['tem_max','tem_min','24ST','holiday','season']] # df_eval = pd.read_excel(r'C:\Users\user\Desktop\浙江气象1027.xlsx') diff --git a/各地级市日电量模型/温州.py b/各地级市日电量模型/温州.py index 0ff0457..ad2a1f5 100644 --- a/各地级市日电量模型/温州.py +++ b/各地级市日电量模型/温州.py @@ -42,15 +42,15 @@ data = data.loc[normal(data['售电量']).index] # print(list0,list1,list2) data['season'] = data.index.map(season) - +# data = data.loc[:'2023-8'] df_eval = data.loc['2023-10'] -# df_train = data.loc['2021-1':'2023-8'] -df_train = data[450:-1] +df_train = data[450:-1] +# df_train = data[450:][:-3] +print(df_train) df_train = df_train[['tem_max','tem_min','holiday','24ST','售电量','season']] - X = df_train[['tem_max','tem_min','24ST','holiday','season']] X_eval = df_eval[['tem_max','tem_min','24ST','holiday','season']] y = df_train['售电量'] @@ -77,14 +77,14 @@ print(goal) goal2 = (result_eval['eval'][-23:].sum()-result_eval['pred'][-23:].sum())/result_eval['eval'].sum() print(goal2) - +print(result_eval) # if abs(goal) < best_goal : # best_goal = abs(goal) # best_i['best_i'] = i # x = goal2 # print(best_i,best_goal,x) # 保存模型 -# model.save_model('wenzhou.bin') +model.save_model('wenzhou.bin') loaded_model = xgb.XGBRegressor() diff --git a/各地级市日电量模型/湖州.py b/各地级市日电量模型/湖州.py index c0baf1c..7edc090 100644 --- a/各地级市日电量模型/湖州.py +++ b/各地级市日电量模型/湖州.py @@ -43,10 +43,12 @@ data = data.loc[normal(data['售电量']).index] # print(list0,list1,list2) data['season'] = data.index.map(season) - +# data = data.loc[:'2023-9'] df_eval = data.loc['2023-10'] -# df_train = data.loc['2022-6':'2023-8'] + df_train = data[450:-1] +# df_train = data[450:][:-3] +print(df_train) df_train = df_train[['tem_max','tem_min','holiday','24ST','售电量','season']] @@ -74,7 +76,7 @@ goal2 = (result_eval['eval'][-23:].sum()-result_eval['pred'][-23:].sum())/result print(goal2) print(result_eval) # 保存模型 -# model.save_model('huzhou.bin') +model.save_model('huzhou.bin') loaded_model = xgb.XGBRegressor() loaded_model.load_model('huzhou.bin') import numpy as np diff --git a/各地级市日电量模型/绍兴.py b/各地级市日电量模型/绍兴.py index 204b9d5..a192be4 100644 --- a/各地级市日电量模型/绍兴.py +++ b/各地级市日电量模型/绍兴.py @@ -43,15 +43,14 @@ data = data.loc[normal(data['售电量']).index] data['season'] = data.index.map(season) df_eval = data.loc['2023-10'] -# df_train = data.loc['2021-1':'2023-8'] +# data = data.loc[:'2023-8'] df_train = data[450:-1] -print(len(df_eval),len(df_train),len(data)) +# df_train = data[450:][:-3] +print(df_train) df_train = df_train[['tem_max','tem_min','holiday','24ST','售电量','season']] - - X = df_train[['tem_max','tem_min','24ST','holiday','season']] X_eval = df_eval[['tem_max','tem_min','24ST','holiday','season']] y = df_train['售电量'] @@ -86,7 +85,7 @@ print(goal2) # print(best_i,best_goal,x) print(result_eval) # 保存模型 -# model.save_model('shaoxing.bin') +model.save_model('shaoxing.bin') loaded_model = xgb.XGBRegressor() loaded_model.load_model('shaoxing.bin') import numpy as np diff --git a/各地级市日电量模型/舟山.py b/各地级市日电量模型/舟山.py index 8a20d02..c94bbe9 100644 --- a/各地级市日电量模型/舟山.py +++ b/各地级市日电量模型/舟山.py @@ -42,8 +42,9 @@ data = data.loc[normal(data['售电量']).index] data['season'] = data.index.map(season) df_eval = data.loc['2023-10'] -# df_train = data.loc['2021-1':'2023-8'] +# data = data.loc[:'2023-8'] df_train = data.iloc[450:-1] +# df_train = data.iloc[450:][:-3] df_train = df_train[['tem_max','tem_min','holiday','24ST','售电量','season']] X = df_train[['tem_max','tem_min','24ST','holiday','season']] diff --git a/各地级市日电量模型/衢州.py b/各地级市日电量模型/衢州.py index d79eb16..dc5314c 100644 --- a/各地级市日电量模型/衢州.py +++ b/各地级市日电量模型/衢州.py @@ -39,10 +39,11 @@ data = data.loc[normal(data['售电量']).index] # # print(list0,list1,list2) data['season'] = data.index.map(season) - +# data = data.loc[:'2023-8'] df_eval = data.loc['2023-10'] df_train = data.iloc[450:-1] +# df_train = data.iloc[450:-3] df_train = df_train[['tem_max','tem_min','holiday','24ST','售电量','season']] @@ -68,7 +69,7 @@ goal2 = (result_eval['eval'][-23:].sum()-result_eval['pred'][-23:].sum())/result print(goal2) print(result_eval) # 保存模型 -# model.save_model('quzhou.bin') +model.save_model('quzhou.bin') loaded_model = xgb.XGBRegressor() loaded_model.load_model('quzhou.bin') import numpy as np @@ -79,7 +80,6 @@ X_eval = np.array([[23.69,16.5,23,1,0], print(model.predict(X_eval)) - # import torch # from torch import nn # from torch.utils.data import TensorDataset,DataLoader diff --git a/各地级市日电量模型/金华.py b/各地级市日电量模型/金华.py index 6ebc109..1cb6eb8 100644 --- a/各地级市日电量模型/金华.py +++ b/各地级市日电量模型/金华.py @@ -41,9 +41,12 @@ data = data.loc[normal(data['售电量']).index] # print(list0,list1,list2) data['season'] = data.index.map(season) -df_eval = data.loc['2023-10'] -# df_train = data.loc['2021-01':'2023-10'][:-3] -df_train = data.iloc[450:-1] +data = data.loc[:'2023-9'] +df_eval = data.loc['2023-9'] + +# df_train = data.iloc[450:-1] +df_train = data.iloc[450:-3] +print(df_train) df_train = df_train[['tem_max','tem_min','holiday','24ST','售电量','season']] @@ -81,7 +84,7 @@ print(result_eval) # x = goal2 # # 保存模型 -# model.save_model('jinhua.bin') +model.save_model('jinhua.bin') loaded_model = xgb.XGBRegressor() loaded_model.load_model('jinhua.bin') import numpy as np diff --git a/江苏年度电量/X12-ARIMA.py b/江苏年度电量/X12-ARIMA.py new file mode 100644 index 0000000..66c005e --- /dev/null +++ b/江苏年度电量/X12-ARIMA.py @@ -0,0 +1,19 @@ +from statsmodels.tsa.x13 import x13_arima_analysis +import pandas as pd +import os +# 读取时间序列数据 +data = pd.read_excel('./江苏省日电量数据.xlsx', index_col='pt_date', parse_dates=True) +data = data['power_sal'] + +# 调用X12-ARIMA模型进行季节性调整和预测 +result = x13_arima_analysis(data) + +# 输出调整后的时间序列数据 +adjusted_data = result.seasadj + +# 输出预测结果 +forecasts = result.forecasts + +# 打印结果 +print(adjusted_data) +print(forecasts) \ No newline at end of file diff --git a/江苏年度电量/江苏省日电量数据.xlsx b/江苏年度电量/江苏省日电量数据.xlsx new file mode 100644 index 0000000..d672fdf Binary files /dev/null and b/江苏年度电量/江苏省日电量数据.xlsx differ diff --git a/浙江行业电量/浙江各地市行业电量数据/丽水.xlsx b/浙江行业电量/浙江各地市行业电量数据/丽水.xlsx new file mode 100644 index 0000000..1834166 Binary files /dev/null and b/浙江行业电量/浙江各地市行业电量数据/丽水.xlsx differ diff --git a/浙江行业电量/浙江各地市行业电量数据/台州.xlsx b/浙江行业电量/浙江各地市行业电量数据/台州.xlsx new file mode 100644 index 0000000..71f05d8 Binary files /dev/null and b/浙江行业电量/浙江各地市行业电量数据/台州.xlsx differ diff --git a/浙江行业电量/浙江各地市行业电量数据/嘉兴.xlsx b/浙江行业电量/浙江各地市行业电量数据/嘉兴.xlsx new file mode 100644 index 0000000..50d9ea1 Binary files /dev/null and b/浙江行业电量/浙江各地市行业电量数据/嘉兴.xlsx differ diff --git a/浙江行业电量/浙江各地市行业电量数据/宁波.xlsx b/浙江行业电量/浙江各地市行业电量数据/宁波.xlsx new file mode 100644 index 0000000..9a38dd2 Binary files /dev/null and b/浙江行业电量/浙江各地市行业电量数据/宁波.xlsx differ diff --git a/浙江行业电量/浙江各地市行业电量数据/杭州.xlsx b/浙江行业电量/浙江各地市行业电量数据/杭州.xlsx new file mode 100644 index 0000000..c9e6792 Binary files /dev/null and b/浙江行业电量/浙江各地市行业电量数据/杭州.xlsx differ diff --git a/浙江行业电量/浙江各地市行业电量数据/温州.xlsx b/浙江行业电量/浙江各地市行业电量数据/温州.xlsx new file mode 100644 index 0000000..ed1ac87 Binary files /dev/null and b/浙江行业电量/浙江各地市行业电量数据/温州.xlsx differ diff --git a/浙江行业电量/浙江各地市行业电量数据/湖州.xlsx b/浙江行业电量/浙江各地市行业电量数据/湖州.xlsx new file mode 100644 index 0000000..2d26a62 Binary files /dev/null and b/浙江行业电量/浙江各地市行业电量数据/湖州.xlsx differ diff --git a/浙江行业电量/浙江各地市行业电量数据/绍兴.xlsx b/浙江行业电量/浙江各地市行业电量数据/绍兴.xlsx new file mode 100644 index 0000000..9593a4d Binary files /dev/null and b/浙江行业电量/浙江各地市行业电量数据/绍兴.xlsx differ diff --git a/浙江行业电量/浙江各地市行业电量数据/舟山.xlsx b/浙江行业电量/浙江各地市行业电量数据/舟山.xlsx new file mode 100644 index 0000000..e28876c Binary files /dev/null and b/浙江行业电量/浙江各地市行业电量数据/舟山.xlsx differ diff --git a/浙江行业电量/浙江各地市行业电量数据/衢州.xlsx b/浙江行业电量/浙江各地市行业电量数据/衢州.xlsx new file mode 100644 index 0000000..863b296 Binary files /dev/null and b/浙江行业电量/浙江各地市行业电量数据/衢州.xlsx differ diff --git a/浙江行业电量/浙江各地市行业电量数据/金华.xlsx b/浙江行业电量/浙江各地市行业电量数据/金华.xlsx new file mode 100644 index 0000000..0c8f2ef Binary files /dev/null and b/浙江行业电量/浙江各地市行业电量数据/金华.xlsx differ diff --git a/浙江行业电量/行业电量_输出为5.py b/浙江行业电量/行业电量_输出为5.py index cbb48c4..9ec210e 100644 --- a/浙江行业电量/行业电量_输出为5.py +++ b/浙江行业电量/行业电量_输出为5.py @@ -3,6 +3,9 @@ import pandas as pd import torch from torch import nn import os +import time +t1 = time.time() + os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" DAYS_FOR_TRAIN = 10 torch.manual_seed(42) @@ -38,8 +41,7 @@ def normal(nd): def data_preprocessing(data): data.columns = data.columns.map(lambda x: x.strip()) - data.index = data.index.map(lambda x:x.strip()) - + data.index = data.index.map(lambda x:str(x).strip()[:10]) data.index = pd.to_datetime(data.index,format='%Y-%m-%d') data.sort_index(inplace=True) data = data.loc['2021-01':'2023-08'] @@ -52,78 +54,78 @@ def data_preprocessing(data): return data # 拼接数据集 -file_dir = r'C:\Users\user\Desktop\浙江各地市行业电量数据' -excel = os.listdir(file_dir)[0] -data = pd.read_excel(os.path.join(file_dir, excel), sheet_name=0, index_col='stat_date') -data.drop(columns='地市',inplace=True) -data = data_preprocessing(data) - -df = data[data.columns[0]] -df.dropna(inplace = True) -dataset_x, dataset_y = create_dataset(df, DAYS_FOR_TRAIN) - -for level in data.columns[1:]: - df = data[level] - df.dropna(inplace=True) - x, y = create_dataset(df, DAYS_FOR_TRAIN) - dataset_x = np.concatenate((dataset_x, x)) - dataset_y = np.concatenate((dataset_y, y)) - - -for excel in os.listdir(file_dir)[1:]: - - data = pd.read_excel(os.path.join(file_dir,excel), sheet_name=0,index_col='stat_date') - data.drop(columns='地市', inplace=True) - data = data_preprocessing(data) - - for level in data.columns: - df = data[level] - df.dropna(inplace=True) - x,y = create_dataset(df,DAYS_FOR_TRAIN) - dataset_x = np.concatenate((dataset_x,x)) - dataset_y = np.concatenate((dataset_y,y)) - - -print(dataset_x.shape,dataset_y.shape) +# file_dir = './浙江各地市行业电量数据' +# excel = os.listdir(file_dir)[0] +# data = pd.read_excel(os.path.join(file_dir, excel), sheet_name=0, index_col='stat_date') +# data.drop(columns='地市',inplace=True) +# data = data_preprocessing(data) +# +# df = data[data.columns[0]] +# df.dropna(inplace = True) +# dataset_x, dataset_y = create_dataset(df, DAYS_FOR_TRAIN) +# +# for level in data.columns[1:]: +# df = data[level] +# df.dropna(inplace=True) +# x, y = create_dataset(df, DAYS_FOR_TRAIN) +# dataset_x = np.concatenate((dataset_x, x)) +# dataset_y = np.concatenate((dataset_y, y)) +# +# +# for excel in os.listdir(file_dir)[1:]: +# +# data = pd.read_excel(os.path.join(file_dir,excel), sheet_name=0,index_col='stat_date') +# data.drop(columns='地市', inplace=True) +# data = data_preprocessing(data) +# +# for level in data.columns: +# df = data[level] +# df.dropna(inplace=True) +# x,y = create_dataset(df,DAYS_FOR_TRAIN) +# dataset_x = np.concatenate((dataset_x,x)) +# dataset_y = np.concatenate((dataset_y,y)) +# +# +# print(dataset_x.shape,dataset_y.shape) # # 训练 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # # # 标准化到0~1 -max_value = np.max(dataset_x) -min_value = np.min(dataset_x) -dataset_x = (dataset_x - min_value) / (max_value - min_value) -dataset_y = (dataset_y - min_value) / (max_value - min_value) -print('max_value:',max_value,'min_value:',min_value) -# 划分训练集和测试集 -train_size = int(len(dataset_x)*0.7) -train_x = dataset_x[:train_size] -train_y = dataset_y[:train_size] - -# # 将数据改变形状,RNN 读入的数据维度是 (seq_size, batch_size, feature_size) -train_x = train_x.reshape(-1, 1, DAYS_FOR_TRAIN) -train_y = train_y.reshape(-1, 1, 5) - -# # 转为pytorch的tensor对象 -train_x = torch.from_numpy(train_x).to(device).type(torch.float32) -train_y = torch.from_numpy(train_y).to(device).type(torch.float32) - +# max_value = np.max(dataset_x) +# min_value = np.min(dataset_x) +# dataset_x = (dataset_x - min_value) / (max_value - min_value) +# dataset_y = (dataset_y - min_value) / (max_value - min_value) +# print('max_value:',max_value,'min_value:',min_value) +# # 划分训练集和测试集 +# train_size = int(len(dataset_x)*0.7) +# train_x = dataset_x[:train_size] +# train_y = dataset_y[:train_size] +# +# # # 将数据改变形状,RNN 读入的数据维度是 (seq_size, batch_size, feature_size) +# train_x = train_x.reshape(-1, 1, DAYS_FOR_TRAIN) +# train_y = train_y.reshape(-1, 1, 5) +# +# # # 转为pytorch的tensor对象 +# train_x = torch.from_numpy(train_x).to(device).type(torch.float32) +# train_y = torch.from_numpy(train_y).to(device).type(torch.float32) +# model = LSTM_Regression(DAYS_FOR_TRAIN, 32, output_size=5, num_layers=2).to(device) # 导入模型并设置模型的参数输入输出层、隐藏层等 - -train_loss = [] -loss_function = nn.MSELoss() -optimizer = torch.optim.Adam(model.parameters(), lr=0.005, betas=(0.9, 0.999), eps=1e-08, weight_decay=0) -for i in range(1500): - out = model(train_x) - loss = loss_function(out, train_y) - loss.backward() - optimizer.step() - optimizer.zero_grad() - train_loss.append(loss.item()) - if i % 100 == 0: - print(f'epoch {i+1}: loss:{loss}') - -# 保存/读取模型 -torch.save(model.state_dict(),'hy5.pth') +# +# train_loss = [] +# loss_function = nn.MSELoss() +# optimizer = torch.optim.Adam(model.parameters(), lr=0.005, betas=(0.9, 0.999), eps=1e-08, weight_decay=0) +# for i in range(1500): +# out = model(train_x) +# loss = loss_function(out, train_y) +# loss.backward() +# optimizer.step() +# optimizer.zero_grad() +# train_loss.append(loss.item()) +# if i % 100 == 0: +# print(f'epoch {i+1}: loss:{loss}') +# +# # 保存/读取模型 +# torch.save(model.state_dict(),'hy5.pth') # model.load_state_dict(torch.load('hy5.pth')) # # for test @@ -148,7 +150,7 @@ max_value = 354024930.8 min_value = 0.0 # 创建测试集 -file_dir = r'C:\Users\鸽子\Desktop\浙江各地市行业电量数据' +file_dir = './浙江各地市行业电量数据' for excel in os.listdir(file_dir): df_city = pd.read_excel(os.path.join(file_dir,excel)) city = df_city['地市'].iloc[0] @@ -164,7 +166,8 @@ for excel in os.listdir(file_dir): result = pred.detach().numpy()[-5:-2] result_dict[industry] = list(result) df = pd.DataFrame(result_dict,index=['2023-10-29','2023-10-30','2023-10-31']) - df.to_excel(fr'C:\Users\鸽子\Desktop\行业电量预测29-31\{city}.xlsx') + # df.to_excel(fr'./行业电量预测29-31/{city}.xlsx') +print(time.time()-t1) print(result_dict) # 反归一化