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
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
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
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
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, )
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