예제 #1
0
def get_daily_model(data,
                    fit_cdd=True,
                    fit_intercept_only=True,
                    fit_cdd_only=True,
                    fit_hdd_only=True,
                    fit_cdd_hdd=True):

    logger.info('get_daily_model: ...')
    # create a design matrix (the input to the model fitting step)
    logger.info('get_daily_model: creating baseline_design_matrix ...')
    baseline_design_matrix = eemeter.create_caltrack_daily_design_matrix(
        data['baseline_meter_data'],
        data['temperature_data'],
    )

    # build a CalTRACK model
    logger.info('get_daily_model: building CalTRACK model ...')
    baseline_model = eemeter.fit_caltrack_usage_per_day_model(
        baseline_design_matrix,
        fit_cdd=fit_cdd,
        fit_intercept_only=fit_intercept_only,
        fit_cdd_only=fit_cdd_only,
        fit_hdd_only=fit_hdd_only,
        fit_cdd_hdd=fit_cdd_hdd)

    logger.info('get_daily_model: DONE')
    return baseline_model
예제 #2
0
def eemeter_baseline_daily(file, temperature, install_start, install_end):
    """ 
    This method uses linear regression to create daily load profile to 
    serve as the counterfactual for the period where the new measure has 
    been installed. The key part of this model is the temperature changepoint
    determined by the heating and cooling degree days (HDD & CDD).
    
    CalTRACK refers to a standardized model used in california to measure 
    energy efficiency savings from various measures (i.e. LED lightbulbs,
    efficient appliances, weatherization, etc.). In this case it will be 
    used to model energy growth instead of savings.
    """
    file = 'data/cchp_daily.csv'
    daily_meter_data = eemeter.meter_data_from_csv(file, freq='daily')

    # get meter data suitable for fitting a baseline model
    baseline_meter_data, warnings = eemeter.get_baseline_data(
        daily_meter_data, end=install_start, max_days=365)

    # create a design matrix (the input to the model fitting step)
    baseline_design_matrix = eemeter.create_caltrack_daily_design_matrix(
        baseline_meter_data,
        temperature,
    )

    # build a daily CalTRACK model
    baseline_model = eemeter.fit_caltrack_usage_per_day_model(
        baseline_design_matrix)

    # get a year of reporting period data
    reporting_meter_data, warnings = eemeter.get_reporting_data(
        daily_meter_data, start=install_end, max_days=365)

    # compute metered savings for the year of the reporting period we've selected
    metered_growth_dataframe, error_bands = eemeter.metered_savings(
        baseline_model,
        reporting_meter_data,
        temperature,
        with_disaggregated=True)

    # change signs for load growth
    metered_growth_dataframe['metered_savings'] = metered_growth_dataframe[
        'metered_savings'].apply(lambda x: x * -1)

    # total metered savings
    additional_load = metered_growth_dataframe.metered_savings.sum()

    # metrics
    metrics_raw = baseline_model.json()
    r_squared_adj = metrics_raw['r_squared_adj']
    cvrmse_adj = metrics_raw['avgs_metrics']['cvrmse_adj']

    metrics = [r_squared_adj, cvrmse_adj, additional_load]

    return metered_growth_dataframe, metrics, baseline_model
예제 #3
0
def test_json_daily():
    meter_data, temperature_data, sample_metadata = (
        eemeter.load_sample("il-electricity-cdd-hdd-daily"))

    blackout_start_date = sample_metadata["blackout_start_date"]
    blackout_end_date = sample_metadata["blackout_end_date"]

    # get meter data suitable for fitting a baseline model
    baseline_meter_data, warnings = eemeter.get_baseline_data(
        meter_data, end=blackout_start_date, max_days=365)

    # create a design matrix (the input to the model fitting step)
    baseline_design_matrix = eemeter.create_caltrack_daily_design_matrix(
        baseline_meter_data,
        temperature_data,
    )

    # build a CalTRACK model
    baseline_model = eemeter.fit_caltrack_usage_per_day_model(
        baseline_design_matrix, )

    # get a year of reporting period data
    reporting_meter_data, warnings = eemeter.get_reporting_data(
        meter_data, start=blackout_end_date, max_days=365)

    # compute metered savings
    metered_savings_dataframe, error_bands = eemeter.metered_savings(
        baseline_model,
        reporting_meter_data,
        temperature_data,
        with_disaggregated=True)

    # total metered savings
    total_metered_savings = metered_savings_dataframe.metered_savings.sum()

    # test JSON
    json_str = json.dumps(baseline_model.json())

    m = eemeter.CalTRACKUsagePerDayModelResults.from_json(json.loads(json_str))

    # compute metered savings from the loaded model
    metered_savings_dataframe, error_bands = eemeter.metered_savings(
        m, reporting_meter_data, temperature_data, with_disaggregated=True)

    # total metered savings
    total_metered_savings_2 = metered_savings_dataframe.metered_savings.sum()

    assert total_metered_savings == total_metered_savings_2
예제 #4
0
def get_daily_model(data, **kwargs):

    logger.info('get_daily_model: ...')
    # create a design matrix (the input to the model fitting step)
    logger.info('get_daily_model: creating baseline_design_matrix ...')
    baseline_design_matrix = eemeter.create_caltrack_daily_design_matrix(
        data['baseline_meter_data'],
        data['temperature_data'],
    )

    # build a CalTRACK model
    logger.info('get_daily_model: building CalTRACK model ...')
    baseline_model = eemeter.fit_caltrack_usage_per_day_model(
        baseline_design_matrix, **kwargs)

    logger.info('get_daily_model: DONE')
    return baseline_model