Skip to main content

rocc - Rate-of-change check for time series

https://img.shields.io/pypi/v/rocc.svg https://img.shields.io/travis/openmeteo/rocc.svg Coverage Updates
from rocc import Threshold, rocc

result = rocc(
   timeseries=a_htimeseries_object,
   thresholds=(
      Threshold("10min", 10),
      Threshold("20min", 15),
      Threshold("H", 40),
   ),
   symmetric=True,
   flag="MYFLAG",
)

timeseries is a HTimeseries object. thresholds is, obviously, a list of thresholds. Threshold is a named tuple whose items are delta_t (a pandas interval specification) and allowed_diff (a floating point number).

The function checks whether there exist intervals during which the value of the time series changes by more than the specified threshold. The offending records are flagged with the specified flag.

It returns a list of strings describing where the thresholds have been exceeded.

If flag is None or the empty string, then the offending records are not flagged, and the only result is the returned value.

Here is an example time series:

2020-10-06 14:30    24.0
2020-10-06 14:40    25.0
2020-10-06 14:50    36.0 *
2020-10-06 15:01    51.0
2020-10-06 15:21    55.0
2020-10-06 15:31    65.0
2020-10-06 15:41    75.0 *
2020-10-06 15:51    70.0

After running rocc() with the thresholds specified in the example above, the records marked with a star will be flagged. The record 14:50 will be flagged because in the preceding 10-minute interval the value increases by 11, which is more than 10. The record 15:41 will be flagged because in the preceding 20-minute interval the value increases by 20, which is more than 15. The record 15:01 will be unflagged; although there’s a large difference since 14:40, this is 21 minutes, not 20, so the 20-minute threshold of 15 does not apply; likewise, there’s a difference of 15 from 14:50, which does not exceed the 20-minute threshold of 15, and while it does exceed the 10-minute threshold of 10, it’s 11 minutes, not 10. There’s also not any difference larger than 40 within an hour anywhere.

The return value in this example will be a list of two strings:

"2020-10-06T14:50  +11.0 in 10min (> 10.0)"
"2020-10-06T15:41  +20.0 in 20min (> 15.0)"

The return value should only be used for consumption by humans; it is subject to change.

If symmetric is True, it is the absolute value of the change that matters, not its direction. In this case, allowed_diff must be positive. If symmetric is False (the default), only rates larger than positive allow_diff or rates smaller than negative allow_diff are flagged.

History

3.0.2 (2024-04-17)

  • Compatible with htimeseries 7.

3.0.1 (2023-12-20)

  • Compatible with htimeseries 6.

3.0.0 (2022-12-01)

  • Compatible with htimeseries 4, which uses aware timestamps.

2.0.0 (2020-02-11)

  • rocc() now returns a list of strings with descriptions of where the thresholds have been exceeded.

  • The default flag is now to not add any flags.

  • A bug has been fixed where it would crash if input time series was empty.

1.0.0 (2020-11-06)

  • Initial release

Release files for rocc 3.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rocc 3.0.2
File Size Uploaded
rocc-3.0.2.tar.gz 75.1 kB Details

Release files / rocc-3.0.2.tar.gz

Download URL rocc-3.0.2.tar.gz
Size 75.1 kB
Tags Source
SHA-256 checksum
How to use checksums
30860f2c114f467ec3bcdef7ed702d343efdb2e0740ab7944b6233eb37508f66
BLAKE2b-256 checksum
How to use checksums
a67c1bdf3ec3fb9fa2711802ccbca4dcfab8967fa959d74de7ec3c3287a3102b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.2
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page