Created
March 6, 2014 09:36
-
-
Save nipunbatra/9386190 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
PATH = "/home/nipun/Dropbox/nilmtk_datasets/iawe" | |
from nilmtk.dataset import DataSet | |
import brewer2mpl | |
set3 = brewer2mpl.get_map('Set3', 'qualitative', 12).mpl_colors | |
import matplotlib.pyplot as plt | |
from mpltools import style | |
style.use('ggplot') | |
latexify(columns=2) | |
dataset = DataSet() | |
dataset.load_hdf5(PATH) | |
building = dataset.buildings[1] | |
# 1. sum together split mains and DualSupply appliances | |
building.utility.electric = building.utility.electric.sum_split_supplies() | |
# Fixing implausible voltage values | |
building = prepb.filter_out_implausible_values( | |
building, Measurement('voltage', ''), 160, 260) | |
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) | |
building = prepb.prepend_append_zeros( | |
building, '7-13-2013', '8-4-2013', '1T', 'Asia/Kolkata') | |
# 4. Drop missing samples from mains | |
building = prepb.drop_missing_mains(building) | |
building = prepb.make_common_index(building) | |
appliances = building.utility.electric.get_dataframe_of_appliances() | |
mains = building.utility.electric.get_dataframe_of_mains() | |
appliances = appliances[(appliances.index.day == 24) & | |
(appliances.index.month == 7)] | |
mains = mains[(mains.index.day == 24) & (mains.index.month == 7)] | |
appliances[('unaccounted', 1)] = mains - appliances.sum(axis=1) | |
appliances[('unaccounted', 1)][appliances[('unaccounted', 1)] < 0] = 0 | |
to_drop = [] | |
for col in appliances.columns: | |
if appliances[col].max() < 5: | |
to_drop.append(col) | |
appliances = appliances.drop(to_drop, axis=1) | |
df = appliances | |
df_cumsum = df.cumsum(axis=1) | |
fig, ax = plt.subplots() | |
if df.index.__class__.__name__ == "DatetimeIndex": | |
x = df.index.to_datetime() | |
else: | |
x = df.index.values | |
rectangles = [] | |
rectangles.append(plt.Rectangle((0, 0), 1, 1, fc=set3[0])) | |
for i in range(1, len(df.columns)): | |
ax.fill_between(x, df_cumsum[df.columns[i - 1]].values, | |
df_cumsum[df.columns[i]].values, color=set3[i]) | |
rectangles.append(plt.Rectangle((0, 0), 1, 1, | |
fc=set3[i])) | |
ax.fill_between(x, 0, df_cumsum[df.columns[0]], | |
color=set3[0]) | |
plt.legend(rectangles, [col[0] for col in df.columns], loc=2) | |
plt.ylim((0, 5000)) | |
plt.ylabel("Power (W)") | |
plt.xlabel("Time") | |
plt.tight_layout() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment