In [1]:
from nilmtk import HDFDataStore, ElecMeter
from nilmtk.stats import TotalEnergy, DropoutRate

ds = HDFDataStore('redd.h5')

ElecMeter.meter_devices.update({
    'test model': {
        'sample_period': 10,
        'max_sample_period': 30,
        'measurements': [{'physical_quantity': 'power',
                          'type': 'apparent',
                          'lower_limit': 0,
                          'upper_limit': 50000}]
    }})

meter = ElecMeter(ds, {'data_location': '/building5/elec/meter1',
                       'device_model': 'test model',
                       'preprocessing_applied': {'clip': True}})

source = meter.get_source_node()

total_energy = TotalEnergy(source)
total_energy.run()


Couldn't import dot_parser, loading of dot files will not be possible.

In [2]:
total_energy.results.to_dict()


Out[2]:
{'statistics': {'energy': {'apparent': 30.793646871022119}}}

In [3]:
from nilmtk.preprocessing import Clip

source = meter.get_source_node()
clip = Clip(source)
total_energy = TotalEnergy(clip)
dropout_rate = DropoutRate(total_energy)
dropout_rate.run()

print(total_energy.results.to_dict())
print(dropout_rate.results.combined())


{'statistics': {'energy': {'apparent': 30.793646871022119}}}
0.202210726725

In [4]:
for chunk in meter.power_series():
    print(chunk.head())


2011-04-18 00:24:03-04:00    115.830002
2011-04-18 00:24:04-04:00    115.940002
2011-04-18 00:24:05-04:00    115.800003
2011-04-18 00:24:06-04:00    115.989998
2011-04-18 00:24:07-04:00    115.739998
Name: (power, apparent), dtype: float32

In [5]:
clip = Clip()
clip.upper = 10
clip.lower = 0
for chunk in meter.power_series(preprocessing=[clip]):
    print(chunk.head())


2011-04-18 00:24:03-04:00    10
2011-04-18 00:24:04-04:00    10
2011-04-18 00:24:05-04:00    10
2011-04-18 00:24:06-04:00    10
2011-04-18 00:24:07-04:00    10
Name: (power, apparent), dtype: float32

In [6]:
from nilmtk import DataSet

dataset = DataSet()
dataset.load(ds)


Out[6]:
<nilmtk.dataset.DataSet at 0x7ff0cfcfa350>

In [6]:


In [7]:
import nilmtk
nilmtk.global_meter_group.select(site_meter=True)


Out[7]:
MeterGroup(meters=
  ElecMeter(instance=1, building=1, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=2, building=1, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=1, building=3, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=2, building=3, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=1, building=2, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=2, building=2, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=1, building=5, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=2, building=5, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=1, building=4, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=2, building=4, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=1, building=6, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=2, building=6, dataset='REDD', site_meter, appliances=[])
)

In [8]:
nilmtk.global_meter_group.select_using_appliances(type='fridge')


Out[8]:
MeterGroup(meters=
  ElecMeter(instance=5, building=1, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])
  ElecMeter(instance=7, building=3, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])
  ElecMeter(instance=9, building=2, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])
  ElecMeter(instance=18, building=5, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])
  ElecMeter(instance=8, building=6, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])
)

In [9]:
dataset.buildings[1].elec['fridge']


Out[9]:
ElecMeter(instance=5, building=1, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])

In [10]:
dataset.buildings[1].elec


Out[10]:
MeterGroup(meters=
  ElecMeter(instance=1, building=1, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=2, building=1, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=5, building=1, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])
  ElecMeter(instance=6, building=1, dataset='REDD', appliances=[Appliance(type='dish washer', instance=1)])
  ElecMeter(instance=7, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=1)])
  ElecMeter(instance=8, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=2)])
  ElecMeter(instance=9, building=1, dataset='REDD', appliances=[Appliance(type='light', instance=1)])
  ElecMeter(instance=11, building=1, dataset='REDD', appliances=[Appliance(type='microwave', instance=1)])
  ElecMeter(instance=12, building=1, dataset='REDD', appliances=[Appliance(type='unknown', instance=1)])
  ElecMeter(instance=13, building=1, dataset='REDD', appliances=[Appliance(type='electric space heater', instance=1)])
  ElecMeter(instance=14, building=1, dataset='REDD', appliances=[Appliance(type='electric stove', instance=1)])
  ElecMeter(instance=15, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=3)])
  ElecMeter(instance=16, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=4)])
  ElecMeter(instance=17, building=1, dataset='REDD', appliances=[Appliance(type='light', instance=2)])
  ElecMeter(instance=18, building=1, dataset='REDD', appliances=[Appliance(type='light', instance=3)])
  ElecMeter(instance=19, building=1, dataset='REDD', appliances=[Appliance(type='unknown', instance=2)])
  MeterGroup(meters=
    ElecMeter(instance=3, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])
    ElecMeter(instance=4, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])
  )
  MeterGroup(meters=
    ElecMeter(instance=10, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])
    ElecMeter(instance=20, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])
  )
)

In [12]:
elec = dataset.buildings[1].elec

In [13]:
elec['fridge'].plot()



In [13]:
from nilmtk.elecmeter import ElecMeterID

meter = elec[ElecMeterID(1,1,'REDD')]

print(meter.metadata)
#print(meter.device)

source = meter.get_source_node()
clip = Clip(source)
total_energy = TotalEnergy(clip)
dropout_rate = DropoutRate(total_energy)
dropout_rate.run()

print(total_energy.results.to_dict())
print(dropout_rate.results.combined())


{'device_model': 'REDD_whole_house', 'site_meter': True, 'data_location': '/building1/elec/meter1'}
{'statistics': {'energy': {'apparent': 99.271402796506891}}}
0.351143915972

In [14]:
# dropout rate ignoring gaps...

sections = meter.good_sections()

print(sections)


[TimeFrame(start='2011-04-18 09:22:09-04:00', end='2011-04-18 13:58:47-04:00', empty=False), TimeFrame(start='2011-04-18 14:03:07-04:00', end='2011-04-19 12:13:38-04:00', empty=False), TimeFrame(start='2011-04-19 12:14:17-04:00', end='2011-04-19 18:45:19-04:00', empty=False), TimeFrame(start='2011-04-19 20:20:08-04:00', end='2011-04-20 01:54:32-04:00', empty=False), TimeFrame(start='2011-04-20 01:55:36-04:00', end='2011-04-20 02:28:14-04:00', empty=False), TimeFrame(start='2011-04-20 02:28:52-04:00', end='2011-04-21 03:17:09-04:00', empty=False), TimeFrame(start='2011-04-21 06:17:17-04:00', end='2011-04-21 17:45:06-04:00', empty=False), TimeFrame(start='2011-04-21 19:41:29-04:00', end='2011-04-22 22:46:57-04:00', empty=False), TimeFrame(start='2011-04-22 22:48:33-04:00', end='2011-04-24 03:48:50-04:00', empty=False), TimeFrame(start='2011-04-24 03:52:24-04:00', end='2011-04-24 20:46:36-04:00', empty=False), TimeFrame(start='2011-04-24 20:47:17-04:00', end='2011-04-27 02:50:19-04:00', empty=False), TimeFrame(start='2011-04-27 02:51:21-04:00', end='2011-04-27 03:17:34-04:00', empty=False), TimeFrame(start='2011-04-27 03:21:15-04:00', end='2011-04-28 05:57:47-04:00', empty=False), TimeFrame(start='2011-04-29 23:10:34-04:00', end='2011-05-01 09:44:42-04:00', empty=False), TimeFrame(start='2011-05-01 09:47:18-04:00', end='2011-05-01 23:14:16-04:00', empty=False), TimeFrame(start='2011-05-01 23:14:17-04:00', end='2011-05-02 17:04:59-04:00', empty=False), TimeFrame(start='2011-05-02 17:07:27-04:00', end='2011-05-03 17:30:17-04:00', empty=False), TimeFrame(start='2011-05-03 17:32:49-04:00', end='2011-05-03 17:33:44-04:00', empty=False), TimeFrame(start='2011-05-06 10:51:46-04:00', end='2011-05-07 01:53:10-04:00', empty=False), TimeFrame(start='2011-05-07 01:53:55-04:00', end='2011-05-07 02:38:15-04:00', empty=False), TimeFrame(start='2011-05-07 02:40:43-04:00', end='2011-05-07 11:59:16-04:00', empty=False), TimeFrame(start='2011-05-11 03:19:43-04:00', end='2011-05-12 17:48:38-04:00', empty=False), TimeFrame(start='2011-05-12 20:14:30-04:00', end='2011-05-13 05:16:24-04:00', empty=False), TimeFrame(start='2011-05-22 16:04:46-04:00', end='2011-05-22 23:39:01-04:00', empty=False), TimeFrame(start='2011-05-22 23:41:35-04:00', end='2011-05-23 09:22:08-04:00', empty=False), TimeFrame(start='2011-05-23 10:31:34-04:00', end='2011-05-24 14:32:05-04:00', empty=False), TimeFrame(start='2011-05-24 15:55:33-04:00', end='2011-05-24 15:57:02-04:00', empty=False)]

In [15]:
full_sections_results = meter.good_sections(full_results=True)

In [16]:
full_sections_results.plot()



In [17]:
source = meter.get_source_node(sections=sections)
dropout_rate = DropoutRate(source)
dropout_rate.run()

print(dropout_rate.results.combined())


0.0085459790444

In [18]:
dropout_rate.results


Out[18]:
                           dropout_rate                        end  n_samples
2011-04-18 09:22:09-04:00      0.000120  2011-04-18 13:58:46-04:00      16596
2011-04-18 14:03:07-04:00      0.000113  2011-04-19 12:13:37-04:00      79822
2011-04-19 12:14:17-04:00      0.000000  2011-04-19 18:45:18-04:00      23462
2011-04-19 20:20:08-04:00      0.000000  2011-04-20 01:54:31-04:00      20064
2011-04-20 01:55:36-04:00      0.000000  2011-04-20 02:28:13-04:00       1958
2011-04-20 02:28:52-04:00      0.000336  2011-04-21 03:17:08-04:00      89267
2011-04-21 06:17:17-04:00      0.000000  2011-04-21 17:45:05-04:00      41269
2011-04-21 19:41:29-04:00      0.000010  2011-04-22 22:46:56-04:00      97527
2011-04-22 22:48:33-04:00      0.000201  2011-04-24 03:48:49-04:00     104396
2011-04-24 03:52:24-04:00      0.000115  2011-04-24 20:46:35-04:00      60845
2011-04-24 20:47:17-04:00      0.000072  2011-04-27 02:50:18-04:00     194568
2011-04-27 02:51:21-04:00      0.000000  2011-04-27 03:17:33-04:00       1573
2011-04-27 03:21:15-04:00      0.000010  2011-04-28 05:57:46-04:00      95791
2011-04-29 23:10:34-04:00      0.000153  2011-05-01 09:44:41-04:00     124429
2011-05-01 09:47:18-04:00      0.000000  2011-05-01 23:14:15-04:00      48418
2011-05-01 23:14:17-04:00      0.000000  2011-05-02 17:04:58-04:00      64242
2011-05-02 17:07:27-04:00      0.101595  2011-05-03 17:30:16-04:00      78853
2011-05-03 17:32:49-04:00      0.000000  2011-05-03 17:33:43-04:00         55
2011-05-06 10:51:46-04:00      0.100899  2011-05-07 01:53:09-04:00      48627
2011-05-07 01:53:55-04:00      0.114286  2011-05-07 02:38:14-04:00       2356
2011-05-07 02:40:43-04:00      0.000000  2011-05-07 11:59:15-04:00      33513
2011-05-11 03:19:43-04:00      0.000346  2011-05-12 17:48:37-04:00     138487
2011-05-12 20:14:30-04:00      0.000000  2011-05-13 05:16:23-04:00      32514
2011-05-22 16:04:46-04:00      0.000257  2011-05-22 23:39:00-04:00      27248
2011-05-22 23:41:35-04:00      0.000000  2011-05-23 09:22:07-04:00      34833
2011-05-23 10:31:34-04:00      0.000000  2011-05-24 14:32:04-04:00     100831
2011-05-24 15:55:33-04:00      0.000000  2011-05-24 15:57:02-04:00         90

In [19]:
dropout_rate.results.plot()



In [20]:
elec.select_using_appliances(category='single-phase induction motor')


Out[20]:
MeterGroup(meters=
  ElecMeter(instance=5, building=1, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])
  ElecMeter(instance=6, building=1, dataset='REDD', appliances=[Appliance(type='dish washer', instance=1)])
  MeterGroup(meters=
    ElecMeter(instance=10, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])
    ElecMeter(instance=20, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])
  )
)

In [21]:
elec.select_using_appliances(category='resistive')


Out[21]:
MeterGroup(meters=
  ElecMeter(instance=6, building=1, dataset='REDD', appliances=[Appliance(type='dish washer', instance=1)])
  ElecMeter(instance=13, building=1, dataset='REDD', appliances=[Appliance(type='electric space heater', instance=1)])
  ElecMeter(instance=14, building=1, dataset='REDD', appliances=[Appliance(type='electric stove', instance=1)])
  MeterGroup(meters=
    ElecMeter(instance=3, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])
    ElecMeter(instance=4, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])
  )
  MeterGroup(meters=
    ElecMeter(instance=10, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])
    ElecMeter(instance=20, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])
  )
)

In [22]:
from nilmtk.disaggregate import CombinatorialOptimisation
co = CombinatorialOptimisation()
# co.train(elec)
# co.model

In [23]:
fridge = elec['fridge']

In [24]:
fridge.available_power_ac_types()


Out[24]:
['active']

In [25]:
fridge.dominant_appliance().identifier


Out[25]:
ApplianceID(type='fridge', instance=1)

In [26]:
elec.mains()


Out[26]:
MeterGroup(meters=
  ElecMeter(instance=1, building=1, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=2, building=1, dataset='REDD', site_meter, appliances=[])
)

In [27]:
graph = elec.wiring_graph()

In [28]:
elec


Out[28]:
MeterGroup(meters=
  ElecMeter(instance=1, building=1, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=2, building=1, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=5, building=1, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])
  ElecMeter(instance=6, building=1, dataset='REDD', appliances=[Appliance(type='dish washer', instance=1)])
  ElecMeter(instance=7, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=1)])
  ElecMeter(instance=8, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=2)])
  ElecMeter(instance=9, building=1, dataset='REDD', appliances=[Appliance(type='light', instance=1)])
  ElecMeter(instance=11, building=1, dataset='REDD', appliances=[Appliance(type='microwave', instance=1)])
  ElecMeter(instance=12, building=1, dataset='REDD', appliances=[Appliance(type='unknown', instance=1)])
  ElecMeter(instance=13, building=1, dataset='REDD', appliances=[Appliance(type='electric space heater', instance=1)])
  ElecMeter(instance=14, building=1, dataset='REDD', appliances=[Appliance(type='electric stove', instance=1)])
  ElecMeter(instance=15, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=3)])
  ElecMeter(instance=16, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=4)])
  ElecMeter(instance=17, building=1, dataset='REDD', appliances=[Appliance(type='light', instance=2)])
  ElecMeter(instance=18, building=1, dataset='REDD', appliances=[Appliance(type='light', instance=3)])
  ElecMeter(instance=19, building=1, dataset='REDD', appliances=[Appliance(type='unknown', instance=2)])
  MeterGroup(meters=
    ElecMeter(instance=3, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])
    ElecMeter(instance=4, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])
  )
  MeterGroup(meters=
    ElecMeter(instance=10, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])
    ElecMeter(instance=20, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])
  )
)

In [29]:
elec.draw_wiring_graph()



In [30]:
elec['fridge'].upstream_meter() == elec['microwave'].upstream_meter()


Out[30]:
True

In [31]:
elec['fridge'].upstream_meter()


Out[31]:
MeterGroup(meters=
  ElecMeter(instance=1, building=1, dataset='REDD', site_meter, appliances=[])
  ElecMeter(instance=2, building=1, dataset='REDD', site_meter, appliances=[])
)

In [32]:
from nilmtk import MeterGroup
from nilmtk.elecmeter import ElecMeterID

In [33]:
nilmtk.global_meter_group.from_list([ElecMeterID(3,1,'REDD'), 
                                       (
                                            ElecMeterID(1,1,'REDD'),
                                            (ElecMeterID(2,1,'REDD'), ElecMeterID(4,1,'REDD'))
                                       )])


Out[33]:
MeterGroup(meters=
  ElecMeter(instance=3, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])
  MeterGroup(meters=
    ElecMeter(instance=1, building=1, dataset='REDD', site_meter, appliances=[])
    MeterGroup(meters=
      ElecMeter(instance=2, building=1, dataset='REDD', site_meter, appliances=[])
      ElecMeter(instance=4, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])
    )
  )
)

In [34]:
from nilmtk import ElecMeter
ElecMeter(meter_id=ElecMeterID(1,1,'x'))


Out[34]:
ElecMeter(instance=1, building=1, dataset='x', appliances=[])

In [35]:
elec.identifier


Out[35]:
(ElecMeterID(instance=1, building=1, dataset='REDD'),
 ElecMeterID(instance=2, building=1, dataset='REDD'),
 ElecMeterID(instance=5, building=1, dataset='REDD'),
 ElecMeterID(instance=6, building=1, dataset='REDD'),
 ElecMeterID(instance=7, building=1, dataset='REDD'),
 ElecMeterID(instance=8, building=1, dataset='REDD'),
 ElecMeterID(instance=9, building=1, dataset='REDD'),
 ElecMeterID(instance=11, building=1, dataset='REDD'),
 ElecMeterID(instance=12, building=1, dataset='REDD'),
 ElecMeterID(instance=13, building=1, dataset='REDD'),
 ElecMeterID(instance=14, building=1, dataset='REDD'),
 ElecMeterID(instance=15, building=1, dataset='REDD'),
 ElecMeterID(instance=16, building=1, dataset='REDD'),
 ElecMeterID(instance=17, building=1, dataset='REDD'),
 ElecMeterID(instance=18, building=1, dataset='REDD'),
 ElecMeterID(instance=19, building=1, dataset='REDD'),
 (ElecMeterID(instance=3, building=1, dataset='REDD'),
  ElecMeterID(instance=4, building=1, dataset='REDD')),
 (ElecMeterID(instance=10, building=1, dataset='REDD'),
  ElecMeterID(instance=20, building=1, dataset='REDD')))

In [36]:
elec.mains().total_energy()


Out[36]:
167.76623618641219

In [37]:
# energy_per_meter = elec.energy_per_meter()

In [38]:
# energy_per_meter

In [39]:
elec['fridge'].total_energy(full_results=True).combined()


Out[39]:
active    44.750925
dtype: float64

In [40]:
# fraction = elec.fraction_per_meter()

In [41]:
elec.available_power_ac_types()


Out[41]:
{'active', 'apparent'}

In [42]:
elec['fridge'].when_on().next().head()


Out[42]:
2011-04-18 09:22:13-04:00    False
2011-04-18 09:22:16-04:00    False
2011-04-18 09:22:20-04:00    False
2011-04-18 09:22:23-04:00    False
2011-04-18 09:22:26-04:00    False
Name: (power, active), dtype: bool

In [43]:
elec['fridge'].min_on_power_threshold()


Out[43]:
10

In [44]:
from nilmtk.electric import align_two_meters

gne = align_two_meters(elec['fridge'], elec.mains())

In [45]:
head = gne.next().head()

In [46]:
head.icol(0) - head.icol(1)


Out[46]:
2011-04-18 09:22:12-04:00   -334.914978
2011-04-18 09:22:15-04:00   -335.973297
2011-04-18 09:22:18-04:00   -335.683350
2011-04-18 09:22:21-04:00   -335.796661
2011-04-18 09:22:24-04:00   -335.329987
Freq: 3S, dtype: float32

In [47]:
meter.dropout_rate(sections=sections)


Out[47]:
0.0085459790443974705

In [47]: