def test_csv(): def time_parse(value): return int(value) def value_parse(value): try: return int(value) except ValueError: return None filename = 'sample.csv' with open(filename, 'w') as csvfile: writer = csv.writer(csvfile) writer.writerow(['hour', 'value']) writer.writerow(['10', '15']) writer.writerow(['11', '34']) writer.writerow(['12', '19']) writer.writerow(['13', 'nan']) writer.writerow(['14', '18']) writer.writerow(['15', 'nan']) ts = TimeSeries.from_csv(filename, time_column=0, time_transform=time_parse, value_column=1, value_transform=value_parse, default=None) os.remove(filename) assert ts[9] is None assert ts[20] is None assert ts[13.5] is None histogram = ts.distribution() nose.tools.assert_almost_equal(histogram.mean(), (15 + 34 + 19 + 18) / 4.0) filename = 'sample.csv' with open(filename, 'w') as csvfile: writer = csv.writer(csvfile) writer.writerow(['hour', 'value']) writer.writerow(['2000-01-01 10:00:00', '15']) writer.writerow(['2000-01-01 11:00:00', '34']) writer.writerow(['2000-01-01 12:00:00', '19']) writer.writerow(['2000-01-01 13:00:00', 'nan']) writer.writerow(['2000-01-01 14:00:00', '18']) writer.writerow(['2000-01-01 15:00:00', 'nan']) ts = TimeSeries.from_csv(filename) os.remove(filename) assert ts[datetime(2000, 1, 1, 9)] is None assert ts[datetime(2000, 1, 1, 10, 30)] == '15' assert ts[datetime(2000, 1, 1, 20)] == 'nan'
def add_annotation(self, file: os.PathLike, **kwargs): self.file_list.append(file) # setup default kwargs # if self.ordinal: kwargs.update({'value_transform': lambda cls: self.order.get(cls)}) if not kwargs.get('time_transform', None): kwargs.update({'time_transform': lambda t: float(t)}) if not kwargs.get('skip_header', None): kwargs.update({'skip_header': False}) if not os.path.isfile(file): raise FileNotFoundError(f'File {file} not found.') if os.path.getsize(file): ts = TimeSeries.from_csv(file, **kwargs).slice(self.start_time, self.end_time) meta = pd.read_csv(file, names=COLUMNS.keys()) meta.drop(meta[meta['time'] < self.start_time].index) meta.drop(meta[meta['time'] > self.end_time].index) else: ts = TimeSeries() meta = pd.DataFrame() self.metadata.append(meta) self.series.append(ts) self._data = self._report()
def __init__(self, file_list): """ Takes a list of csv files and spits out a behavior index """ self.ts_list = list() self._dict = dict() for file in file_list: ts = TimeSeries.from_csv(file) self.ts_list.append(ts) self.file_list = file_list