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 [66]:
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 [68]:
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 [67]:
# 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 [71]:
dataviz('SanJose','95110')


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-71-0b73ede6a7e9> in <module>()
----> 1 dataviz('SanJose','95110')

<ipython-input-64-64eb06a71d5a> in dataviz(cty, zc)
      1 def dataviz(cty, zc):
      2     parsed_data = parse('/Users/ryin/Dropbox/LBNL/PGE/results/'+cty+'/CustSummary_'+zc+'.csv', '/Users/ryin/Dropbox/LBNL/PGE/results/'+cty+'/SimplifiedCustSummary_'+zc+'.csv')
----> 3     visualize_ADR(parsed_data,zc,cty)
      4     visualize_ADR_Bldg(parsed_data,zc,cty)

<ipython-input-66-b2a9211030ee> in visualize_ADR(parsed_data, zc, cty)
     42     fig.suptitle(' '.join(['Potential DR Capability of Customers in', cty, zc]), color='r')
     43 
---> 44     axes[0].scatter(parsed_data.DR_Capacity_CycleOnOff_50Pct, parsed_data.CycleShed_Building_Ratio * 100, alpha=1.0, s=100)
     45     axes[0].set_xlabel('Potential DR Capability, [kW]')
     46     axes[0].set_ylabel('DR Capability of the Whole Builing Power, [%]')

/Users/ryin/anaconda/lib/python3.5/site-packages/matplotlib/__init__.py in inner(ax, *args, **kwargs)
   1817                     warnings.warn(msg % (label_namer, func.__name__),
   1818                                   RuntimeWarning, stacklevel=2)
-> 1819             return func(ax, *args, **kwargs)
   1820         pre_doc = inner.__doc__
   1821         if pre_doc is None:

/Users/ryin/anaconda/lib/python3.5/site-packages/matplotlib/axes/_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)
   3836 
   3837         # c will be unchanged unless it is the same length as x:
-> 3838         x, y, s, c = cbook.delete_masked_points(x, y, s, c)
   3839 
   3840         scales = s   # Renamed for readability below.

/Users/ryin/anaconda/lib/python3.5/site-packages/matplotlib/cbook.py in delete_masked_points(*args)
   1846         return ()
   1847     if (is_string_like(args[0]) or not iterable(args[0])):
-> 1848         raise ValueError("First argument must be a sequence")
   1849     nrecs = len(args[0])
   1850     margs = []

ValueError: First argument must be a sequence

In [ ]: