forked from EEBD_AI/wgz_forecast
增加carbon、water、load
This commit is contained in:
parent
61cfdc304f
commit
89dcac3729
|
@ -0,0 +1,24 @@
|
|||
import joblib
|
||||
import numpy as np
|
||||
|
||||
|
||||
def load_carbon_model(path):
|
||||
gbm = joblib.load(path)
|
||||
return gbm
|
||||
def carbon_forecast(inputs: np.ndarray, model):
|
||||
"""_summary_
|
||||
|
||||
Args:
|
||||
inputs (np.ndarray): 输入序列
|
||||
model (_type_): _description_
|
||||
"""
|
||||
out = model.predict([inputs])
|
||||
return out
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
model = load_carbon_model('./models/carbon_pred.joblib')
|
||||
inputs = np.random.randn(24)
|
||||
print(inputs.shape)
|
||||
out = carbon_forecast(inputs, model)
|
||||
print(out)
|
|
@ -0,0 +1,67 @@
|
|||
import pandas as pd
|
||||
import numpy as np
|
||||
import xgboost as xgb
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.metrics import mean_squared_error, r2_score
|
||||
import joblib
|
||||
from logzero import logger
|
||||
|
||||
def time_series_to_supervised(data, columns, n_in=24, n_out=1,dropnan=True):
|
||||
"""
|
||||
:param data:作为列表或2D NumPy数组的观察序列。需要。
|
||||
:param n_in:作为输入的滞后观察数(X)。值可以在[1..len(数据)]之间可选。默认为1。
|
||||
:param n_out:作为输出的观测数量(y)。值可以在[0..len(数据)]之间。可选的。默认为1。
|
||||
:param dropnan:Boolean是否删除具有NaN值的行。可选的。默认为True。
|
||||
:return:
|
||||
"""
|
||||
logger.info(f"正在处理训练数据:size:{data.shape}")
|
||||
n_vars = 1 if type(data) is list else data.shape[1]
|
||||
df = pd.DataFrame(data)
|
||||
origNames = columns
|
||||
cols, names = list(), list()
|
||||
cols.append(df.shift(0))
|
||||
names += [('%s' % origNames[j]) for j in range(n_vars)]
|
||||
n_in = max(1, n_in)
|
||||
for i in range(n_in-1, 0, -1):
|
||||
time = '(t-%d)' % i
|
||||
cols.append(df.shift(i))
|
||||
names += [('%s%s' % (origNames[j], time)) for j in range(n_vars)]
|
||||
n_out = max(n_out, 0)
|
||||
for i in range(1, n_out+1):
|
||||
time = '(t+%d)' % i
|
||||
cols.append(df.shift(-i))
|
||||
names += [('%s%s' % (origNames[j], time)) for j in range(n_vars)]
|
||||
agg = pd.concat(cols, axis=1)
|
||||
agg.columns = names
|
||||
if dropnan:
|
||||
agg.dropna(inplace=True)
|
||||
return agg
|
||||
|
||||
def train_model(train_data: pd.DataFrame):
|
||||
"""训练模型的函数,需要根据模型类型实际调整
|
||||
Args:
|
||||
data (pd.DataFrame): 训练集
|
||||
"""
|
||||
# 特征和输出列名,需要根据业务场景灵活处理
|
||||
fea_cols = train_data.columns[:-1].tolist()
|
||||
out_cols = train_data.columns[-1:].tolist()
|
||||
logger.info(f"特征列: {fea_cols}, 输出列: {out_cols}")
|
||||
X = train_data[fea_cols]
|
||||
y = train_data[out_cols]
|
||||
train_X,test_X,train_y,test_y = train_test_split(X, y, test_size=0.2, random_state=42)
|
||||
valid_X,test_X,valid_y,test_y = train_test_split(test_X, test_y, test_size=0.5, random_state=42)
|
||||
# 参数
|
||||
other_params = {'learning_rate': 0.1, 'n_estimators': 150, 'max_depth': 10, 'min_child_weight': 1, 'seed': 0, 'subsample': 0.8, 'colsample_bytree': 0.8, 'gamma': 0, 'reg_alpha': 0, 'reg_lambda': 1}
|
||||
print(train_X.shape, train_y.shape)
|
||||
gbm = xgb.XGBRegressor(objective='reg:squarederror', early_stopping_rounds=20,**other_params)
|
||||
gbm.fit(train_X.values, train_y.values, eval_set=[(valid_X.values, valid_y.values)])
|
||||
y_pred = gbm.predict(test_X.values)
|
||||
logger.info(f"Root Mean Squared Error on Test set: {np.sqrt(mean_squared_error(test_y, y_pred))}")
|
||||
logger.info(f"R2 score on Test set: {r2_score(test_y, y_pred)}")
|
||||
joblib.dump(gbm, './models/carbon_pred.joblib')
|
||||
logger.info(f"save_path: ./models/carbon_pred.joblib")
|
||||
|
||||
if __name__ == '__main__':
|
||||
data = pd.read_csv('./data/carbon_data_hourly.csv', index_col=0)
|
||||
agg = time_series_to_supervised(data.values, data.columns, 24, 1)
|
||||
train_model(agg)
|
|
@ -0,0 +1,567 @@
|
|||
date,Value
|
||||
2022-01-01 00:00:00,72.076
|
||||
2022-01-01 01:00:00,64.442
|
||||
2022-01-01 02:00:00,64.084
|
||||
2022-01-01 03:00:00,60.842
|
||||
2022-01-01 04:00:00,61.798
|
||||
2022-01-01 05:00:00,66.538
|
||||
2022-01-01 06:00:00,72.626
|
||||
2022-01-01 07:00:00,75.181
|
||||
2022-01-01 08:00:00,68.397
|
||||
2022-01-01 09:00:00,67.668
|
||||
2022-01-01 10:00:00,67.021
|
||||
2022-01-01 11:00:00,71.118
|
||||
2022-01-01 12:00:00,811.791
|
||||
2022-01-01 13:00:00,70.55
|
||||
2022-01-01 14:00:00,62.929
|
||||
2022-01-01 15:00:00,64.519
|
||||
2022-01-01 16:00:00,60.544
|
||||
2022-01-01 17:00:00,64.687
|
||||
2022-01-01 18:00:00,64.736
|
||||
2022-01-01 19:00:00,73.698
|
||||
2022-01-01 20:00:00,72.559
|
||||
2022-01-01 21:00:00,63.221
|
||||
2022-01-01 22:00:00,65.418
|
||||
2022-01-01 23:00:00,65.593
|
||||
2022-01-02 00:00:00,71.677
|
||||
2022-01-02 01:00:00,800.131
|
||||
2022-01-02 02:00:00,72.708
|
||||
2022-01-02 03:00:00,65.117
|
||||
2022-01-02 04:00:00,66.532
|
||||
2022-01-02 05:00:00,61.975
|
||||
2022-01-02 06:00:00,62.031
|
||||
2022-01-02 07:00:00,67.875
|
||||
2022-01-02 08:00:00,74.184
|
||||
2022-01-02 09:00:00,77.029
|
||||
2022-01-02 10:00:00,66.156
|
||||
2022-01-02 11:00:00,66.651
|
||||
2022-01-02 12:00:00,67.625
|
||||
2022-01-02 13:00:00,75.857
|
||||
2022-01-02 14:00:00,823.74
|
||||
2022-01-02 15:00:00,81.264
|
||||
2022-01-02 16:00:00,71.058
|
||||
2022-01-02 17:00:00,73.361
|
||||
2022-01-02 18:00:00,68.703
|
||||
2022-01-02 19:00:00,68.985
|
||||
2022-01-02 20:00:00,73.936
|
||||
2022-01-02 21:00:00,80.968
|
||||
2022-01-02 22:00:00,81.962
|
||||
2022-01-02 23:00:00,72.95
|
||||
2022-01-03 00:00:00,74.746
|
||||
2022-01-03 01:00:00,78.924
|
||||
2022-01-03 02:00:00,84.49
|
||||
2022-01-03 03:00:00,911.346
|
||||
2022-01-03 04:00:00,87.215
|
||||
2022-01-03 05:00:00,75.943
|
||||
2022-01-03 06:00:00,75.092
|
||||
2022-01-03 07:00:00,68.641
|
||||
2022-01-03 08:00:00,74.916
|
||||
2022-01-03 09:00:00,80.942
|
||||
2022-01-03 10:00:00,90.667
|
||||
2022-01-03 11:00:00,89.046
|
||||
2022-01-03 12:00:00,80.975
|
||||
2022-01-03 13:00:00,77.369
|
||||
2022-01-03 14:00:00,78.058
|
||||
2022-01-03 15:00:00,83.279
|
||||
2022-01-03 16:00:00,962.143
|
||||
2022-01-03 17:00:00,85.191
|
||||
2022-01-03 18:00:00,71.476
|
||||
2022-01-03 19:00:00,67.829
|
||||
2022-01-03 20:00:00,69.051
|
||||
2022-01-03 21:00:00,74.201
|
||||
2022-01-03 22:00:00,81.372
|
||||
2022-01-03 23:00:00,88.003
|
||||
2022-01-04 00:00:00,91.836
|
||||
2022-01-04 01:00:00,85.066
|
||||
2022-01-04 02:00:00,79.494
|
||||
2022-01-04 03:00:00,79.291
|
||||
2022-01-04 04:00:00,87.107
|
||||
2022-01-04 05:00:00,959.916
|
||||
2022-01-04 06:00:00,93.946
|
||||
2022-01-04 07:00:00,83.91
|
||||
2022-01-04 08:00:00,83.689
|
||||
2022-01-04 09:00:00,78.077
|
||||
2022-01-04 10:00:00,83.19
|
||||
2022-01-04 11:00:00,88.15
|
||||
2022-01-04 12:00:00,96.579
|
||||
2022-01-04 13:00:00,97.246
|
||||
2022-01-04 14:00:00,84.463
|
||||
2022-01-04 15:00:00,86.071
|
||||
2022-01-04 16:00:00,86.09
|
||||
2022-01-04 17:00:00,94.293
|
||||
2022-01-04 18:00:00,1055.704
|
||||
2022-01-04 19:00:00,100.568
|
||||
2022-01-04 20:00:00,94.862
|
||||
2022-01-04 21:00:00,93.21
|
||||
2022-01-04 22:00:00,81.245
|
||||
2022-01-04 23:00:00,82.785
|
||||
2022-01-05 00:00:00,91.484
|
||||
2022-01-05 01:00:00,107.126
|
||||
2022-01-05 02:00:00,106.245
|
||||
2022-01-05 03:00:00,95.662
|
||||
2022-01-05 04:00:00,90.03
|
||||
2022-01-05 05:00:00,91.239
|
||||
2022-01-05 06:00:00,102.138
|
||||
2022-01-05 07:00:00,1136.594
|
||||
2022-01-05 08:00:00,108.164
|
||||
2022-01-05 09:00:00,94.766
|
||||
2022-01-05 10:00:00,95.724
|
||||
2022-01-05 11:00:00,86.386
|
||||
2022-01-05 12:00:00,89.002
|
||||
2022-01-05 13:00:00,99.05
|
||||
2022-01-05 14:00:00,111.044
|
||||
2022-01-05 15:00:00,107.758
|
||||
2022-01-05 16:00:00,95.891
|
||||
2022-01-05 17:00:00,94.541
|
||||
2022-01-05 18:00:00,92.986
|
||||
2022-01-05 19:00:00,105.056
|
||||
2022-01-05 20:00:00,1180.367
|
||||
2022-01-05 21:00:00,113.136
|
||||
2022-01-05 22:00:00,97.313
|
||||
2022-01-05 23:00:00,95.335
|
||||
2022-01-06 00:00:00,86.587
|
||||
2022-01-06 01:00:00,90.83
|
||||
2022-01-06 02:00:00,94.419
|
||||
2022-01-06 03:00:00,109.995
|
||||
2022-01-06 04:00:00,109.179
|
||||
2022-01-06 05:00:00,96.39
|
||||
2022-01-06 06:00:00,92.24
|
||||
2022-01-06 07:00:00,95.165
|
||||
2022-01-06 08:00:00,101.367
|
||||
2022-01-06 09:00:00,1181.956
|
||||
2022-01-06 10:00:00,105.965
|
||||
2022-01-06 11:00:00,90.912
|
||||
2022-01-06 12:00:00,93.568
|
||||
2022-01-06 13:00:00,86.575
|
||||
2022-01-06 14:00:00,90.75
|
||||
2022-01-06 15:00:00,99.98
|
||||
2022-01-06 16:00:00,119.945
|
||||
2022-01-06 17:00:00,126.652
|
||||
2022-01-06 18:00:00,107.675
|
||||
2022-01-06 19:00:00,100.677
|
||||
2022-01-06 20:00:00,101.663
|
||||
2022-01-06 21:00:00,117.417
|
||||
2022-01-06 22:00:00,1241.778
|
||||
2022-01-06 23:00:00,119.436
|
||||
2022-01-07 00:00:00,103.635
|
||||
2022-01-07 01:00:00,108.149
|
||||
2022-01-07 02:00:00,94.329
|
||||
2022-01-07 03:00:00,98.181
|
||||
2022-01-07 04:00:00,112.983
|
||||
2022-01-07 05:00:00,119.701
|
||||
2022-01-07 06:00:00,125.724
|
||||
2022-01-07 07:00:00,107.179
|
||||
2022-01-07 08:00:00,108.583
|
||||
2022-01-07 09:00:00,107.546
|
||||
2022-01-07 10:00:00,112.167
|
||||
2022-01-07 11:00:00,1317.614
|
||||
2022-01-07 12:00:00,125.429
|
||||
2022-01-07 13:00:00,109.359
|
||||
2022-01-07 14:00:00,107.966
|
||||
2022-01-07 15:00:00,100.317
|
||||
2022-01-07 16:00:00,107.595
|
||||
2022-01-07 17:00:00,113.584
|
||||
2022-01-07 18:00:00,126.626
|
||||
2022-01-07 19:00:00,124.309
|
||||
2022-01-07 20:00:00,111.9
|
||||
2022-01-07 21:00:00,108.331
|
||||
2022-01-07 22:00:00,107.034
|
||||
2022-01-07 23:00:00,124.95
|
||||
2022-01-08 00:00:00,1367.401
|
||||
2022-01-08 01:00:00,126.887
|
||||
2022-01-08 02:00:00,109.086
|
||||
2022-01-08 03:00:00,106.803
|
||||
2022-01-08 04:00:00,95.341
|
||||
2022-01-08 05:00:00,101.892
|
||||
2022-01-08 06:00:00,116.698
|
||||
2022-01-08 07:00:00,134.789
|
||||
2022-01-08 08:00:00,122.28
|
||||
2022-01-08 09:00:00,112.03
|
||||
2022-01-08 10:00:00,107.235
|
||||
2022-01-08 11:00:00,107.317
|
||||
2022-01-08 12:00:00,117.127
|
||||
2022-01-08 13:00:00,1357.485
|
||||
2022-01-08 14:00:00,124.043
|
||||
2022-01-08 15:00:00,106.754
|
||||
2022-01-08 16:00:00,108.607
|
||||
2022-01-08 17:00:00,102.222
|
||||
2022-01-08 18:00:00,112.257
|
||||
2022-01-08 19:00:00,126.2
|
||||
2022-01-08 20:00:00,140.582
|
||||
2022-01-08 21:00:00,139.268
|
||||
2022-01-08 22:00:00,117.773
|
||||
2022-01-08 23:00:00,113.515
|
||||
2022-01-09 00:00:00,111.217
|
||||
2022-01-09 01:00:00,124.314
|
||||
2022-01-09 02:00:00,1426.753
|
||||
2022-01-09 03:00:00,133.468
|
||||
2022-01-09 04:00:00,120.783
|
||||
2022-01-09 05:00:00,115.584
|
||||
2022-01-09 06:00:00,106.49
|
||||
2022-01-09 07:00:00,111.2
|
||||
2022-01-09 08:00:00,128.537
|
||||
2022-01-09 09:00:00,141.139
|
||||
2022-01-09 10:00:00,148.031
|
||||
2022-01-09 11:00:00,121.057
|
||||
2022-01-09 12:00:00,117.165
|
||||
2022-01-09 13:00:00,116.659
|
||||
2022-01-09 14:00:00,131.695
|
||||
2022-01-09 15:00:00,1491.807
|
||||
2022-01-09 16:00:00,132.233
|
||||
2022-01-09 17:00:00,124.345
|
||||
2022-01-09 18:00:00,122.803
|
||||
2022-01-09 19:00:00,111.194
|
||||
2022-01-09 20:00:00,115.915
|
||||
2022-01-09 21:00:00,126.031
|
||||
2022-01-09 22:00:00,138.083
|
||||
2022-01-09 23:00:00,139.614
|
||||
2022-01-10 00:00:00,124.594
|
||||
2022-01-10 01:00:00,119.943
|
||||
2022-01-10 02:00:00,120.824
|
||||
2022-01-10 03:00:00,143.264
|
||||
2022-01-10 04:00:00,1518.844
|
||||
2022-01-10 05:00:00,132.923
|
||||
2022-01-10 06:00:00,116.26
|
||||
2022-01-10 07:00:00,121.806
|
||||
2022-01-10 08:00:00,115.909
|
||||
2022-01-10 09:00:00,118.556
|
||||
2022-01-10 10:00:00,130.719
|
||||
2022-01-10 11:00:00,143.146
|
||||
2022-01-10 12:00:00,146.257
|
||||
2022-01-10 13:00:00,134.042
|
||||
2022-01-10 14:00:00,128.8
|
||||
2022-01-10 15:00:00,122.119
|
||||
2022-01-10 16:00:00,137.027
|
||||
2022-01-10 17:00:00,1547.564
|
||||
2022-01-10 18:00:00,143.148
|
||||
2022-01-10 19:00:00,117.505
|
||||
2022-01-10 20:00:00,118.823
|
||||
2022-01-10 21:00:00,111.147
|
||||
2022-01-10 22:00:00,122.745
|
||||
2022-01-10 23:00:00,131.945
|
||||
2022-01-11 00:00:00,144.042
|
||||
2022-01-11 01:00:00,144.107
|
||||
2022-01-11 02:00:00,129.099
|
||||
2022-01-11 03:00:00,124.058
|
||||
2022-01-11 04:00:00,127.928
|
||||
2022-01-11 05:00:00,133.633
|
||||
2022-01-11 06:00:00,1548.18
|
||||
2022-01-11 07:00:00,137.39
|
||||
2022-01-11 08:00:00,121.125
|
||||
2022-01-11 09:00:00,126.201
|
||||
2022-01-11 10:00:00,118.33
|
||||
2022-01-11 11:00:00,121.946
|
||||
2022-01-11 12:00:00,129.054
|
||||
2022-01-11 13:00:00,148.563
|
||||
2022-01-11 14:00:00,142.166
|
||||
2022-01-11 15:00:00,132.766
|
||||
2022-01-11 16:00:00,126.405
|
||||
2022-01-11 17:00:00,126.014
|
||||
2022-01-11 18:00:00,139.605
|
||||
2022-01-11 19:00:00,1569.566
|
||||
2022-01-11 20:00:00,139.269
|
||||
2022-01-11 21:00:00,128.056
|
||||
2022-01-11 22:00:00,134.599
|
||||
2022-01-11 23:00:00,119.596
|
||||
2022-01-12 00:00:00,120.469
|
||||
2022-01-12 01:00:00,136.697
|
||||
2022-01-12 02:00:00,157.967
|
||||
2022-01-12 03:00:00,156.392
|
||||
2022-01-12 04:00:00,133.435
|
||||
2022-01-12 05:00:00,130.321
|
||||
2022-01-12 06:00:00,131.799
|
||||
2022-01-12 07:00:00,143.919
|
||||
2022-01-12 08:00:00,1632.52
|
||||
2022-01-12 09:00:00,153.119
|
||||
2022-01-12 10:00:00,131.25
|
||||
2022-01-12 11:00:00,132.54
|
||||
2022-01-12 12:00:00,120.392
|
||||
2022-01-12 13:00:00,126.496
|
||||
2022-01-12 14:00:00,146.639
|
||||
2022-01-12 15:00:00,153.375
|
||||
2022-01-12 16:00:00,151.757
|
||||
2022-01-12 17:00:00,133.235
|
||||
2022-01-12 18:00:00,129.229
|
||||
2022-01-12 19:00:00,124.074
|
||||
2022-01-12 20:00:00,136.675
|
||||
2022-01-12 21:00:00,1638.781
|
||||
2022-01-12 22:00:00,143.097
|
||||
2022-01-12 23:00:00,127.774
|
||||
2022-01-13 00:00:00,127.348
|
||||
2022-01-13 01:00:00,118.414
|
||||
2022-01-13 02:00:00,125.516
|
||||
2022-01-13 03:00:00,138.913
|
||||
2022-01-13 04:00:00,159.638
|
||||
2022-01-13 05:00:00,167.717
|
||||
2022-01-13 06:00:00,137.474
|
||||
2022-01-13 07:00:00,132.871
|
||||
2022-01-13 08:00:00,134.591
|
||||
2022-01-13 09:00:00,147.39
|
||||
2022-01-13 10:00:00,1660.744
|
||||
2022-01-13 11:00:00,153.915
|
||||
2022-01-13 12:00:00,138.446
|
||||
2022-01-13 13:00:00,138.362
|
||||
2022-01-13 14:00:00,124.885
|
||||
2022-01-13 15:00:00,135.014
|
||||
2022-01-13 16:00:00,147.23
|
||||
2022-01-13 17:00:00,160.939
|
||||
2022-01-13 18:00:00,162.998
|
||||
2022-01-13 19:00:00,144.095
|
||||
2022-01-13 20:00:00,143.399
|
||||
2022-01-13 21:00:00,147.318
|
||||
2022-01-13 22:00:00,155.809
|
||||
2022-01-13 23:00:00,1752.41
|
||||
2022-01-14 00:00:00,162.245
|
||||
2022-01-14 01:00:00,135.873
|
||||
2022-01-14 02:00:00,138.495
|
||||
2022-01-14 03:00:00,130.325
|
||||
2022-01-14 04:00:00,136.525
|
||||
2022-01-14 05:00:00,147.624
|
||||
2022-01-14 06:00:00,169.108
|
||||
2022-01-14 07:00:00,164.925
|
||||
2022-01-14 08:00:00,152.353
|
||||
2022-01-14 09:00:00,152.153
|
||||
2022-01-14 10:00:00,146.425
|
||||
2022-01-14 11:00:00,160.993
|
||||
2022-01-14 12:00:00,1797.045
|
||||
2022-01-14 13:00:00,159.602
|
||||
2022-01-14 14:00:00,138.682
|
||||
2022-01-14 15:00:00,144.143
|
||||
2022-01-14 16:00:00,133.418
|
||||
2022-01-14 17:00:00,146.249
|
||||
2022-01-14 18:00:00,158.591
|
||||
2022-01-14 19:00:00,174.995
|
||||
2022-01-14 20:00:00,174.745
|
||||
2022-01-14 21:00:00,156.709
|
||||
2022-01-14 22:00:00,147.334
|
||||
2022-01-14 23:00:00,139.397
|
||||
2022-01-15 00:00:00,154.318
|
||||
2022-01-15 01:00:00,1828.184
|
||||
2022-01-15 02:00:00,161.387
|
||||
2022-01-15 03:00:00,138.081
|
||||
2022-01-15 04:00:00,145.169
|
||||
2022-01-15 05:00:00,137.504
|
||||
2022-01-15 06:00:00,144.891
|
||||
2022-01-15 07:00:00,157.377
|
||||
2022-01-15 08:00:00,179.42
|
||||
2022-01-15 09:00:00,173.707
|
||||
2022-01-15 10:00:00,154.874
|
||||
2022-01-15 11:00:00,147.523
|
||||
2022-01-15 12:00:00,142.095
|
||||
2022-01-15 13:00:00,154.387
|
||||
2022-01-15 14:00:00,1836.415
|
||||
2022-01-15 15:00:00,172.903
|
||||
2022-01-15 16:00:00,155.75
|
||||
2022-01-15 17:00:00,152.347
|
||||
2022-01-15 18:00:00,137.295
|
||||
2022-01-15 19:00:00,151.232
|
||||
2022-01-15 20:00:00,165.771
|
||||
2022-01-15 21:00:00,172.816
|
||||
2022-01-15 22:00:00,179.476
|
||||
2022-01-15 23:00:00,158.627
|
||||
2022-01-16 00:00:00,156.631
|
||||
2022-01-16 01:00:00,155.015
|
||||
2022-01-16 02:00:00,169.514
|
||||
2022-01-16 03:00:00,1927.376
|
||||
2022-01-16 04:00:00,171.379
|
||||
2022-01-16 05:00:00,146.187
|
||||
2022-01-16 06:00:00,151.068
|
||||
2022-01-16 07:00:00,136.46
|
||||
2022-01-16 08:00:00,148.784
|
||||
2022-01-16 09:00:00,159.457
|
||||
2022-01-16 10:00:00,176.898
|
||||
2022-01-16 11:00:00,180.673
|
||||
2022-01-16 12:00:00,153.202
|
||||
2022-01-16 13:00:00,146.64
|
||||
2022-01-16 14:00:00,142.367
|
||||
2022-01-16 15:00:00,156.713
|
||||
2022-01-16 16:00:00,1869.826
|
||||
2022-01-16 17:00:00,159.356
|
||||
2022-01-16 18:00:00,139.482
|
||||
2022-01-16 19:00:00,146.594
|
||||
2022-01-16 20:00:00,138.353
|
||||
2022-01-16 21:00:00,147.956
|
||||
2022-01-16 22:00:00,161.561
|
||||
2022-01-16 23:00:00,179.351
|
||||
2022-01-17 00:00:00,177.391
|
||||
2022-01-17 01:00:00,162.681
|
||||
2022-01-17 02:00:00,156.051
|
||||
2022-01-17 03:00:00,153.318
|
||||
2022-01-17 04:00:00,167.785
|
||||
2022-01-17 05:00:00,1889.879
|
||||
2022-01-17 06:00:00,175.518
|
||||
2022-01-17 07:00:00,152.63
|
||||
2022-01-17 08:00:00,150.919
|
||||
2022-01-17 09:00:00,138.322
|
||||
2022-01-17 10:00:00,147.491
|
||||
2022-01-17 11:00:00,160.056
|
||||
2022-01-17 12:00:00,178.656
|
||||
2022-01-17 13:00:00,181.673
|
||||
2022-01-17 14:00:00,161.942
|
||||
2022-01-17 15:00:00,155.337
|
||||
2022-01-17 16:00:00,156.001
|
||||
2022-01-17 17:00:00,172.427
|
||||
2022-01-17 18:00:00,1930.971
|
||||
2022-01-17 19:00:00,175.35
|
||||
2022-01-17 20:00:00,157.548
|
||||
2022-01-17 21:00:00,149.42
|
||||
2022-01-17 22:00:00,138.155
|
||||
2022-01-17 23:00:00,153.824
|
||||
2022-01-18 00:00:00,164.022
|
||||
2022-01-18 01:00:00,178.541
|
||||
2022-01-18 02:00:00,175.913
|
||||
2022-01-18 03:00:00,163.182
|
||||
2022-01-18 04:00:00,155.596
|
||||
2022-01-18 05:00:00,156.598
|
||||
2022-01-18 06:00:00,174.92
|
||||
2022-01-18 07:00:00,1943.069
|
||||
2022-01-18 08:00:00,175.514
|
||||
2022-01-18 09:00:00,153.555
|
||||
2022-01-18 10:00:00,159.857
|
||||
2022-01-18 11:00:00,140.548
|
||||
2022-01-18 12:00:00,151.645
|
||||
2022-01-18 13:00:00,171.133
|
||||
2022-01-18 14:00:00,184.087
|
||||
2022-01-18 15:00:00,186.022
|
||||
2022-01-18 16:00:00,169.222
|
||||
2022-01-18 17:00:00,160.682
|
||||
2022-01-18 18:00:00,155.899
|
||||
2022-01-18 19:00:00,175.664
|
||||
2022-01-18 20:00:00,1983.829
|
||||
2022-01-18 21:00:00,166.165
|
||||
2022-01-18 22:00:00,154.226
|
||||
2022-01-18 23:00:00,156.997
|
||||
2022-01-19 00:00:00,138.082
|
||||
2022-01-19 01:00:00,153.221
|
||||
2022-01-19 02:00:00,166.169
|
||||
2022-01-19 03:00:00,184.807
|
||||
2022-01-19 04:00:00,186.844
|
||||
2022-01-19 05:00:00,160.475
|
||||
2022-01-19 06:00:00,159.328
|
||||
2022-01-19 07:00:00,156.604
|
||||
2022-01-19 08:00:00,170.779
|
||||
2022-01-19 09:00:00,1953.699
|
||||
2022-01-19 10:00:00,174.337
|
||||
2022-01-19 11:00:00,159.772
|
||||
2022-01-19 12:00:00,155.545
|
||||
2022-01-19 13:00:00,144.038
|
||||
2022-01-19 14:00:00,154.284
|
||||
2022-01-19 15:00:00,170.559
|
||||
2022-01-19 16:00:00,183.582
|
||||
2022-01-19 17:00:00,188.407
|
||||
2022-01-19 18:00:00,167.18
|
||||
2022-01-19 19:00:00,159.36
|
||||
2022-01-19 20:00:00,156.666
|
||||
2022-01-19 21:00:00,173.557
|
||||
2022-01-19 22:00:00,1987.288
|
||||
2022-01-19 23:00:00,177.865
|
||||
2022-01-20 00:00:00,163.114
|
||||
2022-01-20 01:00:00,156.693
|
||||
2022-01-20 02:00:00,144.524
|
||||
2022-01-20 03:00:00,152.626
|
||||
2022-01-20 04:00:00,168.239
|
||||
2022-01-20 05:00:00,184.592
|
||||
2022-01-20 06:00:00,179.993
|
||||
2022-01-20 07:00:00,160.76
|
||||
2022-01-20 08:00:00,150.605
|
||||
2022-01-20 09:00:00,152.302
|
||||
2022-01-20 10:00:00,168.073
|
||||
2022-01-20 11:00:00,1959.387
|
||||
2022-01-20 12:00:00,169.01
|
||||
2022-01-20 13:00:00,138.457
|
||||
2022-01-20 14:00:00,134.157
|
||||
2022-01-20 15:00:00,125.161
|
||||
2022-01-20 16:00:00,131.317
|
||||
2022-01-20 17:00:00,147.22
|
||||
2022-01-20 18:00:00,157.083
|
||||
2022-01-20 19:00:00,161.543
|
||||
2022-01-20 20:00:00,137.175
|
||||
2022-01-20 21:00:00,138.952
|
||||
2022-01-20 22:00:00,136.236
|
||||
2022-01-20 23:00:00,164.564
|
||||
2022-01-21 00:00:00,1740.874
|
||||
2022-01-21 01:00:00,169.541
|
||||
2022-01-21 02:00:00,149.732
|
||||
2022-01-21 03:00:00,142.659
|
||||
2022-01-21 04:00:00,125.288
|
||||
2022-01-21 05:00:00,141.697
|
||||
2022-01-21 06:00:00,163.128
|
||||
2022-01-21 07:00:00,177.165
|
||||
2022-01-21 08:00:00,176.655
|
||||
2022-01-21 09:00:00,148.406
|
||||
2022-01-21 10:00:00,132.129
|
||||
2022-01-21 11:00:00,135.919
|
||||
2022-01-21 12:00:00,165.3
|
||||
2022-01-21 13:00:00,1827.618
|
||||
2022-01-21 14:00:00,166.309
|
||||
2022-01-21 15:00:00,135.738
|
||||
2022-01-21 16:00:00,133.862
|
||||
2022-01-21 17:00:00,123.65
|
||||
2022-01-21 18:00:00,135.488
|
||||
2022-01-21 19:00:00,155.016
|
||||
2022-01-21 20:00:00,173.728
|
||||
2022-01-21 21:00:00,169.987
|
||||
2022-01-21 22:00:00,141.456
|
||||
2022-01-21 23:00:00,128.32
|
||||
2022-01-22 00:00:00,123.628
|
||||
2022-01-22 01:00:00,135.527
|
||||
2022-01-22 02:00:00,1722.711
|
||||
2022-01-22 03:00:00,129.542
|
||||
2022-01-22 04:00:00,115.247
|
||||
2022-01-22 05:00:00,105.084
|
||||
2022-01-22 06:00:00,94.674
|
||||
2022-01-22 07:00:00,114.96
|
||||
2022-01-22 08:00:00,131.167
|
||||
2022-01-22 09:00:00,158.331
|
||||
2022-01-22 10:00:00,151.36
|
||||
2022-01-22 11:00:00,127.184
|
||||
2022-01-22 12:00:00,121.741
|
||||
2022-01-22 13:00:00,127.974
|
||||
2022-01-22 14:00:00,133.974
|
||||
2022-01-22 15:00:00,1511.237
|
||||
2022-01-22 16:00:00,137.055
|
||||
2022-01-22 17:00:00,122.562
|
||||
2022-01-22 18:00:00,128.606
|
||||
2022-01-22 19:00:00,110.959
|
||||
2022-01-22 20:00:00,118.029
|
||||
2022-01-22 21:00:00,137.026
|
||||
2022-01-22 22:00:00,151.952
|
||||
2022-01-22 23:00:00,149.701
|
||||
2022-01-23 00:00:00,132.785
|
||||
2022-01-23 01:00:00,121.075
|
||||
2022-01-23 02:00:00,120.445
|
||||
2022-01-23 03:00:00,141.155
|
||||
2022-01-23 04:00:00,1571.349
|
||||
2022-01-23 05:00:00,153.85
|
||||
2022-01-23 06:00:00,140.102
|
||||
2022-01-23 07:00:00,132.664
|
||||
2022-01-23 08:00:00,106.751
|
||||
2022-01-23 09:00:00,117.672
|
||||
2022-01-23 10:00:00,136.577
|
||||
2022-01-23 11:00:00,149.776
|
||||
2022-01-23 12:00:00,148.995
|
||||
2022-01-23 13:00:00,126.983
|
||||
2022-01-23 14:00:00,112.3
|
||||
2022-01-23 15:00:00,118.837
|
||||
2022-01-23 16:00:00,124.629
|
||||
2022-01-23 17:00:00,1569.137
|
||||
2022-01-23 18:00:00,130.232
|
||||
2022-01-23 19:00:00,122.417
|
||||
2022-01-23 20:00:00,106.412
|
||||
2022-01-23 21:00:00,88.646
|
||||
2022-01-23 22:00:00,104.498
|
||||
2022-01-23 23:00:00,126.28
|
||||
2022-01-24 00:00:00,140.283
|
||||
2022-01-24 01:00:00,135.156
|
||||
2022-01-24 02:00:00,118.653
|
||||
2022-01-24 03:00:00,98.469
|
||||
2022-01-24 04:00:00,90.263
|
||||
2022-01-24 05:00:00,91.658
|
||||
2022-01-24 06:00:00,1352.967
|
||||
2022-01-24 07:00:00,113.495
|
||||
2022-01-24 08:00:00,92.416
|
||||
2022-01-24 09:00:00,72.84
|
||||
2022-01-24 10:00:00,71.41
|
||||
2022-01-24 11:00:00,82.51
|
||||
2022-01-24 12:00:00,115.772
|
||||
2022-01-24 13:00:00,135.958
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,25 @@
|
|||
import joblib
|
||||
import numpy as np
|
||||
|
||||
|
||||
def load_load_model(path):
|
||||
gbm = joblib.load(path)
|
||||
return gbm
|
||||
|
||||
def load_forecast(inputs: np.ndarray, model):
|
||||
"""_summary_
|
||||
|
||||
Args:
|
||||
inputs (np.ndarray): 输入序列
|
||||
model (_type_): _description_
|
||||
"""
|
||||
out = model.predict([inputs])
|
||||
return out
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
model = load_load_model('./models/load_pred.joblib')
|
||||
inputs = np.random.randn(24)
|
||||
print(inputs.shape)
|
||||
out = load_forecast(inputs, model)
|
||||
print(out)
|
|
@ -0,0 +1,73 @@
|
|||
import pandas as pd
|
||||
import numpy as np
|
||||
import xgboost as xgb
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.metrics import mean_squared_error, r2_score
|
||||
import joblib
|
||||
from logzero import logger
|
||||
|
||||
def time_series_to_supervised(data, columns, n_in=24, n_out=1,dropnan=True):
|
||||
"""
|
||||
:param data:作为列表或2D NumPy数组的观察序列。需要。
|
||||
:param n_in:作为输入的滞后观察数(X)。值可以在[1..len(数据)]之间可选。默认为1。
|
||||
:param n_out:作为输出的观测数量(y)。值可以在[0..len(数据)]之间。可选的。默认为1。
|
||||
:param dropnan:Boolean是否删除具有NaN值的行。可选的。默认为True。
|
||||
:return:
|
||||
"""
|
||||
logger.info(f"正在处理训练数据:size:{data.shape}")
|
||||
n_vars = 1 if type(data) is list else data.shape[1]
|
||||
df = pd.DataFrame(data)
|
||||
origNames = columns
|
||||
cols, names = list(), list()
|
||||
cols.append(df.shift(0))
|
||||
names += [('%s' % origNames[j]) for j in range(n_vars)]
|
||||
n_in = max(1, n_in)
|
||||
for i in range(n_in-1, 0, -1):
|
||||
time = '(t-%d)' % i
|
||||
cols.append(df.shift(i))
|
||||
names += [('%s%s' % (origNames[j], time)) for j in range(n_vars)]
|
||||
n_out = max(n_out, 0)
|
||||
for i in range(1, n_out+1):
|
||||
time = '(t+%d)' % i
|
||||
cols.append(df.shift(-i))
|
||||
names += [('%s%s' % (origNames[j], time)) for j in range(n_vars)]
|
||||
agg = pd.concat(cols, axis=1)
|
||||
agg.columns = names
|
||||
if dropnan:
|
||||
agg.dropna(inplace=True)
|
||||
return agg
|
||||
|
||||
def train_model(train_data: pd.DataFrame):
|
||||
"""训练模型的函数,需要根据模型类型实际调整
|
||||
|
||||
Args:
|
||||
data (pd.DataFrame): 训练集
|
||||
"""
|
||||
# 特征和输出列名,需要根据业务场景灵活处理
|
||||
fea_cols = train_data.columns[:-1].tolist()
|
||||
out_cols = train_data.columns[-1:].tolist()
|
||||
logger.info(fea_cols, out_cols)
|
||||
X = train_data[fea_cols]
|
||||
y = train_data[out_cols]
|
||||
train_X,test_X,train_y,test_y = train_test_split(X, y, test_size=0.2, random_state=42)
|
||||
valid_X,test_X,valid_y,test_y = train_test_split(test_X, test_y, test_size=0.5, random_state=42)
|
||||
|
||||
# 参数
|
||||
other_params = {'learning_rate': 0.1, 'n_estimators': 150, 'max_depth': 10, 'min_child_weight': 1, 'seed': 0, 'subsample': 0.8, 'colsample_bytree': 0.8, 'gamma': 0, 'reg_alpha': 0, 'reg_lambda': 1}
|
||||
print(train_X.shape, train_y.shape)
|
||||
|
||||
gbm = xgb.XGBRegressor(objective='reg:squarederror',**other_params)
|
||||
|
||||
gbm.fit(train_X.values, train_y.values, eval_set=[(valid_X.values, valid_y.values)], early_stopping_rounds=20)
|
||||
|
||||
y_pred = gbm.predict(test_X.values)
|
||||
|
||||
logger.info(f"Root Mean Squared Error on Test set: {np.sqrt(mean_squared_error(test_y, y_pred))}")
|
||||
logger.info(f"R2 score on Test set: {r2_score(test_y, y_pred)}")
|
||||
joblib.dump(gbm, './models/load_pred.joblib')
|
||||
logger.info(f"save_path: ./models/load_pred.joblib")
|
||||
|
||||
if __name__ == '__main__':
|
||||
data = pd.read_csv('./data/load_data_hourly.csv', index_col=0)
|
||||
agg = time_series_to_supervised(data.values, data.columns, 24, 1)
|
||||
train_model(agg)
|
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -2,8 +2,13 @@
|
|||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 22,
|
||||
"metadata": {},
|
||||
"execution_count": 9,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"start_time": "2025-02-09T19:14:42.420799Z",
|
||||
"end_time": "2025-02-09T19:14:42.448185Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
|
@ -12,205 +17,20 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"start_time": "2025-02-09T19:14:42.979075Z",
|
||||
"end_time": "2025-02-09T19:14:43.042942Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>光伏用户编号</th>\n",
|
||||
" <th>综合倍率</th>\n",
|
||||
" <th>时间</th>\n",
|
||||
" <th>p1</th>\n",
|
||||
" <th>p2</th>\n",
|
||||
" <th>p3</th>\n",
|
||||
" <th>p4</th>\n",
|
||||
" <th>p5</th>\n",
|
||||
" <th>p6</th>\n",
|
||||
" <th>p7</th>\n",
|
||||
" <th>...</th>\n",
|
||||
" <th>p87</th>\n",
|
||||
" <th>p88</th>\n",
|
||||
" <th>p89</th>\n",
|
||||
" <th>p90</th>\n",
|
||||
" <th>p91</th>\n",
|
||||
" <th>p92</th>\n",
|
||||
" <th>p93</th>\n",
|
||||
" <th>p94</th>\n",
|
||||
" <th>p95</th>\n",
|
||||
" <th>p96</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>f1</td>\n",
|
||||
" <td>80</td>\n",
|
||||
" <td>2022-1-3 0:00</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>-0.0031</td>\n",
|
||||
" <td>-0.0032</td>\n",
|
||||
" <td>-0.0032</td>\n",
|
||||
" <td>-0.0033</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0003</td>\n",
|
||||
" <td>-0.0003</td>\n",
|
||||
" <td>-0.0003</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>f1</td>\n",
|
||||
" <td>80</td>\n",
|
||||
" <td>2022-1-4 0:00</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>-0.0032</td>\n",
|
||||
" <td>-0.0032</td>\n",
|
||||
" <td>-0.0032</td>\n",
|
||||
" <td>-0.0031</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>f1</td>\n",
|
||||
" <td>80</td>\n",
|
||||
" <td>2022-1-5 0:00</td>\n",
|
||||
" <td>-0.0003</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>f1</td>\n",
|
||||
" <td>80</td>\n",
|
||||
" <td>2022-1-6 0:00</td>\n",
|
||||
" <td>-0.0003</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0003</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>f1</td>\n",
|
||||
" <td>80</td>\n",
|
||||
" <td>2022-1-7 0:00</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0003</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>5 rows × 99 columns</p>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" 光伏用户编号 综合倍率 时间 p1 p2 p3 p4 p5 p6 \\\n",
|
||||
"0 f1 80 2022-1-3 0:00 0.0000 0.0000 0.0000 0.0000 0.0 0.0000 \n",
|
||||
"1 f1 80 2022-1-4 0:00 -0.0001 0.0000 -0.0001 0.0000 0.0 -0.0001 \n",
|
||||
"2 f1 80 2022-1-5 0:00 -0.0003 -0.0001 0.0000 0.0000 0.0 -0.0001 \n",
|
||||
"3 f1 80 2022-1-6 0:00 -0.0003 0.0000 -0.0003 -0.0001 0.0 0.0000 \n",
|
||||
"4 f1 80 2022-1-7 0:00 0.0000 -0.0001 -0.0001 0.0000 0.0 -0.0001 \n",
|
||||
"\n",
|
||||
" p7 ... p87 p88 p89 p90 p91 p92 p93 \\\n",
|
||||
"0 -0.0001 ... -0.0031 -0.0032 -0.0032 -0.0033 -0.0001 -0.0001 -0.0003 \n",
|
||||
"1 -0.0001 ... -0.0032 -0.0032 -0.0032 -0.0031 -0.0001 0.0000 -0.0001 \n",
|
||||
"2 -0.0001 ... -0.0016 -0.0016 -0.0016 -0.0017 0.0000 0.0000 0.0000 \n",
|
||||
"3 0.0000 ... -0.0016 -0.0016 -0.0016 -0.0016 0.0000 0.0000 0.0000 \n",
|
||||
"4 -0.0003 ... 0.0000 -0.0001 0.0000 0.0000 0.0000 -0.0001 0.0000 \n",
|
||||
"\n",
|
||||
" p94 p95 p96 \n",
|
||||
"0 -0.0003 -0.0003 -0.0001 \n",
|
||||
"1 -0.0001 -0.0001 -0.0001 \n",
|
||||
"2 0.0000 0.0000 -0.0001 \n",
|
||||
"3 -0.0001 0.0000 0.0000 \n",
|
||||
"4 0.0000 0.0000 0.0000 \n",
|
||||
"\n",
|
||||
"[5 rows x 99 columns]"
|
||||
]
|
||||
"text/plain": " 光伏用户编号 综合倍率 时间 p1 p2 p3 p4 p5 p6 \\\n0 f1 80 2022-1-3 0:00 0.0000 0.0000 0.0000 0.0000 0.0 0.0000 \n1 f1 80 2022-1-4 0:00 -0.0001 0.0000 -0.0001 0.0000 0.0 -0.0001 \n2 f1 80 2022-1-5 0:00 -0.0003 -0.0001 0.0000 0.0000 0.0 -0.0001 \n3 f1 80 2022-1-6 0:00 -0.0003 0.0000 -0.0003 -0.0001 0.0 0.0000 \n4 f1 80 2022-1-7 0:00 0.0000 -0.0001 -0.0001 0.0000 0.0 -0.0001 \n\n p7 ... p87 p88 p89 p90 p91 p92 p93 \\\n0 -0.0001 ... -0.0031 -0.0032 -0.0032 -0.0033 -0.0001 -0.0001 -0.0003 \n1 -0.0001 ... -0.0032 -0.0032 -0.0032 -0.0031 -0.0001 0.0000 -0.0001 \n2 -0.0001 ... -0.0016 -0.0016 -0.0016 -0.0017 0.0000 0.0000 0.0000 \n3 0.0000 ... -0.0016 -0.0016 -0.0016 -0.0016 0.0000 0.0000 0.0000 \n4 -0.0003 ... 0.0000 -0.0001 0.0000 0.0000 0.0000 -0.0001 0.0000 \n\n p94 p95 p96 \n0 -0.0003 -0.0003 -0.0001 \n1 -0.0001 -0.0001 -0.0001 \n2 0.0000 0.0000 -0.0001 \n3 -0.0001 0.0000 0.0000 \n4 0.0000 0.0000 0.0000 \n\n[5 rows x 99 columns]",
|
||||
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>光伏用户编号</th>\n <th>综合倍率</th>\n <th>时间</th>\n <th>p1</th>\n <th>p2</th>\n <th>p3</th>\n <th>p4</th>\n <th>p5</th>\n <th>p6</th>\n <th>p7</th>\n <th>...</th>\n <th>p87</th>\n <th>p88</th>\n <th>p89</th>\n <th>p90</th>\n <th>p91</th>\n <th>p92</th>\n <th>p93</th>\n <th>p94</th>\n <th>p95</th>\n <th>p96</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>f1</td>\n <td>80</td>\n <td>2022-1-3 0:00</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>...</td>\n <td>-0.0031</td>\n <td>-0.0032</td>\n <td>-0.0032</td>\n <td>-0.0033</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>-0.0003</td>\n <td>-0.0003</td>\n <td>-0.0003</td>\n <td>-0.0001</td>\n </tr>\n <tr>\n <th>1</th>\n <td>f1</td>\n <td>80</td>\n <td>2022-1-4 0:00</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>...</td>\n <td>-0.0032</td>\n <td>-0.0032</td>\n <td>-0.0032</td>\n <td>-0.0031</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n </tr>\n <tr>\n <th>2</th>\n <td>f1</td>\n <td>80</td>\n <td>2022-1-5 0:00</td>\n <td>-0.0003</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>...</td>\n <td>-0.0016</td>\n <td>-0.0016</td>\n <td>-0.0016</td>\n <td>-0.0017</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n </tr>\n <tr>\n <th>3</th>\n <td>f1</td>\n <td>80</td>\n <td>2022-1-6 0:00</td>\n <td>-0.0003</td>\n <td>0.0000</td>\n <td>-0.0003</td>\n <td>-0.0001</td>\n <td>0.0</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>...</td>\n <td>-0.0016</td>\n <td>-0.0016</td>\n <td>-0.0016</td>\n <td>-0.0016</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0000</td>\n </tr>\n <tr>\n <th>4</th>\n <td>f1</td>\n <td>80</td>\n <td>2022-1-7 0:00</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0</td>\n <td>-0.0001</td>\n <td>-0.0003</td>\n <td>...</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows × 99 columns</p>\n</div>"
|
||||
},
|
||||
"execution_count": 3,
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
|
@ -222,8 +42,13 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"start_time": "2025-02-09T19:14:44.457393Z",
|
||||
"end_time": "2025-02-09T19:14:44.483344Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"use_data = data[data['光伏用户编号']=='f1'].sort_values(by='时间').drop(columns=data.columns[:3])"
|
||||
|
@ -231,205 +56,20 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 24,
|
||||
"metadata": {},
|
||||
"execution_count": 12,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"start_time": "2025-02-09T19:14:46.754912Z",
|
||||
"end_time": "2025-02-09T19:14:46.763512Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>p1</th>\n",
|
||||
" <th>p2</th>\n",
|
||||
" <th>p3</th>\n",
|
||||
" <th>p4</th>\n",
|
||||
" <th>p5</th>\n",
|
||||
" <th>p6</th>\n",
|
||||
" <th>p7</th>\n",
|
||||
" <th>p8</th>\n",
|
||||
" <th>p9</th>\n",
|
||||
" <th>p10</th>\n",
|
||||
" <th>...</th>\n",
|
||||
" <th>p87</th>\n",
|
||||
" <th>p88</th>\n",
|
||||
" <th>p89</th>\n",
|
||||
" <th>p90</th>\n",
|
||||
" <th>p91</th>\n",
|
||||
" <th>p92</th>\n",
|
||||
" <th>p93</th>\n",
|
||||
" <th>p94</th>\n",
|
||||
" <th>p95</th>\n",
|
||||
" <th>p96</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>7</th>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0003</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>8</th>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0003</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>-0.0032</td>\n",
|
||||
" <td>-0.0031</td>\n",
|
||||
" <td>-0.0032</td>\n",
|
||||
" <td>-0.0032</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>9</th>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>-0.0023</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>-0.0019</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0003</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>10</th>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>-0.0032</td>\n",
|
||||
" <td>-0.0033</td>\n",
|
||||
" <td>-0.0032</td>\n",
|
||||
" <td>-0.0033</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" <td>-0.0019</td>\n",
|
||||
" <td>-0.0015</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>11</th>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" <td>-0.0017</td>\n",
|
||||
" <td>-0.0016</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" <td>0.0000</td>\n",
|
||||
" <td>-0.0001</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>5 rows × 96 columns</p>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" p1 p2 p3 p4 p5 p6 p7 p8 p9 \\\n",
|
||||
"7 0.0000 0.0000 0.0000 -0.0001 -0.0001 0.0000 0.0000 0.0000 -0.0003 \n",
|
||||
"8 -0.0001 -0.0001 0.0000 0.0000 -0.0001 0.0000 -0.0003 0.0000 -0.0001 \n",
|
||||
"9 -0.0001 -0.0001 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0001 \n",
|
||||
"10 0.0000 0.0000 0.0000 -0.0001 0.0000 -0.0001 -0.0001 -0.0001 0.0000 \n",
|
||||
"11 0.0000 0.0000 -0.0001 0.0000 -0.0001 -0.0001 -0.0001 0.0000 0.0000 \n",
|
||||
"\n",
|
||||
" p10 ... p87 p88 p89 p90 p91 p92 p93 \\\n",
|
||||
"7 0.0000 ... -0.0017 -0.0017 -0.0017 -0.0017 -0.0001 0.0000 -0.0001 \n",
|
||||
"8 0.0000 ... -0.0032 -0.0031 -0.0032 -0.0032 -0.0017 -0.0017 -0.0001 \n",
|
||||
"9 -0.0001 ... -0.0023 -0.0016 -0.0016 -0.0019 0.0000 -0.0001 0.0000 \n",
|
||||
"10 -0.0001 ... -0.0032 -0.0033 -0.0032 -0.0033 -0.0017 -0.0016 -0.0017 \n",
|
||||
"11 0.0000 ... -0.0016 -0.0017 -0.0017 -0.0016 0.0000 0.0000 0.0000 \n",
|
||||
"\n",
|
||||
" p94 p95 p96 \n",
|
||||
"7 0.0000 0.0000 0.0000 \n",
|
||||
"8 0.0000 -0.0001 0.0000 \n",
|
||||
"9 0.0000 -0.0003 0.0000 \n",
|
||||
"10 -0.0019 -0.0015 -0.0017 \n",
|
||||
"11 -0.0001 0.0000 -0.0001 \n",
|
||||
"\n",
|
||||
"[5 rows x 96 columns]"
|
||||
]
|
||||
"text/plain": " p1 p2 p3 p4 p5 p6 p7 p8 p9 \\\n7 0.0000 0.0000 0.0000 -0.0001 -0.0001 0.0000 0.0000 0.0000 -0.0003 \n8 -0.0001 -0.0001 0.0000 0.0000 -0.0001 0.0000 -0.0003 0.0000 -0.0001 \n9 -0.0001 -0.0001 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0001 \n10 0.0000 0.0000 0.0000 -0.0001 0.0000 -0.0001 -0.0001 -0.0001 0.0000 \n11 0.0000 0.0000 -0.0001 0.0000 -0.0001 -0.0001 -0.0001 0.0000 0.0000 \n\n p10 ... p87 p88 p89 p90 p91 p92 p93 \\\n7 0.0000 ... -0.0017 -0.0017 -0.0017 -0.0017 -0.0001 0.0000 -0.0001 \n8 0.0000 ... -0.0032 -0.0031 -0.0032 -0.0032 -0.0017 -0.0017 -0.0001 \n9 -0.0001 ... -0.0023 -0.0016 -0.0016 -0.0019 0.0000 -0.0001 0.0000 \n10 -0.0001 ... -0.0032 -0.0033 -0.0032 -0.0033 -0.0017 -0.0016 -0.0017 \n11 0.0000 ... -0.0016 -0.0017 -0.0017 -0.0016 0.0000 0.0000 0.0000 \n\n p94 p95 p96 \n7 0.0000 0.0000 0.0000 \n8 0.0000 -0.0001 0.0000 \n9 0.0000 -0.0003 0.0000 \n10 -0.0019 -0.0015 -0.0017 \n11 -0.0001 0.0000 -0.0001 \n\n[5 rows x 96 columns]",
|
||||
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>p1</th>\n <th>p2</th>\n <th>p3</th>\n <th>p4</th>\n <th>p5</th>\n <th>p6</th>\n <th>p7</th>\n <th>p8</th>\n <th>p9</th>\n <th>p10</th>\n <th>...</th>\n <th>p87</th>\n <th>p88</th>\n <th>p89</th>\n <th>p90</th>\n <th>p91</th>\n <th>p92</th>\n <th>p93</th>\n <th>p94</th>\n <th>p95</th>\n <th>p96</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>7</th>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>-0.0003</td>\n <td>0.0000</td>\n <td>...</td>\n <td>-0.0017</td>\n <td>-0.0017</td>\n <td>-0.0017</td>\n <td>-0.0017</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n </tr>\n <tr>\n <th>8</th>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>-0.0003</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>...</td>\n <td>-0.0032</td>\n <td>-0.0031</td>\n <td>-0.0032</td>\n <td>-0.0032</td>\n <td>-0.0017</td>\n <td>-0.0017</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n </tr>\n <tr>\n <th>9</th>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>...</td>\n <td>-0.0023</td>\n <td>-0.0016</td>\n <td>-0.0016</td>\n <td>-0.0019</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>-0.0003</td>\n <td>0.0000</td>\n </tr>\n <tr>\n <th>10</th>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>...</td>\n <td>-0.0032</td>\n <td>-0.0033</td>\n <td>-0.0032</td>\n <td>-0.0033</td>\n <td>-0.0017</td>\n <td>-0.0016</td>\n <td>-0.0017</td>\n <td>-0.0019</td>\n <td>-0.0015</td>\n <td>-0.0017</td>\n </tr>\n <tr>\n <th>11</th>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>...</td>\n <td>-0.0016</td>\n <td>-0.0017</td>\n <td>-0.0017</td>\n <td>-0.0016</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n <td>0.0000</td>\n <td>-0.0001</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows × 96 columns</p>\n</div>"
|
||||
},
|
||||
"execution_count": 24,
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
|
@ -440,8 +80,38 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 20,
|
||||
"metadata": {},
|
||||
"execution_count": 13,
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": " p1 p2 p3 p4 p5 p6 p7 p8 p9 \\\n458 -0.0012 -0.0012 -0.0011 -0.0011 -0.0011 -0.0011 -0.0011 -0.0013 -0.0012 \n459 -0.0012 -0.0011 -0.0012 -0.0012 -0.0011 -0.0012 -0.0012 -0.0011 -0.0011 \n460 -0.0012 -0.0011 -0.0012 -0.0012 -0.0011 -0.0011 -0.0011 -0.0011 -0.0012 \n461 -0.0012 -0.0012 -0.0011 -0.0011 -0.0012 -0.0011 -0.0011 -0.0012 -0.0011 \n462 -0.0011 -0.0011 -0.0011 -0.0011 -0.0011 -0.0012 -0.0011 -0.0012 -0.0011 \n\n p10 ... p87 p88 p89 p90 p91 p92 p93 \\\n458 -0.0013 ... -0.0011 -0.0011 -0.0012 -0.0012 -0.0012 -0.0011 -0.0012 \n459 -0.0011 ... -0.0033 -0.0036 -0.0011 -0.0013 -0.0011 -0.0011 -0.0011 \n460 -0.0011 ... -0.0011 -0.0012 -0.0012 -0.0012 -0.0012 -0.0011 -0.0011 \n461 -0.0011 ... -0.0011 -0.0013 -0.0011 -0.0012 -0.0011 -0.0012 -0.0012 \n462 -0.0011 ... -0.0012 -0.0011 -0.0012 -0.0011 -0.0012 -0.0012 -0.0011 \n\n p94 p95 p96 \n458 -0.0011 -0.0012 -0.0012 \n459 -0.0011 -0.0011 -0.0011 \n460 -0.0011 -0.0011 -0.0011 \n461 -0.0011 -0.0012 -0.0012 \n462 -0.0011 -0.0011 -0.0011 \n\n[5 rows x 96 columns]",
|
||||
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>p1</th>\n <th>p2</th>\n <th>p3</th>\n <th>p4</th>\n <th>p5</th>\n <th>p6</th>\n <th>p7</th>\n <th>p8</th>\n <th>p9</th>\n <th>p10</th>\n <th>...</th>\n <th>p87</th>\n <th>p88</th>\n <th>p89</th>\n <th>p90</th>\n <th>p91</th>\n <th>p92</th>\n <th>p93</th>\n <th>p94</th>\n <th>p95</th>\n <th>p96</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>458</th>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0013</td>\n <td>-0.0012</td>\n <td>-0.0013</td>\n <td>...</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n </tr>\n <tr>\n <th>459</th>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>...</td>\n <td>-0.0033</td>\n <td>-0.0036</td>\n <td>-0.0011</td>\n <td>-0.0013</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n </tr>\n <tr>\n <th>460</th>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>...</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n </tr>\n <tr>\n <th>461</th>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>...</td>\n <td>-0.0011</td>\n <td>-0.0013</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n </tr>\n <tr>\n <th>462</th>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>...</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0012</td>\n <td>-0.0012</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n <td>-0.0011</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows × 96 columns</p>\n</div>"
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"use_data[-5:]"
|
||||
],
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"ExecuteTime": {
|
||||
"start_time": "2025-02-09T19:14:48.513486Z",
|
||||
"end_time": "2025-02-09T19:14:48.531632Z"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"start_time": "2025-02-09T19:14:57.816980Z",
|
||||
"end_time": "2025-02-09T19:14:57.827730Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 生成日期范围(484天)\n",
|
||||
|
@ -452,8 +122,13 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 23,
|
||||
"metadata": {},
|
||||
"execution_count": 15,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"start_time": "2025-02-09T19:14:59.274699Z",
|
||||
"end_time": "2025-02-09T19:14:59.284894Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 创建完整的时间索引\n",
|
||||
|
@ -462,74 +137,20 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 30,
|
||||
"metadata": {},
|
||||
"execution_count": 16,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"start_time": "2025-02-09T19:15:02.587749Z",
|
||||
"end_time": "2025-02-09T19:15:02.608881Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>index</th>\n",
|
||||
" <th>0</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>2022-01-03 00:00:00</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>2022-01-03 01:00:00</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>2022-01-03 02:00:00</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>2022-01-03 03:00:00</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>2022-01-03 04:00:00</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" index 0\n",
|
||||
"0 2022-01-03 00:00:00 0.0\n",
|
||||
"1 2022-01-03 01:00:00 0.0\n",
|
||||
"2 2022-01-03 02:00:00 0.0\n",
|
||||
"3 2022-01-03 03:00:00 0.0\n",
|
||||
"4 2022-01-03 04:00:00 0.0"
|
||||
]
|
||||
"text/plain": " index 0\n0 2022-01-03 00:00:00 0.0\n1 2022-01-03 01:00:00 0.0\n2 2022-01-03 02:00:00 0.0\n3 2022-01-03 03:00:00 0.0\n4 2022-01-03 04:00:00 0.0",
|
||||
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>index</th>\n <th>0</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>2022-01-03 00:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2022-01-03 01:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>2</th>\n <td>2022-01-03 02:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>3</th>\n <td>2022-01-03 03:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>4</th>\n <td>2022-01-03 04:00:00</td>\n <td>0.0</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||||
},
|
||||
"execution_count": 30,
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
|
@ -548,6 +169,31 @@
|
|||
"hourly_data.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 18,
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": " index 0\n0 2022-01-03 00:00:00 0.0\n1 2022-01-03 01:00:00 0.0\n2 2022-01-03 02:00:00 0.0\n3 2022-01-03 03:00:00 0.0\n4 2022-01-03 04:00:00 0.0\n... ... ...\n11611 2023-05-01 19:00:00 0.0\n11612 2023-05-01 20:00:00 0.0\n11613 2023-05-01 21:00:00 0.0\n11614 2023-05-01 22:00:00 0.0\n11615 2023-05-01 23:00:00 0.0\n\n[11616 rows x 2 columns]",
|
||||
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>index</th>\n <th>0</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>2022-01-03 00:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2022-01-03 01:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>2</th>\n <td>2022-01-03 02:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>3</th>\n <td>2022-01-03 03:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>4</th>\n <td>2022-01-03 04:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>11611</th>\n <td>2023-05-01 19:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>11612</th>\n <td>2023-05-01 20:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>11613</th>\n <td>2023-05-01 21:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>11614</th>\n <td>2023-05-01 22:00:00</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>11615</th>\n <td>2023-05-01 23:00:00</td>\n <td>0.0</td>\n </tr>\n </tbody>\n</table>\n<p>11616 rows × 2 columns</p>\n</div>"
|
||||
},
|
||||
"execution_count": 18,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"hourly_data"
|
||||
],
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"ExecuteTime": {
|
||||
"start_time": "2025-02-09T19:15:46.762887Z",
|
||||
"end_time": "2025-02-09T19:15:46.771869Z"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 31,
|
||||
|
@ -608,9 +254,23 @@
|
|||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"start_time": "2025-02-09T16:59:07.276741Z",
|
||||
"end_time": "2025-02-09T16:59:07.278428Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"outputs": [],
|
||||
"source": [],
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
|
|
Binary file not shown.
|
@ -2,8 +2,8 @@ import joblib
|
|||
import numpy as np
|
||||
|
||||
|
||||
def load_model(path:str):
|
||||
gbm = joblib.load('./models/pv_pred.joblib')
|
||||
def load_model(path):
|
||||
gbm = joblib.load(path)
|
||||
return gbm
|
||||
|
||||
def pv_forecast(inputs: np.ndarray, model):
|
||||
|
@ -17,9 +17,10 @@ def pv_forecast(inputs: np.ndarray, model):
|
|||
return out
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
model = load_model('./models/pv_pred.joblib')
|
||||
inputs = np.random.randn(24)
|
||||
print(inputs.shape)
|
||||
out = pv_forecast(inputs, model)
|
||||
print(out)
|
||||
# if __name__ == '__main__':
|
||||
# model = load_model('models/pv_pred.joblib')
|
||||
# inputs = np.random.randn(24)
|
||||
#
|
||||
# print(inputs.shape)
|
||||
# out = pv_forecast(inputs, model)
|
||||
# print(out)
|
|
@ -49,16 +49,22 @@ def train_model(train_data: pd.DataFrame):
|
|||
logger.info(fea_cols, out_cols)
|
||||
X = train_data[fea_cols]
|
||||
y = train_data[out_cols]
|
||||
# 8:1:1
|
||||
train_X,test_X,train_y,test_y = train_test_split(X, y, test_size=0.2, random_state=42)
|
||||
|
||||
valid_X,test_X,valid_y,test_y = train_test_split(test_X, test_y, test_size=0.5, random_state=42)
|
||||
|
||||
# 参数
|
||||
other_params = {'learning_rate': 0.1, 'n_estimators': 150, 'max_depth': 10, 'min_child_weight': 1, 'seed': 0, 'subsample': 0.8, 'colsample_bytree': 0.8, 'gamma': 0, 'reg_alpha': 0, 'reg_lambda': 1}
|
||||
print(train_X.shape, train_y.shape)
|
||||
print("测试集test_X:",test_X.shape, "测试集test_y:",test_y.shape)
|
||||
|
||||
gbm = xgb.XGBRegressor(objective='reg:squarederror',**other_params)
|
||||
|
||||
gbm.fit(train_X.values, train_y.values, eval_set=[(valid_X.values, valid_y.values)], early_stopping_rounds=20)
|
||||
gbm.fit(train_X.values,
|
||||
train_y.values,
|
||||
eval_set=[(valid_X.values, valid_y.values)],
|
||||
early_stopping_rounds=20)
|
||||
|
||||
y_pred = gbm.predict(test_X.values)
|
||||
|
||||
|
|
108
run.py
108
run.py
|
@ -1,35 +1,103 @@
|
|||
from flask import request, Flask, jsonify
|
||||
from pv.pv_inference import load_model, pv_forecast
|
||||
from carbon.carbon_inference import load_carbon_model,carbon_forecast
|
||||
from water.water_inference import load_water_model,water_forecast
|
||||
from load.load_inference import load_load_model,load_forecast
|
||||
from logzero import logger
|
||||
|
||||
import numpy as np
|
||||
app = Flask(__name__)
|
||||
gbm_pv = load_model('./pv/models/pv_pred.joblib')
|
||||
# todo: 写一个flask接口
|
||||
pv_model_gbm = load_model('./pv/models/pv_pred.joblib')
|
||||
carbon_model_gbm = load_carbon_model('./carbon/models/carbon_pred.joblib')
|
||||
water_model_gbm = load_water_model('./water/models/water_pred.joblib')
|
||||
load_model_gbm = load_load_model('./load/models/load_pred.joblib')
|
||||
|
||||
|
||||
@app.route('/pv', methods=['POST'])
|
||||
def run_pv_forecast():
|
||||
"""todo: 需要测试
|
||||
|
||||
Returns:
|
||||
_type_: _description_
|
||||
"""
|
||||
data = request.data
|
||||
if not data or 'inputs' not in data:
|
||||
return jsonify({"error": "Invalid data"}), 400
|
||||
else:
|
||||
# todo: 这里需要写个判断inputs是否合规的逻辑
|
||||
inputs = data.get('inputs').reshape(1, 24)
|
||||
try:
|
||||
data = request.json
|
||||
if not data or 'inputs' not in data:
|
||||
return jsonify({"error": "Invalid data"}), 400
|
||||
inputs = data.get('inputs')
|
||||
# 转为1维数组
|
||||
inputs = np.array(inputs)
|
||||
if inputs.ndim != 1:
|
||||
inputs = inputs.flatten()
|
||||
logger.info(f"pv history inputs: {inputs}")
|
||||
out = pv_forecast(inputs, gbm_pv)
|
||||
results = {"result": out}
|
||||
# 调用预测函数
|
||||
out = pv_forecast(inputs, pv_model_gbm)
|
||||
# 将 NumPy 数组转换为列表
|
||||
results = {"result": out.tolist()} # 使用 .tolist() 转换为列表
|
||||
return jsonify(results), 200
|
||||
except Exception as e:
|
||||
logger.error(f"Error in pv_forecast: {e}", exc_info=True)
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@app.route('/carbon', methods=['POST'])
|
||||
def run_carbon_forecast():
|
||||
"""
|
||||
todo: 封装其他的预测
|
||||
"""
|
||||
pass
|
||||
|
||||
try:
|
||||
data = request.json
|
||||
if not data or 'inputs' not in data:
|
||||
return jsonify({"error": "Invalid data"}), 400
|
||||
inputs = data.get('inputs')
|
||||
# 转为1维数组
|
||||
inputs = np.array(inputs)
|
||||
if inputs.ndim != 1:
|
||||
inputs = inputs.flatten()
|
||||
logger.info(f"carbon history inputs: {inputs}")
|
||||
# 调用预测函数
|
||||
out = carbon_forecast(inputs, carbon_model_gbm)
|
||||
# 将 NumPy 数组转换为列表
|
||||
results = {"result": out.tolist()} # 使用 .tolist() 转换为列表
|
||||
return jsonify(results), 200
|
||||
except Exception as e:
|
||||
logger.error(f"Error in carbon_forecast: {e}", exc_info=True)
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@app.route('/water', methods=['POST'])
|
||||
def run_water_forecast():
|
||||
|
||||
try:
|
||||
data = request.json
|
||||
if not data or 'inputs' not in data:
|
||||
return jsonify({"error": "Invalid data"}), 400
|
||||
inputs = data.get('inputs')
|
||||
# 转为1维数组
|
||||
inputs = np.array(inputs)
|
||||
if inputs.ndim != 1:
|
||||
inputs = inputs.flatten()
|
||||
logger.info(f"water history inputs: {inputs}")
|
||||
# 调用预测函数
|
||||
out = water_forecast(inputs, water_model_gbm)
|
||||
# 将 NumPy 数组转换为列表
|
||||
results = {"result": out.tolist()} # 使用 .tolist() 转换为列表
|
||||
return jsonify(results), 200
|
||||
except Exception as e:
|
||||
logger.error(f"Error in water_forecast: {e}", exc_info=True)
|
||||
return jsonify({"error": str(e)}), 500
|
||||
@app.route('/load', methods=['POST'])
|
||||
def run_load_forecast():
|
||||
|
||||
try:
|
||||
data = request.json
|
||||
if not data or 'inputs' not in data:
|
||||
return jsonify({"error": "Invalid data"}), 400
|
||||
inputs = data.get('inputs')
|
||||
# 转为1维数组
|
||||
inputs = np.array(inputs)
|
||||
if inputs.ndim != 1:
|
||||
inputs = inputs.flatten()
|
||||
logger.info(f"load history inputs: {inputs}")
|
||||
# 调用预测函数
|
||||
out = load_forecast(inputs, load_model_gbm)
|
||||
# 将 NumPy 数组转换为列表
|
||||
results = {"result": out.tolist()} # 使用 .tolist() 转换为列表
|
||||
return jsonify(results), 200
|
||||
except Exception as e:
|
||||
logger.error(f"Error in load_forecast: {e}", exc_info=True)
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
if __name__=='__main__':
|
||||
app.run(host='0.0.0.0', port='2467')
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
import requests
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
# 这里使用的是load进行预测,可改(load/pv/water/carbon)
|
||||
url = "http://127.0.0.1:2467/load"
|
||||
data = {
|
||||
"inputs":(np.random.randn(24)*100).tolist()
|
||||
}
|
||||
|
||||
response = requests.post(url, json=data)
|
||||
|
||||
print("Status Code:", response.status_code) # 打印状态码
|
||||
print("Response Content:", response.text) # 打印响应内容
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
print(response.json()) # 尝试解析 JSON
|
||||
except requests.exceptions.JSONDecodeError as e:
|
||||
print("JSON Decode Error:", e)
|
||||
else:
|
||||
print("Error:", response.status_code)
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -0,0 +1,25 @@
|
|||
import joblib
|
||||
import numpy as np
|
||||
|
||||
|
||||
def load_water_model(path):
|
||||
gbm = joblib.load(path)
|
||||
return gbm
|
||||
|
||||
def water_forecast(inputs: np.ndarray, model):
|
||||
"""_summary_
|
||||
|
||||
Args:
|
||||
inputs (np.ndarray): 输入序列
|
||||
model (_type_): _description_
|
||||
"""
|
||||
out = model.predict([inputs])
|
||||
return out
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
model = load_water_model('./models/water_pred.joblib')
|
||||
inputs = np.random.randn(24)
|
||||
print(inputs.shape)
|
||||
out = water_forecast(inputs, model)
|
||||
print(out)
|
|
@ -0,0 +1,73 @@
|
|||
import pandas as pd
|
||||
import numpy as np
|
||||
import xgboost as xgb
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.metrics import mean_squared_error, r2_score
|
||||
import joblib
|
||||
from logzero import logger
|
||||
|
||||
def time_series_to_supervised(data, columns, n_in=24, n_out=1,dropnan=True):
|
||||
"""
|
||||
:param data:作为列表或2D NumPy数组的观察序列。需要。
|
||||
:param n_in:作为输入的滞后观察数(X)。值可以在[1..len(数据)]之间可选。默认为1。
|
||||
:param n_out:作为输出的观测数量(y)。值可以在[0..len(数据)]之间。可选的。默认为1。
|
||||
:param dropnan:Boolean是否删除具有NaN值的行。可选的。默认为True。
|
||||
:return:
|
||||
"""
|
||||
logger.info(f"正在处理训练数据:size:{data.shape}")
|
||||
n_vars = 1 if type(data) is list else data.shape[1]
|
||||
df = pd.DataFrame(data)
|
||||
origNames = columns
|
||||
cols, names = list(), list()
|
||||
cols.append(df.shift(0))
|
||||
names += [('%s' % origNames[j]) for j in range(n_vars)]
|
||||
n_in = max(1, n_in)
|
||||
for i in range(n_in-1, 0, -1):
|
||||
time = '(t-%d)' % i
|
||||
cols.append(df.shift(i))
|
||||
names += [('%s%s' % (origNames[j], time)) for j in range(n_vars)]
|
||||
n_out = max(n_out, 0)
|
||||
for i in range(1, n_out+1):
|
||||
time = '(t+%d)' % i
|
||||
cols.append(df.shift(-i))
|
||||
names += [('%s%s' % (origNames[j], time)) for j in range(n_vars)]
|
||||
agg = pd.concat(cols, axis=1)
|
||||
agg.columns = names
|
||||
if dropnan:
|
||||
agg.dropna(inplace=True)
|
||||
return agg
|
||||
|
||||
def train_model(train_data: pd.DataFrame):
|
||||
"""训练模型的函数,需要根据模型类型实际调整
|
||||
|
||||
Args:
|
||||
data (pd.DataFrame): 训练集
|
||||
"""
|
||||
# 特征和输出列名,需要根据业务场景灵活处理
|
||||
fea_cols = train_data.columns[:-1].tolist()
|
||||
out_cols = train_data.columns[-1:].tolist()
|
||||
logger.info(fea_cols, out_cols)
|
||||
X = train_data[fea_cols]
|
||||
y = train_data[out_cols]
|
||||
train_X,test_X,train_y,test_y = train_test_split(X, y, test_size=0.2, random_state=42)
|
||||
valid_X,test_X,valid_y,test_y = train_test_split(test_X, test_y, test_size=0.5, random_state=42)
|
||||
|
||||
# 参数
|
||||
other_params = {'learning_rate': 0.1, 'n_estimators': 150, 'max_depth': 10, 'min_child_weight': 1, 'seed': 0, 'subsample': 0.8, 'colsample_bytree': 0.8, 'gamma': 0, 'reg_alpha': 0, 'reg_lambda': 1}
|
||||
print(train_X.shape, train_y.shape)
|
||||
|
||||
gbm = xgb.XGBRegressor(objective='reg:squarederror',**other_params)
|
||||
|
||||
gbm.fit(train_X.values, train_y.values, eval_set=[(valid_X.values, valid_y.values)], early_stopping_rounds=20)
|
||||
|
||||
y_pred = gbm.predict(test_X.values)
|
||||
|
||||
logger.info(f"Root Mean Squared Error on Test set: {np.sqrt(mean_squared_error(test_y, y_pred))}")
|
||||
logger.info(f"R2 score on Test set: {r2_score(test_y, y_pred)}")
|
||||
joblib.dump(gbm, './models/water_pred.joblib')
|
||||
logger.info(f"save_path: ./models/water_pred.joblib")
|
||||
|
||||
if __name__ == '__main__':
|
||||
data = pd.read_csv('./data/preprocessed_example.csv', index_col=0)
|
||||
agg = time_series_to_supervised(data.values, data.columns, 24, 1)
|
||||
train_model(agg)
|
Loading…
Reference in New Issue