Exemple #1
0
    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