In [1]:
import datetime
import pandas as pd
import sqlalchemy as sa
from sqlalchemy import *
import pandas as pd
import os
import numpy as np
import operator
import math
import random
from pylab import *
import ast


/Users/sabina/anaconda/lib/python2.7/site-packages/pandas/io/excel.py:626: UserWarning: Installed openpyxl is not supported at this time. Use >=1.6.1 and <2.0.0.
  .format(openpyxl_compat.start_ver, openpyxl_compat.stop_ver))

In [2]:
import json 
import matplotlib 
import matplotlib.pyplot as pyplt
%matplotlib inline

In [2]:
look_up_ids =

In [3]:
#homes in intersection of all four months
def get_json_data(folder, filename):    
    dir_path = os.path.join(os.getcwd(),folder)
    with open(os.path.join(dir_path, filename)) as outfile:
        return json.load(outfile)

In [62]:
def init_dict(month):
    global homes 
    homes= get_json_data('cars/{}/'.format(month),'cars_{}.json'.format(month))
    global home_ids
    home_ids= homes.keys()

In [102]:
all_home_ids =  {}
for month in ['January','February','March','April']:
    init_dict(month)
    all_home_ids[month] = home_ids

In [104]:
homes_with_all_months = list(set(all_home_ids['January'])&set(all_home_ids['February'])&set(all_home_ids['March'])&set(all_home_ids['April']))

In [120]:
homes_with_all_months[0] in all_home_ids['April']


Out[120]:
True

In [5]:
init_dict()

In [174]:
def plot_a_home(home,col_name,time_frame,d,name):
    y = home[col_name]
    y_values=[]
    x_ticks = []
    if time_frame == 'day':
        #update to be random 
        y_values = y[:1441]
        locs = list(range(0,len(y_values),len(y_values)/4))
        x_ticks = ['00:00','6:00','12:00','6:00','00:00']
    if time_frame == 'week':
        y_values = y[:10081]
        locs = list(range(0,len(y_values),len(y_values)/6))
        x_ticks = [str(i) for i in range(1,8)]
    #pyplt.xlabel(time)
    pyplt.ylabel('Avg power (kW)')
    pyplt.xticks(locs,x_ticks)
    if d:
        pyplt.plot(y_values,'bo',alpha = .1)
    else:
        pyplt.plot(y_values)
    pyplt.savefig('day_ev_charge_{}.png'.format(name))

In [51]:
'''
def plot_all_homes(start, end,time_frame_num):
    time_frame_len = (60*24*time_frame_num)
      
    ev = np.zeros(time_frame_len)
    for (hid,h) in homes.iteritems():
        home_vec = h['car1'][:time_frame_len]
        if not hid in ['1728','9937','8046']:
            for i in range(len(home_vec)):
                if home_vec[i]<.5:
                    home_vec[i]=0.0
            ev = np.add(ev,home_vec)
    if time_frame_num == 1:
        locs = list(range(0,len(ev),len(ev)/4))
        x_ticks = ['00:00','6:00','12:00','6:00','00:00']
    if time_frame_num ==7:
        locs = list(range(0,len(ev),len(ev)/6))
        x_ticks = [str(i) for i in range(1,8)]  
    ev= np.divide(ev,45)
    pyplt.xticks(locs,x_ticks)
    pyplt.plot(ev)
    pyplt.ylabel('Power')
    pyplt.xlabel('Time')
    pyplt.title('EV April')
    pyplt.show()
    '''


Out[51]:
"\ndef plot_all_homes(start, end,time_frame_num):\n    time_frame_len = (60*24*time_frame_num)\n      \n    ev = np.zeros(time_frame_len)\n    for (hid,h) in homes.iteritems():\n        home_vec = h['car1'][:time_frame_len]\n        if not hid in ['1728','9937','8046']:\n            for i in range(len(home_vec)):\n                if home_vec[i]<.5:\n                    home_vec[i]=0.0\n            ev = np.add(ev,home_vec)\n    if time_frame_num == 1:\n        locs = list(range(0,len(ev),len(ev)/4))\n        x_ticks = ['00:00','6:00','12:00','6:00','00:00']\n    if time_frame_num ==7:\n        locs = list(range(0,len(ev),len(ev)/6))\n        x_ticks = [str(i) for i in range(1,8)]  \n    ev= np.divide(ev,45)\n    pyplt.xticks(locs,x_ticks)\n    pyplt.plot(ev)\n    pyplt.ylabel('Power')\n    pyplt.xlabel('Time')\n    pyplt.title('EV April')\n    pyplt.show()\n    "

In [177]:
plot_a_home(homes[home_ids[6]],'car1','day',True,6)



In [52]:
#plot_all_homes(1,1,1)
####Averaging is terrible!

In [129]:
##find max
def look_at_distribution():
    df = pd.DataFrame.from_dict(homes.values(),orient = homes.keys())
    return df

In [130]:
homes_df = look_at_distribution()


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-130-9689a2ab1d33> in <module>()
----> 1 homes_df = look_at_distribution()

<ipython-input-129-ce88cf908060> in look_at_distribution()
      1 ##find max
      2 def look_at_distribution():
----> 3     df = pd.DataFrame.from_dict(homes.values(),orient = homes.keys())
      4     return df

/Users/sabina/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc in from_dict(cls, data, orient, dtype)
    626         """
    627         index, columns = None, None
--> 628         orient = orient.lower()
    629         if orient == 'index':
    630             if len(data) > 0:

AttributeError: 'list' object has no attribute 'lower'

In [9]:
max((homes_df['car1']).max())


Out[9]:
6.691

In [13]:
len(homes_df['localminute'][0])


Out[13]:
43200

In [23]:
def get_continuous(this_home):
    continuous_times = []
    i=0
    if len(homes_df['car1'][this_home])!=43200 or len(homes_df['localminute'][this_home])!=43200 :
        return []
    while i<43200:
        this_time = [] 
        while  i<43200 and homes_df['car1'][this_home][i]>0.5 :
            this_time.append(([homes_df['car1'][this_home][i],homes_df['localminute'][this_home][i]]))
            i=i+1
        if len(this_time)>0:
            continuous_times.append(this_time)
            this_time=[]
        i = i +1
    return continuous_times

In [24]:
##for home calculate minutes avg time period 
avg_con = []
avgs = []
for i in range(48):
    c = get_continuous(i)
    avg = 0
    for e in c:
        avg = avg + len(e)
    if len(c)!=0:  
        avgs.append(c)
        avg_con.append(avg/len(c))
    else:
        print i


3
21
26

In [12]:
avg = 0
for e in (avg_con):
    avg = avg + (e)
print avg/len(avg_con)


89

In [137]:
def get_plot_points_for_phil(house,month):
    all_ys = []
    all_xs= []
    month_days = {'January':31,'February':28,'March':31,'April':30}
    for month in ['January','February','March','April']:
    init_dict(month)
    #homes_df = look_at_distribution()
    car_vec = homes[house]['car1']
        ##partition by day
    step_sizes_too_sick_to_do_math = [i for i in range(0,43200,1440)]
    for i in range(len(step_sizes_too_sick_to_do_math)):
        yhere = car_vec[step_sizes_too_sick_to_do_math[i]:step_sizes_too_sick_to_do_math[i]+1440]
        all_ys.append(yhere)
        all_xs.append([i for i in range(len(yhere))])
    return ([all_xs,all_ys])

In [138]:
([x,y])=get_plot_points_for_phil(homes_with_all_months[0],'January')

In [144]:
def plot_points(x,y,house):
    locs = list(range(0,len(y[0]),len(y[0])/4))
    x_ticks = ['00:00','6:00','12:00','6:00','00:00']
    pyplt.xticks(locs,x_ticks)
    pyplt.title('House {}'.format(house))
    pyplt.xlabel('power')
    pyplt.ylabel('time')
    for i in range(len(y)):
        pyplt.plot(x[i],y[i],'bo',alpha = .15)

In [145]:
plot_points(x,y,homes_with_all_months[0])



In [164]:
def plot_master_coords():
    house = homes_with_all_months[0]
    master = [ ]
    for month in ['January','February','March','April']:
        #([x,y]) = get_plot_points_for_phil(house,month)
        master.append(get_plot_points_for_phil(house,month))
    locs = list(range(0,len(y[0]),len(y[0])/4))
    x_ticks = ['00:00','6:00','12:00','6:00','00:00']
    pyplt.xticks(locs,x_ticks)
    pyplt.title('House {}'.format(house))
    pyplt.xlabel('time')
    pyplt.ylabel('power')
    for ii in master:
        for i in range(len(ii[1])):
            pyplt.plot(ii[0][i],ii[1][i],'bo',alpha = .15)
    pyplt.savefig('2014-EV.png')

In [93]:
'''
x = [] 
y =  []
step_sizes_too_sick_to_do_math = [i for i in range(0,43200,1440)]
for i in range(len(step_sizes_too_sick_to_do_math)):
    yhere = car_test[step_sizes_too_sick_to_do_math[i]:step_sizes_too_sick_to_do_math[i]+1440]
    y.append(yhere)
   '''

In [90]:
step_sizes_too_sick_to_do_math = [i for i in range(0,43200,1440)]

In [165]:
plot_master_coords()



In [159]:
d_test = {'car':1,'bat':1,'cat':1}
strings = ['car','taze','tzar','cat']
count = []
for s in strings:
    if s in d_test:
        count.append(s)
    elif s!='bat':
        count.append(s)

In [160]:
count


Out[160]:
['car', 'taze', 'tzar', 'cat']

In [ ]: