找回密码
 立即注册
查看: 273|回复: 0

学习分享——基于深度学习的NILM负荷分解(二)电器数据提取

[复制链接]
发表于 2022-6-28 15:02 | 显示全部楼层 |阅读模式
前一阵参加比赛,NILM就放了放,开始填坑、、、
GOGOGO~

数据准备

根据上一篇中提到的,我这里使用的是UK-DALE
没有下载的同学可以回到上一篇看一下(学习分享——基于深度学习的NILM负荷分解(一)对DL的看法&准备工作)
这里我直接用已经转好格式的ukdale.h5

读取数据还是用NILMTK

如何配置nilmtk,可以参照我另一篇博文,里面写的比较详细(NILM(非侵入式电力负荷监测)学习笔记 —— 准备工作(一)配置环境NILMTK Toolkit)
我们这次只需要用到其中读取data数据的方法就行了,之后我们自己来处理数据。
  1. from nilmtk import DataSet
  2. test = DataSet('E:\\Download\\UK-DALE-disaggregated\\ukdale.h5\\ukdale.h5')
复制代码
加载数据只需要一句代码就行了,可以读到五间房子中几年的电器用电数据。
可以看到数据包含3项。


    其中buildings包含5个房间的所用用电器的数据

上图可见第一间房子中包含了69个电器,53个计量表。
我们之后读取计量表的信息为用电总功率。
    其中metadata里面是这份数据的介绍,


    其中store是HDF格式的数据。



提取数据


我这边使用第一个房子的数据来进行试验,上图可以看到第一间房子的信息是从2012到2015,数据量对于测试来讲还是比较多,还考虑到测试所选取的五个电器的共存时间,我们这里选取18-03-2013之后的数据。
  1. building = 1  ## 选择家庭house
  2. test.set_window(start="18-03-2013") ## 2013年3月18号之后的作为数据集
  3. test_elec = test.buildings[building].elec
复制代码
取出第一个房子的电器列表后,我们遍历所有电表
电器名称+电器序号 作为文件名,保存每个电器的数据(一些电器,例如灯,会有多个,就是序号)
  1. gt= {}
  2. for meter in test_elec.submeters().meters:
  3.     gen = next(meter.load())
  4.     values = gen.values
  5.     index = gen.index
  6.     label = meter.label()
  7.     i = 0;
  8.     while(1):
  9.         name = label+str(i)
  10.         if name not in gt:
  11.             break
  12.         else:
  13.             i += 1
  14.     np.save('UKData/'+name,values)
  15.     gt[name] = 1
  16.     print(values.shape,'   ',index.shape)
  17.     print('saving...', name)
复制代码
我这保存的路径是当前py目录下的UKData文件夹里面,自行修改。
运行中如下


之后可以看到我们保存出来的所有电器的数据


今天就先到这,
下一文从电器中挑选五个典型电器,
来生成训练数据和标签,以及训练。

To be continued.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-26 03:31 , Processed in 0.062752 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表