Skip to content

Instantly share code, notes, and snippets.

@nipunbatra
Created March 6, 2014 09:36
Show Gist options
  • Save nipunbatra/9386190 to your computer and use it in GitHub Desktop.
Save nipunbatra/9386190 to your computer and use it in GitHub Desktop.
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