def test_hdfstore_timeseries_manager_sorted(self, tmpdir): """Check hdfstore returns a sorted index dataframe""" t_start1 = dt.datetime(2017, 1, 1) t_end1 = dt.datetime(2017, 1, 6) index1 = pd.date_range(t_start1, t_end1, freq='D', closed='left') t_start2 = dt.datetime(2017, 1, 3) t_end2 = dt.datetime(2017, 1, 5) index2 = pd.date_range(t_start2, t_end2, freq='D', closed='left') df1 = pd.DataFrame({'data': range(len(index1))}, index=index1) df2 = pd.DataFrame({'data': range(len(index2))}, index=index2) mgr = HDFStoreTimeseriesMgr(str(tmpdir)) mgr.set('test', 'df', Timeseries.from_dataframe(df1)) mgr.set('test', 'df', Timeseries.from_dataframe(df2)) ts_out = mgr.get('test', 'df', t_start=t_start1, t_end=t_end1) assert ts_out.dataframe.index.equals(index1)
def tsload(data_list): """Deserialize timeseries values from a dict to a structured DataFrame. :param list data_list: Timeseries values (as a list of dicts). :return Timeseries: Timeseries values loaded in structured DataFrame. """ if not data_list: return Timeseries() # Create dataframe and rename columns dataframe = pd.DataFrame(data_list) dataframe = dataframe.rename( columns={ 'timestamp': Timeseries.TIMESTAMPS_COL, 'value': Timeseries.DATA_COL, 'update_ts': Timeseries.UPDATE_TIMESTAMP_COL, 'quality': Timeseries.QUALITY_COL, }) # Reject if duplicate indexes dups = dataframe[Timeseries.TIMESTAMPS_COL].duplicated() if any(dups): abort(422, errors={ 'data': '{} duplicate indexe(s)'.format(np.count_nonzero(dups)) }) # Create and return timeseries return Timeseries.from_dataframe(dataframe)
def test_timeseries_stats(self): index = [ dt.datetime(2017, 1, 5), dt.datetime(2017, 1, 1), dt.datetime(2017, 1, 8), dt.datetime(2017, 1, 3), ] data = [1, 2, 3, 4] df = pd.DataFrame({'data': data}, index=index) ts = Timeseries.from_dataframe(df) assert ts.stats() == { 'count': 4, 'start': dt.datetime(2017, 1, 1), 'end': dt.datetime(2017, 1, 8), 'update_ts': ts.dataframe[Timeseries.UPDATE_TIMESTAMP_COL].max() }