def generate_traces(self, device, instance_id, date):
        '''
        Returns trace:
	    series: indexed by time with column name 'time',
            series is series of average power value
        '''
        filename = self.path + device + '/dev_' + instance_id + '_' + date + '.csv'
        df = pd.read_csv(filename,sep=';',\
                header=None,names=['time','1s_W','8s_W'])
        df['time'] = pd.to_datetime(df['time'], format='%d/%m/%Y %H:%M:%S')
        df.set_index('time', inplace=True)
        try:
            series = df['1s_W'].resample(self.sample_rate, how='mean')
            series = series.map(decimal.Decimal) / decimal.Decimal(1000.0)
            series.name = device
        except ValueError:
            raise SampleError(self.sample_rate)
        series_mult = self.split_on_NANs(series)
        return [
            app.ApplianceTrace(
                single_series, {
                    'source': self.source,
                    'device_name': device,
                    'instance_name': instance_id,
                    'date': date,
                    'trace_num': i
                }) for i, single_series in enumerate(series_mult)
        ]
Exemplo n.º 2
0
def get_trace_in_time_of_day(device_trace,start_time,end_time):
    '''
    Given a trace and a start and end datetime.time, it returns a trace
    within that time period.
    '''
    print "WARNING: deprecated, "\
          "use trace.get_time_of_day(start_time,end_time) instead"
    new_series=device_trace.series.ix[start_time:end_time]
    return appliance.ApplianceTrace(new_series,device_trace.metadata)
Exemplo n.º 3
0
def aggregate_traces(traces, metadata, how="strict"):
    '''
    Given a list of temporally aligned traces, aggregate them into a single
    signal.
    '''
    if how == "strict":
        if not traces_aligned(traces):
            raise appliance.AlignmentError
        summed_series = traces[0].series
        for trace in traces[1:]:
            summed_series += trace.series
        return appliance.ApplianceTrace(summed_series, metadata)
    else:
        return NotImplementedError
Exemplo n.º 4
0
def resample_trace(trace,sample_rate):
    '''
    Takes a trace and resamples it to a given sample rate, defined by the
    offset aliases described in panda time series.
    http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases
    '''
    print "WARNING: deprecated, "\
          "use appliance_trace.resample(sample_rate) instead"
    try:
        new_series=trace.series.astype(float)
        new_series=new_series.resample(sample_rate,how='mean')
        new_series=new_series.map(decimal.Decimal)
        new_series.name=trace.series.name
        return appliance.ApplianceTrace(new_series,trace.metadata)
    except ValueError:
        raise SampleError(self.sample_rate)
Exemplo n.º 5
0
def concatenate_traces(traces, metadata=None, how="strict"):
    '''
    Given a list of appliance traces, returns a single concatenated
    trace. With how="strict" option, must be sampled at the same rate and
    consecutive, without overlapping datapoints.
    '''
    if not metadata:
        metadata = traces[0].metadata

    if how == "strict":
        # require ordered list of consecutive, similarly sampled traces with no
        # missing data.
        return appliance.ApplianceTrace(pd.concat([t.series for t in traces]),
                                        metadata)
    else:
        raise NotImplementedError
Exemplo n.º 6
0
def split_trace_into_rate(trace,rate):
    '''
    Given a single trace, a list of traces are returned that are each
    from a unique date.
    '''
    print "WARNING: deprecated, "\
          "use appliance trace.split_into_rate(rate) instead"
    # set rate to group by
    if rate == 'D' or rate == '1D':
        groupby_rate = trace.series.index.date
    elif rate == 'W' or rate == '1W':
        groupby_rate = trace.series.index.week
    else:
        raise NotImplementedError('Looking for "week" or "day"')

    traces=[]
    for i, group in enumerate(trace.series.groupby(groupby_rate)):
        metadata = dict.copy(trace.metadata)
        metadata['trace_num'] = i
        traces.append(appliance.ApplianceTrace(group[1],metadata))
    return traces