def fit_time(measure_type, occtime, season=None): conn = uo.connect('interval_ion') with conn: df_bs = pd.read_sql('SELECT * FROM {0}_id_station'.format(measure_type), conn) df_area = pd.read_sql('SELECT * FROM area', conn) df_tz = pd.read_sql('SELECT Building_Number, rawOffset FROM EUAS_timezone', conn) df_tz.set_index('Building_Number', inplace=True) df_area.set_index('Building_Number', inplace=True) bs_pair = zip(df_bs['Building_Number'], df_bs['ICAO']) sns.set_style("whitegrid") sns.set_context("talk", font_scale=1) value_lb_dict = {'electric': 'Electric_(KWH)', 'gas': 'Gas_(CubicFeet)'} multiplier_dict = {'electric': 3.412, 'gas': 1.026} col = value_lb_dict[measure_type] m = multiplier_dict[measure_type] ylabel = {'electric': 'electric (kBtu/sq.ft)', 'gas': 'gas kBtu/sq.ft'} print len(bs_pair) sns.set_style("whitegrid") # palette = sns.cubehelix_palette(len(bs_pair)) palette = sns.color_palette('husl', len(bs_pair)) sns.set_palette(palette) colors_rgb = [util.float2hex(x) for x in palette] sns.set_context("talk", font_scale=1) jsondir = os.getcwd() + '/input/FY/interval/ion_0627/piecewise_all/json_{0}/'.format(occtime) # csvdir = os.getcwd() + '/input/FY/interval/ion_0627/piecewise_all/csv/' for i, (b, s) in enumerate(bs_pair): print b, s try: area = df_area.ix[b, 'Gross_Sq.Ft'] except KeyError: print 'No area found' continue offset = df_tz.loc[b, 'rawOffset'] df = join_interval(offset, b, s, area, col, m, measure_type, conn, season=season) df.to_csv(homedir + 'temp/{0}.csv'.format(b)) df = df[df[col] >= 0] points = df[col] outliers = show_outlier(points, b, 'upper', measure_type, 1.5) df['outlier'] = outliers df = df[~np.array(outliers)] df['status_week_day_night'] = \ df.apply(lambda r: util.get_status(r['hour'], r['day']), axis=1) min_time = df['Timestamp'].min() max_time = df['Timestamp'].max() gr = df.groupby('status_week_day_night') bx = plt.axes() d0 = plot_piece(gr, bx, occtime, colors_rgb[i], measure_type, b, s, scatter=False, annote=True, jsondir=jsondir, season=season) plt.xlabel('Temperature_F') # plt.show() if season is None: path = os.getcwd() + '/input/FY/interval/ion_0627/piecewise_all/{0}_{1}.png'.format(measure_type, occtime) else: path = os.getcwd() + '/input/FY/interval/ion_0627/piecewise_all/{0}_{1}_{2}.png'.format(measure_type, occtime, season) P.savefig(path, dpi = my_dpi, figsize = (2000/my_dpi, 500/my_dpi), bbox_inches='tight') shutil.copy(path, path.replace('input/FY/interval/ion_0627/piecewise_all', 'plot_FY_weather/html/interval/lean/all')) plt.close() return
def fit_time(measure_type, occtime): conn = uo.connect('interval_ion') with conn: df_bs = pd.read_sql('SELECT * FROM {0}_id_station'.format(measure_type), conn) df_area = pd.read_sql('SELECT * FROM area', conn) df_area.set_index('Building_Number', inplace=True) bs_pair = zip(df_bs['Building_Number'], df_bs['ICAO']) sns.set_style("whitegrid") sns.set_context("talk", font_scale=1) value_lb_dict = {'electric': 'Electric_(KWH)', 'gas': 'Gas_(CubicFeet)'} multiplier_dict = {'electric': 3.412, 'gas': 1.026} col = value_lb_dict[measure_type] m = multiplier_dict[measure_type] ylabel = {'electric': 'electric (kBtu/sq.ft)', 'gas': 'gas kBtu/sq.ft'} print len(bs_pair) sns.set_style("whitegrid") # palette = sns.cubehelix_palette(len(bs_pair)) palette = sns.color_palette('husl', len(bs_pair)) sns.set_palette(palette) colors_rgb = [util.float2hex(x) for x in palette] sns.set_context("talk", font_scale=1) jsondir = os.getcwd() + '/input/FY/interval/ion_0627/piecewise_all/json_{0}/'.format(occtime) # csvdir = os.getcwd() + '/input/FY/interval/ion_0627/piecewise_all/csv/' for i, (b, s) in enumerate(bs_pair)[:5]: print b, s try: area = df_area.ix[b, 'Gross_Sq.Ft'] except KeyError: print 'No area found' continue df = join_interval(b, s, area, col, m, measure_type, conn) # df.to_csv(homedir + 'temp/{0}.csv'.format(b)) df = df[df[col] >= 0] points = df[col] outliers = show_outlier(points, b, 'upper', measure_type, 5) df['outlier'] = outliers df = df[~np.array(outliers)] df['status_week_day_night'] = \ df.apply(lambda r: util.get_status(r['hour'], r['day']), axis=1) min_time = df['Timestamp'].min() max_time = df['Timestamp'].max() gr = df.groupby('status_week_day_night') bx = plt.axes() d0 = plot_piece(gr, bx, occtime, colors_rgb[i], measure_type, b, s, scatter=False, annote=True, jsondir=jsondir) plt.xlabel('Temperature_F') # plt.show() path = os.getcwd() + '/input/FY/interval/ion_0627/piecewise_all/{0}_{1}.png'.format(measure_type, occtime) P.savefig(path, dpi = my_dpi, figsize = (2000/my_dpi, 500/my_dpi), bbox_inches='tight') shutil.copy(path, path.replace('input/FY/interval/ion_0627/piecewise_all', 'plot_FY_weather/html/interval/lean/all')) plt.close() return
def fit_time(measure_type, region, season=None): conn = uo.connect('all') with conn: df_bs = pd.read_sql( 'SELECT Building_Number, ICAO, eui_elec, eui_gas, year, month, ave FROM EUAS_monthly_weather', conn) df_region = pd.read_sql( 'SELECT DISTINCT Building_Number, [Region_No.] FROM EUAS_monthly', conn) if measure_type == 'electric': good_set = gbs.get_energy_set('eui_elec') elif measure_type == 'gas': good_set = gbs.get_energy_set('gas') df_bs = pd.merge(df_bs, df_region, on='Building_Number', how='left') df_bs = df_bs[df_bs['Building_Number'].map(lambda x: x in good_set)] df_bs = df_bs[df_bs['Region_No.'] == str(region)] df_bs = df_bs[df_bs['eui_elec'].notnull()] df_bs = df_bs[df_bs['eui_gas'].notnull()] df_bs.sort_values(by=['Building_Number', 'year', 'month'], ascending=False, inplace=True) bs_pair = list(set(zip(df_bs['Building_Number'], df_bs['ICAO']))) df_bs['Timestamp'] = df_bs.apply( lambda r: '{}-{}'.format(int(r['year']), int(r['month'])), axis=1) sns.set_style("whitegrid") sns.set_context("talk", font_scale=1) ylabel = {'electric': 'electric (kBtu/sq.ft)', 'gas': 'gas kBtu/sq.ft'} col_dict = {'electric': 'eui_elec', 'gas': 'eui_gas'} print len(bs_pair) sns.set_style("whitegrid") # palette = sns.cubehelix_palette(len(bs_pair)) palette = sns.color_palette('husl', len(bs_pair)) sns.set_palette(palette) colors_rgb = [util.float2hex(x) for x in palette] sns.set_context("talk", font_scale=1) jsondir = os.getcwd( ) + '/plot_FY_weather/html/by_region/Region{}/piecewise_all/json/'.format( region) title = "Region {}".format(region) col = col_dict[measure_type] for i, (b, s) in enumerate(bs_pair): print b, s df = df_bs[df_bs['Building_Number'] == b] df = df.head(n=36) print df.head() points = df[col] min_time = df['Timestamp'].min() max_time = df['Timestamp'].max() bx = plt.axes() d0 = plot_piece(df, bx, title, colors_rgb[i], measure_type, b, s, scatter=False, annote=True, jsondir=jsondir, season=season) plt.xlabel('Temperature_F') # plt.show() if season is None: path = os.getcwd( ) + '/plot_FY_weather/html/by_region/Region{}/piecewise_all/{}.png'.format( region, measure_type) else: path = os.getcwd( ) + '/plot_FY_weather/html/by_region/Region{}/piecewise_all/{}_{}.png'.format( region, measure_type, season) P.savefig(path, dpi=my_dpi, figsize=(2000 / my_dpi, 500 / my_dpi), bbox_inches='tight') plt.close() return
def fit(measure_type, year=None, season=None): conn = uo.connect('interval_ion') with conn: df_bs = pd.read_sql('SELECT * FROM {0}_id_station'.format(measure_type), conn) df_area = pd.read_sql('SELECT * FROM area', conn) df_tz = pd.read_sql('SELECT Building_Number, rawOffset FROM EUAS_timezone', conn) df_tz.set_index('Building_Number', inplace=True) df_area.set_index('Building_Number', inplace=True) bs_pair = zip(df_bs['Building_Number'], df_bs['ICAO']) sns.set_style("whitegrid") sns.set_palette("Set2", 2) sns.set_context("talk", font_scale=1) # col_wrap_dict = {'hour': 6, 'month': 4, 'day': 5, 'status':2} # upper = {'electric': 600, 'gas': 2500} value_lb_dict = {'electric': 'Electric_(KWH)', 'gas': 'Gas_(CubicFeet)'} multiplier_dict = {'electric': 3.412, 'gas': 1.026} col = value_lb_dict[measure_type] m = multiplier_dict[measure_type] ylabel = {'electric': 'electric (kBtu/sq.ft)', 'gas': 'gas kBtu/sq.ft'} # test = ['TN0088ZZ', 'TX0057ZZ', 'NY0281ZZ', 'NY0304ZZ', 'MO0106ZZ'] # test = ['FL0067ZZ'] # bs_pair = [x for x in bs_pair if x[0] in test] lines = ['Building_Number,week night save%,weekend day save%,weekend night save%,aggregate save%,CVRMSE week day,CVRMSE week night,CVRMSE weekend day,CVRMSE weekend night'] # bs_pair = bs_pair[:1] print len(bs_pair) for b, s in bs_pair: print b, s try: area = df_area.ix[b, 'Gross_Sq.Ft'] except KeyError: print 'No area found' continue offset = df_tz.loc[b, 'rawOffset'] df = join_interval(offset, b, s, area, col, m, measure_type, conn, year, season) if len(df) == 0: continue df.to_csv(homedir + 'temp/{0}.csv'.format(b)) df = df[df[col] >= 0] points = df[col] # outliers = show_outlier(points, b, 'upper', measure_type, 5) outliers = show_outlier(points, b, 'upper', measure_type, 1.5) df['outlier'] = outliers df = df[~np.array(outliers)] df['status_week_day_night'] = \ df.apply(lambda r: util.get_status(r['hour'], r['day']), axis=1) min_time = df['Timestamp'].min() max_time = df['Timestamp'].max() sns.set_style("whitegrid") colors = sns.color_palette('Paired', 16) colors_rgb = [util.float2hex(x) for x in colors] sns.set_context("talk", font_scale=1) gr = df.groupby('status_week_day_night') f, axarr = plt.subplots(2, 2, sharex=True, sharey=True) d0 = plot_piece(gr, axarr[0, 0], 'week day', colors_rgb[0], measure_type, b, s) if not d0 is None: axarr[0, 0].set_title('{0} ({3})\nbreak point {1}F, CV(RMSE): {2:.3f}'.format('week day', d0['breakpoint'], d0['CV(RMSE)'], b)) d1 = plot_piece(gr, axarr[0, 1], 'week night', colors_rgb[1], measure_type, b, s) x0 = d0['x_range'][0] x1 = d0['x_range'][1] if type(d0['breakpoint']) == tuple: b0 = d['breakpoint'][0] b1 = d['breakpoint'][1] x = np.array([x0, b0, b1, x1]) else: x = np.array([x0, d0['breakpoint'], x1]) y = d0['fun'](x, *d0['regression_par']) d2 = plot_piece(gr, axarr[1, 0], 'weekend day', colors_rgb[2], measure_type, b, s) d3 = plot_piece(gr, axarr[1, 1], 'weekend night', colors_rgb[3], measure_type, b, s) axarr[0, 1].plot(x, y, ls='--', c='red') axarr[1, 0].plot(x, y, ls='--', c='red') axarr[1, 1].plot(x, y, ls='--', c='red') plt.ylim((0, 0.02)) plt.xlim((0, 100)) save, err = compute_saving_all(b, d0, d1, d2, d3, axarr) # save, err = compute_saving_all_setback(d0, d1, d2, d3, axarr) plt.suptitle('{0} -- {1}'.format(min_time, max_time)) f.text(0.5, 0.04, 'Temperature_F', ha='center', va='center') if year is None: if season is None: path = os.getcwd() + '/input/FY/interval/ion_0627/piecewise/{1}/{0}_{1}.png'.format(b, measure_type) else: path = os.getcwd() + '/input/FY/interval/ion_0627/piecewise/{1}/{0}_{1}_{2}.png'.format(b, measure_type, season) else: path = os.getcwd() + '/input/FY/interval/ion_0627/piecewise/{1}/{0}_{1}_{2}.png'.format(b, measure_type, int(year)) P.savefig(path, dpi = my_dpi, figsize = (2000/my_dpi, 500/my_dpi), bbox_inches='tight') shutil.copy(path, path.replace('input/FY/interval/ion_0627/piecewise', 'plot_FY_weather/html/interval/lean')) plt.close() lines.append(','.join([b] + save + err)) if year is None: if season is None: table_path = os.getcwd() + '/input/FY/interval/ion_0627/table/{0}_save.csv'.format(measure_type) else: table_path = os.getcwd() + '/input/FY/interval/ion_0627/table/{0}_save_{1}.csv'.format(measure_type, season) else: table_path = os.getcwd() + '/input/FY/interval/ion_0627/table/{0}_save_{1}.csv'.format(measure_type, int(year)) with open(table_path, 'w+') as wt: wt.write('\n'.join(lines)) return
def fit(measure_type, year=None): conn = uo.connect('interval_ion') with conn: df_bs = pd.read_sql('SELECT * FROM {0}_id_station'.format(measure_type), conn) df_area = pd.read_sql('SELECT * FROM area', conn) df_area.set_index('Building_Number', inplace=True) bs_pair = zip(df_bs['Building_Number'], df_bs['ICAO']) sns.set_style("whitegrid") sns.set_palette("Set2", 2) sns.set_context("talk", font_scale=1) # col_wrap_dict = {'hour': 6, 'month': 4, 'day': 5, 'status':2} # upper = {'electric': 600, 'gas': 2500} value_lb_dict = {'electric': 'Electric_(KWH)', 'gas': 'Gas_(CubicFeet)'} multiplier_dict = {'electric': 3.412, 'gas': 1.026} col = value_lb_dict[measure_type] m = multiplier_dict[measure_type] ylabel = {'electric': 'electric (kBtu/sq.ft)', 'gas': 'gas kBtu/sq.ft'} # test = ['TN0088ZZ', 'TX0057ZZ', 'NY0281ZZ', 'NY0304ZZ', 'MO0106ZZ'] # test = ['NM0050ZZ'] # bs_pair = [x for x in bs_pair if x[0] in test] lines = ['Building_Number,week night save%,weekend day save%,weekend night save%,aggregate save%,CVRMSE week day,CVRMSE week night,CVRMSE weekend day,CVRMSE weekend night'] print len(bs_pair) # bs_pair = bs_pair[:1] for b, s in bs_pair: print b, s try: area = df_area.ix[b, 'Gross_Sq.Ft'] except KeyError: print 'No area found' continue df = join_interval(b, s, area, col, m, measure_type, conn, year) if len(df) == 0: continue df.to_csv(homedir + 'temp/{0}.csv'.format(b)) df = df[df[col] >= 0] points = df[col] # outliers = show_outlier(points, b, 'upper', measure_type, 5) outliers = show_outlier(points, b, 'upper', measure_type, 1.5) df['outlier'] = outliers df = df[~np.array(outliers)] df['status_week_day_night'] = \ df.apply(lambda r: util.get_status(r['hour'], r['day']), axis=1) min_time = df['Timestamp'].min() max_time = df['Timestamp'].max() sns.set_style("whitegrid") colors = sns.color_palette('Paired', 16) colors_rgb = [util.float2hex(x) for x in colors] sns.set_context("talk", font_scale=1) gr = df.groupby('status_week_day_night') f, axarr = plt.subplots(2, 2, sharex=True, sharey=True) d0 = plot_piece(gr, axarr[0, 0], 'week day', colors_rgb[0], measure_type, b, s) if not d0 is None: axarr[0, 0].set_title('{0}\nbreak point {1}F, CV(RMSE): {2:.3f}'.format('week day', d0['breakpoint'], d0['CV(RMSE)'])) d1 = plot_piece(gr, axarr[0, 1], 'week night', colors_rgb[1], measure_type, b, s) d2 = plot_piece(gr, axarr[1, 0], 'weekend day', colors_rgb[2], measure_type, b, s) d3 = plot_piece(gr, axarr[1, 1], 'weekend night', colors_rgb[3], measure_type, b, s) save, err = compute_saving_all(d0, d1, d2, d3, axarr) plt.suptitle('{0} -- {1}'.format(min_time, max_time)) f.text(0.5, 0.04, 'Temperature_F', ha='center', va='center') if year is None: path = os.getcwd() + '/input/FY/interval/ion_0627/piecewise/{1}/{0}_{1}.png'.format(b, measure_type) else: path = os.getcwd() + '/input/FY/interval/ion_0627/piecewise/{1}/{0}_{1}_{2}.png'.format(b, measure_type, int(year)) P.savefig(path, dpi = my_dpi, figsize = (2000/my_dpi, 500/my_dpi), bbox_inches='tight') shutil.copy(path, path.replace('input/FY/interval/ion_0627/piecewise', 'plot_FY_weather/html/interval/lean')) plt.close() lines.append(','.join([b] + save + err)) if year is None: table_path = os.getcwd() + '/input/FY/interval/ion_0627/table/{0}_save.csv'.format(measure_type) else: table_path = os.getcwd() + '/input/FY/interval/ion_0627/table/{0}_save_{1}.csv'.format(measure_type, int(year)) with open(table_path, 'w+') as wt: wt.write('\n'.join(lines)) return