def create_caltrack_billing_design_matrix(meter_data, temperature_data): """A helper function which calls basic feature creation methods to create a design matrix suitable for use with CalTRACK Billing methods. Parameters ---------- meter_data : :any:`pandas.DataFrame` Hourly meter data in eemeter format. temperature_data : :any:`pandas.Series` Hourly temperature data in eemeter format. Returns ------- design_matrix : :any:`pandas.DataFrame` A design matrics with mean usage_per_day, hdd_30-hdd_90, and cdd_30-cdd_90 features. """ usage_per_day = compute_usage_per_day_feature(meter_data, series_name="meter_value") temperature_features = compute_temperature_features( meter_data.index, temperature_data, heating_balance_points=range(30, 91), cooling_balance_points=range(30, 91), data_quality=True, tolerance=pd.Timedelta( "35D" ), # limit temperature data matching to periods of up to 35 days. ) design_matrix = merge_features([usage_per_day, temperature_features]) return design_matrix
def create_caltrack_daily_design_matrix(meter_data, temperature_data): usage_per_day = compute_usage_per_day_feature(meter_data, series_name="meter_value") temperature_features = compute_temperature_features( meter_data.index, temperature_data, heating_balance_points=range(30, 91), cooling_balance_points=range(30, 91), data_quality=True, ) design_matrix = merge_features([usage_per_day, temperature_features]) return design_matrix
def create_caltrack_billing_design_matrix(meter_data, temperature_data): usage_per_day = compute_usage_per_day_feature(meter_data, series_name="meter_value") temperature_features = compute_temperature_features( meter_data.index, temperature_data, heating_balance_points=range(30, 91), cooling_balance_points=range(30, 91), data_quality=True, tolerance=pd.Timedelta( "35D" ), # limit temperature data matching to periods of up to 35 days. ) design_matrix = merge_features([usage_per_day, temperature_features]) return design_matrix
def test_compute_usage_per_day_feature_billing(meter_data_billing): usage_per_day = compute_usage_per_day_feature(meter_data_billing) assert usage_per_day["2017-01-01T00:00:00Z"] == 1.0 / 31 assert usage_per_day.sum().round(3) == 3.257
def test_compute_usage_per_day_feature_daily(meter_data_daily): usage_per_day = compute_usage_per_day_feature(meter_data_daily) assert usage_per_day["2017-01-01T00:00:00Z"] == 1 assert usage_per_day.sum() == 99.0
def test_compute_usage_per_day_feature_hourly_series_name(meter_data_hourly): usage_per_day = compute_usage_per_day_feature(meter_data_hourly, series_name="meter_value") assert usage_per_day.name == "meter_value"
def test_compute_usage_per_day_feature_hourly(meter_data_hourly): usage_per_day = compute_usage_per_day_feature(meter_data_hourly) assert usage_per_day.name == "usage_per_day" assert usage_per_day["2017-01-01T00:00:00Z"] == 24 assert usage_per_day.sum() == 2376.0