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

NILM-UKDALE的电器数据提取探索

[复制链接]
发表于 2022-6-27 19:49 | 显示全部楼层 |阅读模式
本文基于学习分享——基于深度学习的NILM负荷分解(二)电器数据提取
在这个基础上,参考nilmtk的手册,再深入理解代码
首先导入
  1. import sys
  2. sys.path.append('G:/Code/')from nilmtk import DataSet
  3. import numpy as np
  4. test = DataSet(r'G:\Code\DataSet\UKDALE\UK-DALE-2015\ukdale.h5')
  5. building =1## 选择家庭house
  6. test.set_window(start="18-03-2013")## 2013年3月18号之后的作为数据集
  7. test_elec = test.buildings[building].elec
  8. gt={}
复制代码
首先
  1. test_elec = test.buildings[building].elec
复制代码

这里的test是DataSet类型,test_elec是MeterGroup类型
接着是遍历


  1. for meter in test_elec.submeters().meters:
复制代码
#首先 test_elec.submeters()返回的是除site_meters以外的新MeterGroup test_elec.submeters()的attribute即meters是一个list nilmtk文档的对应参考
至于list的元素是ElecMeters或者嵌入的MeterGroups


  1. gen =next(meter.load())
复制代码
meter是ElecMeter类型,meter.load()返回是a generator of DataFrames,参考


  1. values = gen.values
复制代码
此时gen是一个DataFrame


使用values属性从DataFrame返回一个ndarray



  1. index = gen.index
复制代码
返回跟上面ndarry同样大小对应的一个DatatimeIndex



  1. label = meter.label()
复制代码
参考,返回的是一个描述这个Meter的字符串。


  1. i =0while(1):
  2.         name = label+str(i)if name notin gt:breakelse:
  3.             i +=1
复制代码
用于遍历同一种type的appliance但是不同的instance,比如light有0到14。
  1.     np.save('/Code/test/ukdale_eda/'+name,values)
  2.     gt[name]=1print(values.shape,'   ',index.shape)print('saving...', name)
复制代码
主要是把从DataFrame提取出来的ndarray(即此处的values),根据不同用电器,保存在不同的numpy文件,字典gt用于遍历时候判断是否已遍历。
如for循环第一次遍历的结果,


第二次是Solar thermal pumping station


可以看到跟第一次的DataFrame大小不一样。

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-26 05:22 , Processed in 0.091922 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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