def runeemetermodel(meta, temp, building, model): timezone = meta.T[building].timezone start = meta.T[building].datastart end = meta.T[building].dataend building_data = pd.DataFrame(temp[building].tz_convert(timezone).truncate(before=start,after=end)) weatherDataSet_directory = "C:/Users/behzad/Dropbox/3 Research Projects/2 Data for Building/BuildingDataGenomeProject/the-building-data-genome-project/data/external/weather/" weatherfilename = meta.T[building].newweatherfilename weatherfile_path = weatherDataSet_directory+weatherfilename weather = pd.read_csv(weatherfile_path,index_col='timestamp', parse_dates=True, na_values='-9999') weather = weather.tz_localize(timezone, ambiguous = 'infer') weatherdata = CustomDailyWeatherSource2(weather) # df_t = pd.Series(weatherdata.data) df_t = pd.Series(weatherdata.tempC) df_t.index = df_t.index.to_datetime() df_t = pd.DataFrame(df_t) df_t.columns = ["TempC"] to_load = building_data.resample('D').sum().tz_localize(None) to_load.columns = ['Consumption'] to_load['StartDateTime'] = to_load.index.format('%Y-%m-%d %H:%M:%S.%f')[1:] end=to_load.index+timedelta(days=1) to_load['EndDateTime'] = end.format('%Y-%m-%d %H:%M:%S.%f')[1:] to_load['UnitofMeasure'] = 'kWh' to_load['FuelType'] = 'electricity' to_load['ReadingType'] = 'actual' to_load = to_load.reset_index(drop=True) consumptions = import_pandas(to_load) param_optimization_meter = TemperatureSensitivityParameterOptimizationMeter("degC",model) annualized_usage_meter = AnnualizedUsageMeter("degC",model) params = param_optimization_meter.evaluate_raw( consumption_data=consumptions, weather_source=weatherdata, energy_unit_str="kWh")["temp_sensitivity_params"] names1 = ['Baseload', 'HeatBalPtF', 'HeatSlope','CoolBalPtF','CoolSlope'] df_par = pd.DataFrame(params.to_list()) df_par['Parameter'] = index=names1 df_par.columns = ['Value', 'Parameter'] df_par = df_par.set_index('Parameter') df_m = building_data.resample('D').sum().tz_localize(None).join(df_t.resample('1D').mean(), how='inner') params_list = params.to_list() df_m['model_Consumption'] = params_list[0] + params_list[2]*(np.where(df_m.TempC<params_list[1], params_list[1]-df_m.TempC, 0)) + params_list[4]*(np.where(df_m.TempC>params_list[3], df_m.TempC - params_list[3], 0)) df_m['modelbase'] = params_list[0] df_m['modelheating'] = params_list[2]*(np.where(df_m.TempC<params_list[1], params_list[1]-df_m.TempC, np.nan)) df_m['modelcooling'] = params_list[4]*(np.where(df_m.TempC>params_list[3], df_m.TempC - params_list[3], np.nan)) df_par.loc['totalNMBE'] = 100*((df_m[building] - df_m.model_Consumption).sum()/((df_m[building].count()-1) * df_m[building].mean())) df_par.loc['totalCVRMSE'] = 100*((((df_m[building] - df_m.model_Consumption)**2).sum()/(df_m[building].count()-1))**(0.5))/df_m[building].mean() return df_m, df_par
def _generate_fuel_consumptions(self, weather_source, weather_normal_source, period, model, param_dists, param_delta_dists, noise, baseline_period, reporting_period, fuel_type, consumption_unit_name, temperature_unit_name): baseline_params = model.param_type([param.rvs() for param in param_dists.to_list()]) reporting_params = model.param_type([bl_param + param_delta.rvs() for bl_param, param_delta in zip(baseline_params.to_list(), param_delta_dists.to_list())]) annualized_usage_meter = AnnualizedUsageMeter(temperature_unit_name, model) baseline_annualized_usage = annualized_usage_meter.evaluate_raw( model_params=baseline_params, weather_normal_source=weather_normal_source)["annualized_usage"] reporting_annualized_usage = annualized_usage_meter.evaluate_raw( model_params=reporting_params, weather_normal_source=weather_normal_source)["annualized_usage"] estimated_annualized_savings = baseline_annualized_usage - \ reporting_annualized_usage baseline_generator = MonthlyBillingConsumptionGenerator(fuel_type, consumption_unit_name, temperature_unit_name, model, baseline_params) reporting_generator = MonthlyBillingConsumptionGenerator(fuel_type, consumption_unit_name, temperature_unit_name, model, reporting_params) datetimes = generate_monthly_billing_datetimes(period, dist=None) baseline_consumption_data = baseline_generator.generate( weather_source, datetimes, daily_noise_dist=noise) reporting_consumption_data = reporting_generator.generate( weather_source, datetimes, daily_noise_dist=noise) baseline_data = baseline_consumption_data.data reporting_data = reporting_consumption_data.data periods = baseline_consumption_data.periods() records = [] for bl_data, rp_data, period in zip(baseline_data, reporting_data, periods): if period in reporting_period: val = rp_data else: val = bl_data record = {"start": period.start, "end": period.end, "value": val} records.append(record) cd = ConsumptionData(records, fuel_type, consumption_unit_name, record_type="arbitrary") return cd, estimated_annualized_savings, baseline_params, \ reporting_params
def find_best_annualized_usage_params(target_annualized_usage, model, start_params, params_to_change, weather_normal_source, n_guesses=100): best_params = start_params meter = AnnualizedUsageMeter(model=model, temperature_unit_str=TEMPERATURE_UNIT_STR) best_result = meter.evaluate_raw( model_params=best_params, weather_normal_source=weather_normal_source) best_ann_usage = best_result["annualized_usage"][0] for n in range(n_guesses): resolution = abs((target_annualized_usage - best_ann_usage) / target_annualized_usage) param_dict = best_params.to_dict() for param_name, scale_factor in params_to_change: current_value = param_dict[param_name] current_value = norm.rvs(param_dict[param_name], resolution * scale_factor) while current_value < 0: current_value = norm.rvs(param_dict[param_name], resolution * scale_factor) param_dict[param_name] = current_value model_params = model.param_type(param_dict) result = meter.evaluate_raw( model_params=model_params, weather_normal_source=weather_normal_source) ann_usage = result["annualized_usage"][0] if abs(target_annualized_usage - ann_usage) < abs(target_annualized_usage - best_ann_usage): diff = abs(target_annualized_usage - best_ann_usage) best_params = model_params best_ann_usage = ann_usage return best_params, best_ann_usage
to_load['EndDateTime'] = end.format('%Y-%m-%d %H:%M:%S.%f')[1:] to_load['UnitofMeasure'] = 'kWh' to_load['FuelType'] = 'electricity' to_load['ReadingType'] = 'actual' to_load = to_load.reset_index(drop=True) to_load.head() consumptions = import_pandas(to_load) param_optimization_meter = TemperatureSensitivityParameterOptimizationMeter("degC", model) annualized_usage_meter = AnnualizedUsageMeter("degC", model) params = param_optimization_meter.evaluate_raw(consumption_data=consumptions, weather_source=formattedWeatherData2,energy_unit_str="kWh")["temp_sensitivity_params"] params_list = params.to_list() names1 = ['Baseload', 'HeatBalPtF', 'HeatSlope','CoolBalPtF','CoolSlope'] df_par = pd.DataFrame(params.to_list()) df_par['Parameter'] = index=names1 df_par.columns = ['Value', 'Parameter'] df_par = df_par.set_index('Parameter') df_m = ExtractedData_chosenBuilding.resample('D').sum().tz_localize(None).join(df_t.resample('1D').mean(), how='inner') df_m.tail() df_m['model_Consumption'] = params_list[0] + params_list[2]*(np.where(df_m.TempC<params_list[1], params_list[1]-df_m.TempC, 0)) + params_list[4]*(np.where(df_m.TempC>params_list[3], df_m.TempC - params_list[3], 0))