In [5]:
"""
Data Visualization

Parse data from an Full Results CSV, and render it in
Simplified Results form, visualize in graphs, and plot.
"""
from collections import Counter

# import argparse
import csv
import geojson
import matplotlib.pyplot as plt
import numpy as np

import pandas as pd
import numpy as np
import csv
import glob

import seaborn as sns

import datetime


from numpy import *
%matplotlib inline

In [63]:
def parse(full_output, simple_output):
    """Parses a Full Output CSV file to a Simplified Output CSV file"""

    # Open CSV file, and safely close it when we're done
    simplified_data = pd.read_csv(full_output, usecols=[2,3,4,5,6,7,8,9,11,12,13,14,15,20,23,26,27,37,39,40,41])

    # Read the CSV data
    simplified_data.index.names = ['SAID']

    simplified_data.to_csv(simple_output)

    return simplified_data

def visualize_DR_Capability(parsed_data, zc, cty):
    """Visualize data for all customers at each ZipCode"""
    sns.set_context('poster')
    fig, (axes) = plt.subplots(1,1, figsize=(10, 6), facecolor='w', edgecolor='k', sharey=True, sharex=True)
#     fig.subplots_adjust(hspace = .1, wspace=.1)
    
    fig.suptitle(' '.join(['Potential DR Capability of Customers in', cty, zc]), color='r')

    axes.scatter(parsed_data.DR_Capacity_CycleOnOff_50Pct, parsed_data.CycleShed_Building_Ratio * 100, alpha=1.0, s=100)
#     axes.scatter(parsed_data[parsed_data.DR_Capacity_CycleOnOff_50Pct>=10].DR_Capacity_CycleOnOff_50Pct, parsed_data[parsed_data.DR_Capacity_CycleOnOff_50Pct>=10].CycleShed_Building_Ratio * 100,facecolor='r',alpha=0.8, s=100)
    axes.set_xlabel('Potential DR Capability, [kW]')
    axes.set_ylabel('DR Capability of the Whole Builing Power, [%]')
    axes.legend(['SAID'], frameon=True, loc= 'upper right')
    axes.set_ylim(bottom=0)
    axes.set_xlim(left=0)
    
#     x = [10,10,80,80]
#     y = [50,20,20,50]
#     axes.fill(x,y, alpha=0.2, facecolor='green')
    
    plt.savefig('/Users/ryin/Dropbox/LBNL/PGE/results/Stockton/DR'+ zc +'.png', dpi=300, format='png', bbox_inches='tight')
    
def visualize_ADR(parsed_data, zc, cty):
    """Visualize data for all customers at each ZipCode"""
    sns.set_context('poster')
    fig, (axes) = plt.subplots(1,2, figsize=(18, 6), facecolor='w', edgecolor='k', sharey=False, sharex=False)
    fig.subplots_adjust(hspace = .25, wspace=.2)
    
    fig.suptitle(' '.join(['Potential DR Capability of Customers in', cty, zc]), color='r')

    axes[0].scatter(parsed_data.DR_Capacity_CycleOnOff_50Pct, parsed_data.CycleShed_Building_Ratio * 100, alpha=1.0, s=100)
    axes[0].set_xlabel('Potential DR Capability, [kW]')
    axes[0].set_ylabel('DR Capability of the Whole Builing Power, [%]')
    axes[0].legend(['SAID'], frameon=True, fancybox=True, loc= 'upper right')
    axes[0].set_ylim(bottom=0)
    axes[0].set_xlim(left=0)
    
    data_sort = parsed_data.sort_values(['DR_Capacity_CycleOnOff_50Pct'],ascending=False)
    
    
    axes[0].set_title('(a) DR Capabilities of All Customers in ' + zc)
    sns.distplot(parsed_data.DR_Capacity_CycleOnOff_50Pct, color = 'green',ax = axes[1])
    axes[1].set_title('(b) Ranking of Potential DR Capabilities')
    axes[1].set_ylabel('Distribution of DR Capabilities')
    axes[1].set_xlabel('Potential DR Capability, [kW]')
    axes[1].set_xlim(left=0)
    
    plt.savefig('/Users/ryin/Dropbox/LBNL/PGE/results/'+cty+'/DR'+ zc +'.png', dpi=300, format='png', bbox_inches='tight')
    
def visualize_ADR_Bldg(parsed_data, zc, cty):
    """Visualize data for all customers at each ZipCode"""
    sns.set_context('poster')
    fig, (axes) = plt.subplots(1,2, figsize=(18, 6), facecolor='w', edgecolor='k', sharey=False, sharex=False)
    fig.subplots_adjust(hspace = .25, wspace=.2)
    
    fig.suptitle(' '.join(['Potential DR Capability of Customers in', cty, zc]), color='r')

    axes[0].scatter(parsed_data.DR_Capacity_CycleOnOff_50Pct, parsed_data.DR_Capacity_CycleOnOff_50Pct / parsed_data.CycleShed_Building_Ratio, alpha=1.0, s=100)
    axes[0].set_xlabel('Potential DR Capability, [kW]')
    axes[0].set_ylabel('Whole Builing Power, [kW]')
    axes[0].legend(['SAID'], frameon=True, fancybox=True, loc= 'upper right')
    axes[0].set_ylim(bottom=0)
    axes[0].set_xlim(left=0)
    
    data_sort = parsed_data.sort_values(['DR_Capacity_CycleOnOff_50Pct'],ascending=False)
    
    
    axes[0].set_title('(a) DR Capabilities of All Customers in ' + zc)
    sns.distplot(parsed_data.DR_Capacity_CycleOnOff_50Pct, color = 'green',ax = axes[1])
    axes[1].set_title('(b) Ranking of Potential DR Capabilities')
    axes[1].set_ylabel('Distribution of DR Capabilities')
    axes[1].set_xlabel('Potential DR Capability, [kW]')
    axes[1].set_xlim(left=0)
    
    plt.savefig('/Users/ryin/Dropbox/LBNL/PGE/results/'+cty+'/DR'+ zc +'_Bldg.png', dpi=300, format='png', bbox_inches='tight')

In [9]:
parsed_data = parse('/Users/ryin/Dropbox/LBNL/PGE/results/Stockton/CustSummary_95219.csv', '/Users/ryin/Dropbox/LBNL/PGE/results/Stockton/SimplifiedCustSummary_95219.csv')

In [32]:
visualize_DR_Capability(parsed_data,'95219','Stockon')



In [49]:
parsed_data = parse('/Users/ryin/Dropbox/LBNL/PGE/results/Stockton/CustSummary_95219.csv', '/Users/ryin/Dropbox/LBNL/PGE/results/Stockton/SimplifiedCustSummary_95219.csv')
visualize_ADR(parsed_data,'95219','Stockon')
parsed_data = parse('/Users/ryin/Dropbox/LBNL/PGE/results/Stockton/CustSummary_95215.csv', '/Users/ryin/Dropbox/LBNL/PGE/results/Stockton/SimplifiedCustSummary_95215.csv')
visualize_ADR(parsed_data,'95215','Stockon')
visualize_ADR(parsed_data,'95207','Stockon')
visualize_ADR(parsed_data,'95206','Stockon')
visualize_ADR(parsed_data,'95205','Stockon')
visualize_ADR(parsed_data,'95203','Stockon')
visualize_ADR(parsed_data,'95202','Stockon')


/Users/ryin/anaconda/lib/python3.5/site-packages/statsmodels/nonparametric/kdetools.py:20: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  y = X[:m/2+1] + np.r_[0,X[m/2+1:],0]*1j

In [50]:
for zc in ['95202','95203','95205','95206','95207','95215','95219']:
    parsed_data = parse('/Users/ryin/Dropbox/LBNL/PGE/results/Stockton/CustSummary_'+zc+'.csv', '/Users/ryin/Dropbox/LBNL/PGE/results/Stockton/SimplifiedCustSummary_'+zc+'.csv')
    visualize_ADR(parsed_data,zc,'Stockon')


/Users/ryin/anaconda/lib/python3.5/site-packages/statsmodels/nonparametric/kdetools.py:20: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  y = X[:m/2+1] + np.r_[0,X[m/2+1:],0]*1j

In [64]:
def dataviz(cty, zc):
    parsed_data = parse('/Users/ryin/Dropbox/LBNL/PGE/results/'+cty+'/CustSummary_'+zc+'.csv', '/Users/ryin/Dropbox/LBNL/PGE/results/'+cty+'/SimplifiedCustSummary_'+zc+'.csv')
    visualize_ADR(parsed_data,zc,cty)
    visualize_ADR_Bldg(parsed_data,zc,cty)

In [52]:
dataviz('SanJose','95110')


/Users/ryin/anaconda/lib/python3.5/site-packages/statsmodels/nonparametric/kdetools.py:20: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  y = X[:m/2+1] + np.r_[0,X[m/2+1:],0]*1j

In [65]:
# dataviz('SanFrancisco','94103')
dataviz('SanFrancisco','94104')
dataviz('SanFrancisco','94105')
dataviz('SanFrancisco','94107')
dataviz('SanFrancisco','94108')
dataviz('SanFrancisco','94111')


/Users/ryin/anaconda/lib/python3.5/site-packages/statsmodels/nonparametric/kdetools.py:20: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  y = X[:m/2+1] + np.r_[0,X[m/2+1:],0]*1j

In [ ]: