# Maps from human-readable name to path
DATASETS = OrderedDict()
DATASETS['REDD'] = join(DATASET_PATH, 'redd/low_freq')
# DATASETS['Smart*'] = join(DATASET_PATH, 'smart')
#DATASETS['Pecan Street'] = join(DATASET_PATH, 'pecan_1min')
# DATASETS['AMPds'] = join(DATASET_PATH, 'ampds')
DATASETS['iAWE'] = join(DATASET_PATH, 'iawe')
DATASETS['UKPD'] = '/data/mine/vadeec/h5_cropped'

if LOAD_DATASETS:
    electrics = {}
    proportions = {}
    for dataset_name, dataset_path in DATASETS.iteritems():
        dataset = DataSet()
        print("Loading", dataset_path)
        dataset.load_hdf5(dataset_path, [1])
        building = dataset.buildings[1]
        electric = building.utility.electric
        electrics[dataset_name] = electric
        proportions[dataset_name] = proportion_per_appliance(electric, 
                                                             merge=True)

def pretty_name_appliance_names(appliance_name_list):
    names = [name.replace('_', ' ')  for name in appliance_name_list]
    names = [name[0].upper() + name[1:] for name in names]
    for old, new in [('Htpc', 'Home theatre PC'), 
                     ('Boiler', 'Gas boiler'),
                     ('Air conditioner', 'Air conditioning')]:
        try:
            names[names.index(old)] = new
        except ValueError:
예제 #2
0
import matplotlib.pyplot as plt
import resource


PATH = '/home/nipun/Desktop/AMPds/'
EXPORT_PATH = '/home/nipun/Desktop/temp/ampds/'
DISAGG_FEATURE = Measurement('power', 'active')

# Setting the limits to 5 GB RAM usage
megs = 5000
resource.setrlimit(resource.RLIMIT_AS, (megs * 1048576L, -1L))

# Loading data from HDF5 store
dataset = DataSet()
t1 = time.time()
dataset.load_hdf5(EXPORT_PATH)
t2 = time.time()
print("Runtime to import from HDF5 = {:.2f}".format(t2 - t1))

# Experiment on first (and only) building
b = dataset.buildings[1]

# Filtering to include only top 8 appliances
b = filter_top_k_appliances(b, 3)

# Dividing the data into train and test
train, test = train_test_split(b)

# Again subdivide data into train, test for testing on even smaller data
#train, test = train_test_split(train, test_size=.5)
예제 #3
0
import nilmtk.preprocessing.electricity.building as prepb
import nilmtk.preprocessing.electricity.single as prep
from nilmtk.stats.electricity.building import plot_missing_samples_using_bitmap
from nilmtk.sensors.electricity import Measurement
from nilmtk.dataset import DataSet

dataset = DataSet()
dataset.load_hdf5("/home/nipun/Dropbox/nilmtk_datasets/iawe")

building = dataset.buildings[1]

# 1. sum together split mains and DualSupply appliances
building.utility.electric = building.utility.electric.sum_split_supplies()

# optional. (required for iAWE) remove samples where voltage outside range
# Fixing implausible voltage values
building = prepb.filter_out_implausible_values(
    building, Measurement('voltage', ''), 160, 260)

# optional. (required for iAWE) Note that this will remove motor as it does not have
# any data in this period
building = prepb.filter_datetime(
    building, '7-13-2013', '8-4-2013')

# 2. downsample mains, circuits and appliances
building = prepb.downsample(building, rule='1T')

# 3. Fill large gaps in appliances with zeros and forward-fill small gaps
building = prepb.fill_appliance_gaps(building)

# optional. (required for iAWE)
#                              """submetered > 70%""")

for key, value in COLUMNS.iteritems():
    if OUTPUT_LATEX:
        COLUMNS[key] = """\textbf{\specialcell[h]{""" + value + """}}"""
    else:
        COLUMNS[key] = key

stats_df = pd.DataFrame(index=DATASETS.keys(), columns=COLUMNS.values())

for ds_name, ds_path in DATASETS.iteritems():
    if LOAD_DATASETS:
        dataset = DataSet()
        print("##################################################")
        print("Loading", ds_path)
        dataset.load_hdf5(ds_path)

        if ds_name == "Smart*":
            building = dataset.buildings[1]
            building = prepb.filter_out_implausible_values(
                building, Measurement('power', 'active'), max_threshold=20000)
            #electric = building.utility.electric
            #electric.crop('2012-06-05', '2012-06-10')
            #building = prepb.filter_channels_with_less_than_x_samples(
            #    building, 100)
            dataset.buildings[1] = building

            print("Preprocessed!")

        if ds_name == 'iAWE':
            print("Pre-processing iAWE...")
예제 #5
0
    return building


def preprocess_pecan(building, freq):
    building = prepb.downsample(building, rule=freq)
    building = prepb.filter_top_k_appliances(building, k=6)
    return building

preprocess_map = {'iawe': preprocess_iawe, 'redd/low_freq': preprocess_redd,
                  'ampds': preprocess_ampds, 'pecan_1min': preprocess_pecan}

# <codecell>

dataset_name = "iawe"
dataset = DataSet()
dataset.load_hdf5(os.path.join(base_path, dataset_name))
print("Loaded {}".format(dataset_name))
for freq in frequencies:
    print("*" * 80)
    print("Loading {}".format(freq))
    building = dataset.buildings[1]
    building = preprocess_map[dataset_name](building, freq)
    print("Number of appliance left = {}".format(
        len(building.utility.electric.appliances.keys())))
    print("Dividing data into test and train")
    train, test = train_test_split(building, train_size=0.5)
    for disaggregator_name, disaggregator in disaggregators.iteritems():
        # Train
        t1 = time.time()
        disaggregator.train(train, disagg_features=[DISAGG_FEATURE])
        t2 = time.time()
예제 #6
0
import nilmtk.preprocessing.electricity.building as prepb
import nilmtk.preprocessing.electricity.single as prep
from nilmtk.stats.electricity.building import plot_missing_samples_using_bitmap
from nilmtk.sensors.electricity import Measurement
from nilmtk.dataset import DataSet

dataset = DataSet()
dataset.load_hdf5("/home/nipun/Dropbox/nilmtk_datasets/redd/low_freq")
# dataset.load_hdf5("/home/nipun/Dropbox/nilmtk_datasets/iawe")

building = dataset.buildings[1]

# 1. sum together split mains and DualSupply appliances
building.utility.electric = building.utility.electric.sum_split_supplies()

# optional. (required for iAWE) remove samples where voltage outside range
# Fixing implausible voltage values
# building = prepb.filter_out_implausible_values(
#    building, Measurement('voltage', ''), 160, 260)

# optional. (required for iAWE) Note that this will remove motor as it does not have
# any data in this period
# building = prepb.filter_datetime(
#    building, '7-13-2013', '8-4-2013')

# 2. downsample mains, circuits and appliances
building = prepb.downsample(building, rule='1T')

# 3. Fill large gaps in appliances with zeros and forward-fill small gaps
building = prepb.fill_appliance_gaps(building)
예제 #7
0
"""Indian AC"""

DATA_PATH = "/home/nipun/Dropbox/nilmtk_datasets/iawe/"
FIG_SAVE_PATH = "/home/nipun/Desktop/abc.pdf"
from nilmtk.dataset import DataSet
import nilmtk.preprocessing.electricity.building as prepb
import nilmtk.preprocessing.electricity.single as prep
from nilmtk.sensors.electricity import Measurement
import matplotlib.pyplot as plt

ds = DataSet()
ds.load_hdf5(DATA_PATH)

# First building
building = ds.buildings[1]

# 1. sum together split mains and DualSupply appliances
building.utility.electric = building.utility.electric.sum_split_supplies()

# optional. (required for iAWE) remove samples where voltage outside range
# Fixing implausible voltage values
building = prepb.filter_out_implausible_values(
    building, Measurement('voltage', ''), 160, 260)

# optional. (required for iAWE) Note that this will remove motor as it does not have
# any data in this period
building = prepb.filter_datetime(
    building, '7-13-2013', '8-4-2013')

ac = building.utility.electric.appliances[('air conditioner', 1)]
ac_power = ac[('power', 'active')]
예제 #8
0
from __future__ import print_function
from nilmtk.dataset import DataSet
from os.path import expanduser

H5_DIR = expanduser('~/Dropbox/Data/nilmtk_datasets/redd/low_freq/')

dataset = DataSet()
print('loading', H5_DIR)
dataset.load_hdf5(H5_DIR)

electric = dataset.buildings[1].utility.electric
예제 #9
0
DATASET_PATH = expanduser('~/Dropbox/Data/nilmtk_datasets/redd/low_freq')
N_APPLIANCES = 3
LATEX_PDF_OUTPUT_FILENAME = expanduser('~/PhD/writing/papers/e_energy_2014/'
                                       'nilmtk_e_energy_2014/figures/'
                                       'lost_samples.pdf')

plt.close('all')
latexify(columns=1, fig_height=1.5)
fig = plt.figure()
ax = fig.add_subplot(111)

if LOAD_DATASET:
    dataset = DataSet()
    print('Loading', DATASET_PATH)
    dataset.load_hdf5(DATASET_PATH)

electric = dataset.buildings[1].utility.electric
electric_cropped = deepcopy(electric)
electric_cropped.appliances = {k:v for k,v in electric.appliances.items()[:N_APPLIANCES]}
bstats.plot_missing_samples_using_bitmap(electric_cropped, ax=ax, cmap=plt.cm.Greys, gain=5)
format_axes(ax)
xlim = ax.get_xlim()
ax.set_title('')
plt.tight_layout()

for spine in ['top', 'right']:
    ax.spines[spine].set_visible(True)
    ax.spines[spine].set_color(SPINE_COLOR)
    ax.spines[spine].set_linewidth(0.5)