In [88]:
%matplotlib inline
import pandas as pd
from datetime import datetime as dt, timedelta
# uncomment below if you'd like to be able to zoom in graphics
# import mpld3
# mpld3.enable_notebook()
style = {'figsize': (12, 3), 'grid': True}
df_before = pd.read_csv('Demand.csv', names=['demand'])
df_before['dt'] = [(dt(2013, 1, 1) + timedelta(hours=1)*x) for x in range(8760)]
df_before = df_before.set_index('dt')
df_before.columns = ['Demand (W)']
df_before['Demand (W)'] *= 1000 # convert to W
df_before.plot(title='Lexington, KY, Demand, 2013', **style)
df_before.head()
Out[88]:
In [89]:
'''
import json
JSON_FILE = 'SolarOutput.json'
with open(JSON_FILE) as f:
solar_energy = json.load(f)['Consumption']['Power']
df_carve = pd.DataFrame(solar_energy, columns=['Solar Output (W)'])
'''
df_carve = pd.read_csv('Solarad_KY_Versaille_2013.csv', header=None)
df_carve.columns = ['Solar Output (W)']
df_carve['dt'] = [(dt(2013, 1, 1) + timedelta(hours=1)*x) for x in range(8760)]
df_carve.set_index('dt', inplace=True)
df_carve *= 1000 # convert to W
df_carve.plot(title='Solar Output (W)', **style)
df_carve.head(24)
Out[89]:
In [90]:
df_after = df_before['Demand (W)'] - df_carve['Solar Output (W)']
df_after.plot(title='Lexington, KY, Demand after Solar Carveout, 2013', **style)
df_after.head(24)
Out[90]:
In [91]:
df_csv = df_after/1000 # convert back to kW for export
df_csv.to_csv('Carveout.csv', index=False)
In [92]:
# place everything in one dataframe for analysis
df = pd.DataFrame([df_before.index, df_before['Demand (W)'], df_after]).T
df = df.set_index(0)
df.index.name = 'dt'
df.columns = ['before', 'after']
df.head()
Out[92]:
In [93]:
bMax = df['before'].max()
aMax = df['after'].max()
bSum = df['before'].sum()
aSum = df['after'].sum()
print('Annual Max (W)')
print('\tBEFORE:\t', bMax)
print('\tAFTER:\t', aMax)
print('\t% DIF:\t {:.2f}%\n'.format((aMax - bMax)/bMax*100))
print('Annual Demand (kW)')
print('\tBEFORE:\t {:.2f}'.format(bSum/1000))
print('\tAFTER:\t {:.2f}'.format(aSum/1000))
print('\t% DIF:\t {:.2f}%\n'.format((aSum - bSum)/bSum*100))
In [94]:
tests = {'demand': 'max', 'energy': 'sum'}
aggregation = {'before': tests, 'after': tests}
df_agg_month = df.groupby(df.index.month).agg(aggregation)
df_effects = pd.DataFrame()
before, after = df_agg_month['before'], df_agg_month['after']
df_effects['Demand Reduction (% Dec)'] = (before['demand'] - after['demand'])/before['demand'] * 100
df_effects['Energy Reduction (% Dec)'] = (before['energy'] - after['energy'])/before['energy'] * 100
df_effects.index.name = 'month'
df_effects.plot.bar(title='% Demand and Energy Reduction if Solar Implemented', **style)
df_effects
Out[94]:
In [95]:
import json
JSON_FILE = 'StorageOutput.json'
with open(JSON_FILE) as f:
after_storage = json.load(f)['demandAfterBattery']
after_storage = pd.DataFrame(after_storage, columns=['Storage'])
JSON_FILE2 = 'SolarStorageOutput.json'
with open(JSON_FILE) as f:
after_storageAndSolar = json.load(f)['demandAfterBattery']
after_storageAndSolar = pd.DataFrame(after_storageAndSolar, columns=['Storage and Solar'])
In [96]:
df2 = pd.DataFrame([df_before.index, df_before['Demand (W)'], after_storage['Storage'], after_storageAndSolar['Storage and Solar']]).T
df2 = df2.set_index(0)
df2.index.name = 'dt'
df2.columns = ['before', 'after storage', 'after storage and solar']
df2.head()
Out[96]:
In [97]:
df_agg_month2 = df2.groupby(df2.index.month).max()
df_agg_month2
Out[97]:
In [98]:
before = df_agg_month2['before']
after_storage = df_agg_month2['after storage']
after_storageAndSolar = df_agg_month2['after storage and solar']
df_effects['Demand Reduction after storage (% Dec)'] = (before - after_storage)/before * 100
df_effects['Demand Reduction after storage and solar (% Dec)'] = (before - after_storageAndSolar)/before * 100
df_effects.plot.bar(title='% Demand and Energy Reduction if Solar Implemented', **style)
df_effects
Out[98]: