Пример #1
0
def test_temperature_data_from_csv_gzipped(sample_metadata):
    meter_item = sample_metadata["il-electricity-cdd-hdd-daily"]
    temperature_filename = meter_item["temperature_filename"]

    with resource_stream("eemeter.samples", temperature_filename) as f:
        temperature_data = temperature_data_from_csv(f, gzipped=True)
    assert temperature_data.shape == (19417, )
    assert temperature_data.index.tz.zone == "UTC"
    assert temperature_data.index.freq is None
Пример #2
0
def test_temperature_data_from_csv_custom_columns(sample_metadata):
    with TemporaryFile() as f:
        f.write(b"dt_custom,tempC\n" b"2017-01-01T00:00:00,10\n")
        f.seek(0)
        temperature_data = temperature_data_from_csv(f,
                                                     date_col="dt_custom",
                                                     temp_col="tempC")
    assert temperature_data.shape == (1, )
    assert temperature_data.index.tz.zone == "UTC"
    assert temperature_data.index.freq is None
Пример #3
0
def test_temperature_data_from_csv(sample_metadata):
    meter_item = sample_metadata["il-electricity-cdd-hdd-daily"]
    temperature_filename = meter_item["temperature_filename"]

    fname = resource_filename("eemeter.samples", temperature_filename)
    with gzip.open(fname) as f:
        temperature_data = temperature_data_from_csv(f)
    assert temperature_data.shape == (19417, )
    assert temperature_data.index.tz.zone == "UTC"
    assert temperature_data.index.freq is None
Пример #4
0
def load_sample(sample):
    """ Load meter data, temperature data, and metadata for associated with a
    particular sample identifier. Note: samples are simulated, not real, data.

    Parameters
    ----------
    sample : :any:`str`
        Identifier of sample. Complete list can be obtained with
        :any:`eemeter.samples`.

    Returns
    -------
    meter_data, temperature_data, metadata : :any:`tuple` of :any:`pandas.DataFrame`, :any:`pandas.Series`, and :any:`dict`
        Meter data, temperature data, and metadata for this sample identifier.
    """
    sample_metadata = _load_sample_metadata()
    metadata = sample_metadata.get(sample)
    if metadata is None:
        raise ValueError("Sample not found: {}. Try one of these?\n{}".format(
            sample,
            "\n".join([
                " - {}".format(key) for key in sorted(sample_metadata.keys())
            ]),
        ))

    freq = metadata.get("freq")
    if freq not in ("hourly", "daily"):
        freq = None

    meter_data_filename = metadata["meter_data_filename"]
    with resource_stream("eemeter.samples", meter_data_filename) as f:
        meter_data = meter_data_from_csv(f, gzipped=True, freq=freq)

    temperature_filename = metadata["temperature_filename"]
    with resource_stream("eemeter.samples", temperature_filename) as f:
        temperature_data = temperature_data_from_csv(f,
                                                     gzipped=True,
                                                     freq="hourly")

    metadata["blackout_start_date"] = pytz.UTC.localize(
        parse_date(metadata["blackout_start_date"]))
    metadata["blackout_end_date"] = pytz.UTC.localize(
        parse_date(metadata["blackout_end_date"]))

    return meter_data, temperature_data, metadata
Пример #5
0
def _get_data(
    sample, meter_file, temperature_file, heating_balance_points, cooling_balance_points
):

    if sample is not None:
        with resource_stream("eemeter.samples", "metadata.json") as f:
            metadata = json.loads(f.read().decode("utf-8"))
        if sample in metadata:
            click.echo("Loading sample: {}".format(sample))

            meter_file = resource_stream(
                "eemeter.samples", metadata[sample]["meter_data_filename"]
            )
            temperature_file = resource_stream(
                "eemeter.samples", metadata[sample]["temperature_filename"]
            )
        else:
            raise click.ClickException(
                "Sample not found. Try one of these?\n{}".format(
                    "\n".join([" - {}".format(key) for key in sorted(metadata.keys())])
                )
            )

    if meter_file is not None:
        gzipped = meter_file.name.endswith(".gz")
        meter_data = meter_data_from_csv(meter_file, gzipped=gzipped)
    else:
        raise click.ClickException("Meter data not specified.")

    if temperature_file is not None:
        gzipped = temperature_file.name.endswith(".gz")
        temperature_data = temperature_data_from_csv(
            temperature_file, gzipped=gzipped, freq="hourly"
        )
    else:
        raise click.ClickException("Temperature data not specified.")

    return merge_temperature_data(
        meter_data,
        temperature_data,
        heating_balance_points=heating_balance_points,
        cooling_balance_points=cooling_balance_points,
    )
Пример #6
0
from eemeter_baseline import *

font = {'weight': 'normal', 'size': 20}
plt.rc('font', **font)
plt.rc('figure', figsize=(15, 10))
plt.rc('xtick.major', pad=8)  # xticks too close to border!
plt.rc('ytick.major', pad=10)  # xticks too close to border!
plt.rc('xtick', labelsize='small')
plt.rc('ytick', labelsize='small')

##############################################################################
#### LOAD & FORMAT DATA ######################################################
##############################################################################

# load 3 datasets
temperature = eemeter.temperature_data_from_csv("data/temperature.csv",
                                                freq='hourly')
t3_ami = pd.read_csv('data/t3_measure_ami.csv')
t3_daily = pd.read_csv('data/t3_measure_daily.csv')

# split ami out by measure type
aev_ami = t3_ami[t3_ami['Type'] == 'AEV']
phev_ami = t3_ami[t3_ami['Type'] == 'PHEV']
cchp_ami = t3_ami[t3_ami['Type'] == 'CCHP']
ebike_ami = t3_ami[t3_ami['Type'] == 'eBike']

aev_ami[['start', 'value']].to_csv('data/aev_ami.csv')
phev_ami[['start', 'value']].to_csv('data/phev_ami.csv')
cchp_ami[['start', 'value']].to_csv('data/cchp_ami.csv')
ebike_ami[['start', 'value']].to_csv('data/ebike_ami.csv')

# split daily usage out by measure type