# 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:
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)
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...")
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()
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)
"""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')]
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
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)