def generate(self, weather_source, datetimes, daily_noise_dist=None): """Returns a ConsumptionData instance given a particular weather source and a list of datetimes. Parameters ---------- weather_source : eemeter.weather.WeatherSourceBase Weather source from which to draw outdoor temperature data. datetimes : list of datetime objects Periods over which to simulate consumption. daily_noise_dist : scipy.stats.rv_continuous, default None Noise to add to each day in a period. Noise is additive and sampled independently for each period. e.g. scipy.stats.normal(). """ records = [{"start": start, "end": end, "value": np.nan} for start, end in zip(datetimes, datetimes[1:])] cd = ConsumptionData(records, self.fuel_type, self.consumption_unit_name, record_type="arbitrary") periods = cd.periods() period_daily_temps = weather_source.daily_temperatures(periods, self.temperature_unit_name) period_average_daily_usages = self.model.transform(period_daily_temps,self.params) for average_daily_usage, period in zip(period_average_daily_usages,periods): n_days = period.timedelta.days if daily_noise_dist is not None: average_daily_usage += np.mean(daily_noise_dist.rvs(n_days)) cd.data[period.start] = average_daily_usage * n_days return cd
def generate_consumption_records(model, params_pre, params_post, datetimes_pre, datetimes_post, fuel_type, energy_unit, weather_source): datetimes = datetimes_pre[:-1] + datetimes_post records = [{"start": start, "end": end, "value": np.nan} for start, end in zip(datetimes, datetimes[1:])] cd = ConsumptionData(records, fuel_type, energy_unit, record_type="arbitrary") periods = cd.periods() periods_pre = periods[:len(datetimes_pre[:-1])] periods_post = periods[len(datetimes_pre[:-1]):] period_pre_daily_temps = weather_source.daily_temperatures(periods_pre, TEMPERATURE_UNIT_STR) period_post_daily_temps = weather_source.daily_temperatures(periods_post, TEMPERATURE_UNIT_STR) period_pre_average_daily_usages = model.transform(period_pre_daily_temps, params_pre) period_post_average_daily_usages = model.transform(period_post_daily_temps, params_post) daily_noise_dist = None for average_daily_usage, period in zip(period_pre_average_daily_usages, periods_pre): n_days = period.timedelta.days if daily_noise_dist is not None: average_daily_usage += np.mean(daily_noise_dist.rvs(n_days)) cd.data[period.start] = average_daily_usage * n_days for average_daily_usage, period in zip(period_post_average_daily_usages, periods_post): n_days = period.timedelta.days if daily_noise_dist is not None: average_daily_usage += np.mean(daily_noise_dist.rvs(n_days)) cd.data[period.start] = average_daily_usage * n_days return cd
def generate_consumption_records(model, params_pre, params_post, datetimes_pre, datetimes_post, fuel_type, energy_unit, weather_source): datetimes = datetimes_pre[:-1] + datetimes_post records = [{ "start": start, "end": end, "value": np.nan } for start, end in zip(datetimes, datetimes[1:])] cd = ConsumptionData(records, fuel_type, energy_unit, record_type="arbitrary") periods = cd.periods() periods_pre = periods[:len(datetimes_pre[:-1])] periods_post = periods[len(datetimes_pre[:-1]):] period_pre_daily_temps = weather_source.daily_temperatures( periods_pre, TEMPERATURE_UNIT_STR) period_post_daily_temps = weather_source.daily_temperatures( periods_post, TEMPERATURE_UNIT_STR) period_pre_average_daily_usages = model.transform(period_pre_daily_temps, params_pre) period_post_average_daily_usages = model.transform(period_post_daily_temps, params_post) daily_noise_dist = None for average_daily_usage, period in zip(period_pre_average_daily_usages, periods_pre): n_days = period.timedelta.days if daily_noise_dist is not None: average_daily_usage += np.mean(daily_noise_dist.rvs(n_days)) cd.data[period.start] = average_daily_usage * n_days for average_daily_usage, period in zip(period_post_average_daily_usages, periods_post): n_days = period.timedelta.days if daily_noise_dist is not None: average_daily_usage += np.mean(daily_noise_dist.rvs(n_days)) cd.data[period.start] = average_daily_usage * n_days return cd