第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【7】【数据管理】【验证集本地化】

系列

第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【0】【风况预测评分规则-最终得分R的计算】【已弃用】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【1】【验证集制作】【已弃用】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【2】【验证集使用】【已弃用】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【3】【计算最终得分】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【4】【数据管理】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【5】【数据可视化】【测试集_初赛】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【6】【数据可视化】【训练集】

前言

新版数据管理真香,不仅跑10000轮只需要11分30秒,还能边训练边计算最终得分R,而且,比起以前最多只能使用一个验证集,现在能同时使用10个验证集,避免偶然性误差。
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【7】【数据管理】【验证集本地化】

前情提要

"""
               [风场, 时段, 风机, 时刻, 特征]
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)

第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【7】【数据管理】【验证集本地化】

哇,格式多么的统一,怎么对待测试集,就怎么对待验证集,完全无缝切换。
但有些人可能更想要保存到本地,然后格式基本上和测试集_初赛一样的那种,那就把验证集保存到本地吧

验证集本地化

要求:和测试集_初赛的文件夹组织形式一致

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')
上一篇:DM8_读写分离集群部署


下一篇:埃及分数