Timeseries analysis tools with specific focus on timespans. Built on top of pandas.
This library provides helpers for timespans manipulation using pandas objects. Let's consider the following DataFrame df
.
In [1]: df
Out[1]:
beg end
0 2015-01-01 2015-01-02
1 2015-01-02 2015-01-03
2 2015-01-04 2015-01-05
from chrony.charting import plot_events
plot_events(
categories=np.array(['a', 'b']),
xmin=np.array([2, 4], dtype='d'),
xmax=np.array([6, 8], dtype='d'),
xlim=(0, 10),
labels=['RED', 'BLUE']
)
df = pd.DataFrame({})
df0 = pd.DataFrame({
'ts_beg': pd.date_range('2015-10-02', freq='2h', periods=12),
'ts_end': pd.date_range('2015-10-02T02:00:00', freq='2h', periods=12),
'job': ['A.%.2d' % i for i in range(12)],
'category': 'A'
})
df1 = pandas.DataFrame({
'ts_beg': pd.date_range('2015-10-02T01:00:00', freq='2h', periods=12),
'ts_end': pd.date_range('2015-10-02T03:00:00', freq='2h', periods=12),
'job': ['B.%.2d' % i for i in range(12)],
'category': 'B'
})
df = df.append(df0)
df = df.append(df1)
plot_events(
categories=df['category'].values,
xmin=df['ts_beg'].values,
xmax=df['ts_end'].values,
labels=df['job'].values
)
This following method gives a quick overview of your timespans:
In [2]: describe_timespan(df['beg'], df['end'])
Out[2]:
beg 2015-01-01 00:00:00
count 3
contiguous transitions 1
not contiguous transitions 1
coverage 0.75
end 2015-01-05 00:00:00
dtype: object
The library gives you a audit_timespan
function which raises an error if:
- beg or end columns have a timezone (due to pandas-dev/pandas#11410)
- Lengths of beg or end columns does not match
- Columns are not sorted
- There is overlap between timespans.
Check out tests for examples.
The audit_timespan_print
function makes the exact same verifications as audit_timespan
, except it does not raise an error but prints the list of problems it detected.
Example:
>>> import chrony.chrony.timespans as chrony
>>> chrony.audit_timespan_print(events.beg,events.end)
At row 99334 end 2015-01-22 14:27:24 is posterior to 2015-01-22 14:17:43 by 0 days 00:09:41
>>> events.iloc[[99334,99335]]
beg end produced_count state_id \
99334 2015-01-22 14:17:43 2015-01-22 14:27:24 12 208
99335 2015-01-22 14:17:43 2015-01-22 14:17:43 12 216
state_name
99334 Stopped
99335 Ready
A timespan is a row of a pandas.DataFrame
which represents a period of time between two fixed points. These are represented using a beg and a end column.
nosetests chrony --with-coverage --cover-package chrony