系列
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【0】【风况预测评分规则-最终得分R的计算】【已弃用】第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【1】【验证集制作】【已弃用】第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【2】【验证集使用】【已弃用】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【3】【计算最终得分】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【4】【数据管理】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【5】【数据可视化】【测试集_初赛】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【6】【数据可视化】【训练集】
前言
新版数据管理真香,不仅跑10000轮只需要11分30秒,还能边训练边计算最终得分R,而且,比起以前最多只能使用一个验证集,现在能同时使用10个验证集,避免偶然性误差。
前情提要
"""
[风场, 时段, 风机, 时刻, 特征]
self.X_ : shape: (2, 17507, 25, 120, 2) 机舱数据,用作训练;特征 ['变频器电网侧有功功率', '外界温度']
self.X0 : shape: (2, 17507, 25, 120, 2) 机舱数据,用作训练;特征 ['风速', '风向']
self.Y0 : shape: (2, 17507, 25, 20, 2) 机舱数据,用作预测;特征 ['风速', '风向']
[风场, 时段]
self.S : shape: (2, 17507) 季节数据,用作训练
[风场, 时段, 时刻, 特征]
self.W : shape: (2, 17507, 14, 2) 气象数据,用作训练;特征 ['风速', '风向']
[风场, 时段, 风机, 特征]
self.weather : shape: (2, 17520, 26, 2) 机舱数据+气象数据;特征 ['风速', '风向']
[风场, 时段, 风机, 时刻, 特征]
self.test_X_ : shape: (2, 80, 25, 120, 2) 机舱数据,用作测试;特征 ['变频器电网侧有功功率', '外界温度']
self.test_X0 : shape: (2, 80, 25, 120, 2) 机舱数据,用作测试;特征 ['风速', '风向']
[风场, 时段, 时刻, 特征]
self.test_W : shape: (2, 80, 14, 2) 气象数据,用作测试;特征 ['风速', '风向']
"""
制作1个验证集
times = 1
dm.generate_indexes(times)
访问风场1的训练集、验证集和测试集的风速风向数据
f = 0
print(field[f], end='\n\n')
indexes = dm.get_indexes(f)
print(indexes, end='\n\n')
print('训练集', dm.X0[f, indexes].shape, end='\n\n')
indexes = dm.val_indexes[field[f]][0]
print(indexes, end='\n\n')
print('验证集', dm.X0[f, indexes].shape, end='\n\n')
print('测试集', dm.test_X0[f].shape)
哇,格式多么的统一,怎么对待测试集,就怎么对待验证集,完全无缝切换。
但有些人可能更想要保存到本地,然后格式基本上和测试集_初赛一样的那种,那就把验证集保存到本地吧
验证集本地化
要求:和测试集_初赛的文件夹组织形式一致
from main import *
dm = Data_Manager()
dm.load_test_data()
times = 1
dm.generate_indexes(times)
# 验证集索引
pd.DataFrame(
data = {field[f]: dm.val_indexes[field[f]][0] for f in range(field_len)},
index = period
).to_csv('val_indexes.csv', float_format='%.4f', encoding='utf-8')
w_df = pd.DataFrame(
index=np.arange(80 * 14),
columns = ['时段', '时刻', '风速', '风向']
)
w_df.loc[:, ['时段', '时刻']] = np.array(list(itertools.product(period, np.arange(-11, 2+1))))
df = pd.DataFrame(
data = {'time': np.arange(1, 121) * 30},
columns = ['time', '变频器电网侧有功功率', '外界温度', '风速', '风向']
)
root = '验证集'
os.makedirs(root, exist_ok=True)
for f in range(field_len):
os.makedirs(os.path.join(root, field[f]), exist_ok=True)
for m in tqdm(range(machine_len)):
os.makedirs(os.path.join(root, field[f], machine[f][m]), exist_ok=True)
for p in range(period_len):
val_df = df.copy()
val_df.loc[:, ['变频器电网侧有功功率', '外界温度']] = dm.X_[f, dm.val_indexes[field[f]][0][p], m]
val_df.loc[:, ['风速', '风向']] = dm.X0[f, dm.val_indexes[field[f]][0][p], m]
val_df.to_csv(os.path.join(root, field[f], machine[f][m], period[p]) + '.csv', float_format='%.7f', index=False, encoding='utf-8')
val_w_df = w_df.copy()
val_w_df.loc[:, ['风速', '风向']] = dm.W[f, dm.val_indexes[field[f]][0]].reshape(80 * 14, 2)
val_w_df.to_csv(os.path.join(root, field[f], 'weather.csv'), float_format='%.3f', index=False, encoding='utf-8')