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

本文基于学习分享——基于深度学习的NILM负荷分解(二)电器数据提取
在这个基础上,参考nilmtk的手册,再深入理解代码

首先导入

import sys
sys.path.append('G:/Code/')
from nilmtk import DataSet
import numpy as np


test = DataSet(r'G:\Code\DataSet\UKDALE\UK-DALE-2015\ukdale.h5')

building = 1  ## 选择家庭house
test.set_window(start="18-03-2013") ## 2013年3月18号之后的作为数据集

test_elec = test.buildings[building].elec

gt= {
    
    }


首先

test_elec = test.buildings[building].elec

在这里插入图片描述
这里的test是DataSet类型,test_elec是MeterGroup类型
接着是遍历
在这里插入图片描述

for meter in test_elec.submeters().meters:

#首先 test_elec.submeters()返回的是除site_meters以外的新MeterGroup test_elec.submeters()的attribute即meters是一个list nilmtk文档的对应参考

至于list的元素是ElecMeters或者嵌入的MeterGroups
在这里插入图片描述

gen = next(meter.load())

meter是ElecMeter类型,meter.load()返回是a generator of DataFrames,参考
在这里插入图片描述

values = gen.values

此时gen是一个DataFrame
在这里插入图片描述
使用values属性从DataFrame返回一个ndarray
在这里插入图片描述
在这里插入图片描述

index = gen.index

返回跟上面ndarry同样大小对应的一个DatatimeIndex
在这里插入图片描述
在这里插入图片描述

label = meter.label()

参考,返回的是一个描述这个Meter的字符串。
在这里插入图片描述

i = 0
    while(1):
        name = label+str(i)
        if name not in gt:
            break
        else:
            i += 1

用于遍历同一种type的appliance但是不同的instance,比如light有0到14。

    np.save('/Code/test/ukdale_eda/'+name,values)
    gt[name] = 1
    print(values.shape,'   ',index.shape)
    print('saving...', name)

主要是把从DataFrame提取出来的ndarray(即此处的values),根据不同用电器,保存在不同的numpy文件,字典gt用于遍历时候判断是否已遍历。

如for循环第一次遍历的结果,
在这里插入图片描述
第二次是Solar thermal pumping station
在这里插入图片描述
可以看到跟第一次的DataFrame大小不一样。

猜你喜欢

转载自blog.csdn.net/aa2962985/article/details/121109157