diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 55800ae..31e010f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -11,31 +11,60 @@ on:
- master
jobs:
- build:
+ lint:
+ name: Lint
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v4
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: 3.9
+ cache: "pip"
+ cache-dependency-path: pyproject.toml
+
+ - name: Install Python dependencies
+ run: |
+ pip install .
+
+ - name: ruff-lint
+ uses: chartboost/ruff-action@v1
+
+ - name: ruff-format
+ uses: chartboost/ruff-action@v1
+ with:
+ args: "format --check"
+
+ test:
+ needs: lint
+ name: Test
runs-on: ubuntu-latest
strategy:
matrix:
- python-version: [3.9, "3.10", "3.11"]
+ python-version: [3.9, "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
+
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
+ cache: "pip"
+ cache-dependency-path: pyproject.toml
+
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e .[ci]
- - name: Lint with flake8
- run: |
- # stop the build if there are Python syntax errors or undefined names
- flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
- # exit-zero treats all errors as warnings.
- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=80 --statistics
+
+
- name: Run pytest
run: |
pytest
+
- name: Run codacy-coverage-reporter
uses: codacy/codacy-coverage-reporter-action@master
with:
diff --git a/.readthedocs.yml b/.readthedocs.yml
index eaf0e55..3a374e9 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -8,15 +8,12 @@ version: 2
build:
os: ubuntu-22.04
tools:
- python: "3.9"
+ python: "3.11"
# Build documentation in the docs/ directory with Sphinx
sphinx:
configuration: docs/conf.py
-# Optionally build your docs in additional formats such as PDF and ePub
-formats: all
-
# Optionally set the version of Python and requirements required to build your docs
python:
install:
diff --git a/docs/conf.py b/docs/conf.py
index ec09b5c..833df79 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -13,15 +13,14 @@
import os
import sys
-sys.path.insert(0, os.path.abspath('.'))
+sys.path.insert(0, os.path.abspath("."))
from traval import __version__
-
# -- Project information -----------------------------------------------------
-project = 'traval'
-copyright = '2021, Artesia'
-author = 'Artesia'
+project = "traval"
+copyright = "2024, Artesia"
+author = "Artesia"
# The short X.Y version
version = __version__
@@ -34,29 +33,29 @@
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
- 'sphinx.ext.autodoc',
- 'sphinx.ext.autosummary',
- 'sphinx.ext.napoleon',
- 'sphinx.ext.doctest',
- 'sphinx.ext.intersphinx',
- 'sphinx.ext.todo',
- 'sphinx.ext.coverage',
- 'sphinx.ext.mathjax',
- 'sphinx.ext.ifconfig',
- 'sphinx.ext.viewcode',
- 'IPython.sphinxext.ipython_console_highlighting', # lowercase didn't work
- 'sphinx.ext.autosectionlabel',
- 'nbsphinx',
- 'nbsphinx_link'
+ "sphinx.ext.autodoc",
+ "sphinx.ext.autosummary",
+ "sphinx.ext.napoleon",
+ "sphinx.ext.doctest",
+ "sphinx.ext.intersphinx",
+ "sphinx.ext.todo",
+ "sphinx.ext.coverage",
+ "sphinx.ext.mathjax",
+ "sphinx.ext.ifconfig",
+ "sphinx.ext.viewcode",
+ "IPython.sphinxext.ipython_console_highlighting", # lowercase didn't work
+ "sphinx.ext.autosectionlabel",
+ "nbsphinx",
+ "nbsphinx_link",
]
# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
+templates_path = ["_templates"]
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
-exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
# -- Options for HTML output -------------------------------------------------
@@ -64,24 +63,24 @@
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
-html_theme = 'sphinx_rtd_theme'
+html_theme = "sphinx_rtd_theme"
html_theme_options = {
- 'display_version': True,
- 'prev_next_buttons_location': 'bottom',
+ "display_version": True,
+ "prev_next_buttons_location": "bottom",
# 'style_external_links': False,
# 'vcs_pageview_mode': '',
# 'style_nav_header_background': 'white',
# Toc options
- 'collapse_navigation': False,
- 'sticky_navigation': False,
- 'navigation_depth': 4,
- 'includehidden': True,
- 'titles_only': False,
+ "collapse_navigation": False,
+ "sticky_navigation": False,
+ "navigation_depth": 4,
+ "includehidden": True,
+ "titles_only": False,
"github_url": "https://github.com/ArtesiaWater/traval",
}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
+html_static_path = ["_static"]
diff --git a/docs/examples.rst b/docs/examples.rst
index d10fa86..fc7aba7 100644
--- a/docs/examples.rst
+++ b/docs/examples.rst
@@ -3,8 +3,12 @@ Examples
The following notebooks contain examples showcasing traval.
-The first example shows how to apply the tools contained in traval to detect errors in a single timeseries.
-The second example shows how the same can be done for a full dataset with lots of timeseries.
+- The first example shows how to apply the tools contained in traval to detect errors in
+ a single time series.
+- The second example shows how the same can be done for a full
+ dataset with lots of time series.
+- The third notebook contains small examples for each of the error detection rules
+ contained in traval.
.. toctree::
:maxdepth: 1
diff --git a/docs/examples/ex03_rules.nblink b/docs/examples/ex03_rules.nblink
new file mode 100644
index 0000000..cb2b3cb
--- /dev/null
+++ b/docs/examples/ex03_rules.nblink
@@ -0,0 +1,3 @@
+{
+ "path": "../../examples/notebooks/ex03_testing_rules.ipynb"
+}
diff --git a/docs/getting_started.rst b/docs/getting_started.rst
index 25d695e..5b8ed3e 100644
--- a/docs/getting_started.rst
+++ b/docs/getting_started.rst
@@ -5,11 +5,8 @@ Getting Started
Installation
------------
-To install traval, a working version of Python 3.7 or 3.8 has to be installed on
-your computer. We recommend using the Anaconda Distribution with Python 3.7 as
-it includes most of the python package dependencies and the Jupyter Notebook
-software to run the notebooks. However, you are free to install any
-Python distribution you want.
+To install traval, a working version of Python 3.9 or higher has to be installed on
+your computer.
To install traval, use:
@@ -71,10 +68,10 @@ Take a look at the ruleset by just typing `ruleset`:
1: rule1 0
-Next define a Detector object. This object is designed to store a timeseries
+Next define a Detector object. This object is designed to store a time series
and the intermediate and final results after applying an error detection
-algorithm. Initialize the Detector object with some timeseries. In this example
-we assume there is a timeseries called `raw_series`:
+algorithm. Initialize the Detector object with some time series. In this example
+we assume there is a time series called `raw_series`:
.. code:: python
@@ -82,7 +79,7 @@ we assume there is a timeseries called `raw_series`:
detect = traval.Detector(raw_series)
-Apply our first algorithm to the timeseries.
+Apply our first algorithm to the time series.
.. code:: python
diff --git a/docs/index.rst b/docs/index.rst
index 6d602ad..801d02e 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -6,20 +6,20 @@
Welcome to traval's documentation!
==================================
-Python package for applying automatic error detection algorithms to timeseries.
+Python package for applying automatic error detection algorithms to time series.
This module is set up to provide tools for applying any error detection
-algorithm to any timeseries. The module consists of three main components:
+algorithm to any time series. The module consists of three main components:
-- `Detector`: a data management object for storing timeseries and error detection results.
+- `Detector`: a data management object for storing time series and error detection results.
- `RuleSet`: the RuleSet object is a highly flexible object for defining error detection algorithms based on (user-defined) functions.
-- `SeriesComparison*`: objects for comparing timeseries. These objects include plots for visualizing the comparisons.
+- `SeriesComparison*`: objects for comparing time series. These objects include plots for visualizing the comparisons.
The general workflow consists of the following steps:
1. Define error detection algorithm(s).
-2. Load data, i.e. raw timeseries data and optionally timeseries representing the "truth" to see how well the algorithms perform.
-3. Initialize Detector objects and apply algorithms to timeseries.
+2. Load data, i.e. raw time series data and optionally time series representing the "truth" to see how well the algorithms perform.
+3. Initialize Detector objects and apply algorithms to time series.
4. Store and analyze the results.
For more detailed information and examples, please refer to the notebooks in
diff --git a/docs/modules.rst b/docs/modules.rst
index 85a1eaa..ae111b2 100644
--- a/docs/modules.rst
+++ b/docs/modules.rst
@@ -25,15 +25,15 @@ Rule Library
:members:
-Timeseries Comparison
----------------------
+Time Series Comparison
+----------------------
.. automodule:: traval.ts_comparison
:members:
-Timeseries Utilities
---------------------
+Time series Utilities
+---------------------
.. automodule:: traval.ts_utils
:members:
diff --git a/examples/notebooks/ex01_applying_automatic_error_detection_algorithms_to_a_timeseries.ipynb b/examples/notebooks/ex01_applying_automatic_error_detection_algorithms_to_a_timeseries.ipynb
index fd40799..a3e0e6f 100644
--- a/examples/notebooks/ex01_applying_automatic_error_detection_algorithms_to_a_timeseries.ipynb
+++ b/examples/notebooks/ex01_applying_automatic_error_detection_algorithms_to_a_timeseries.ipynb
@@ -4,12 +4,12 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "# Example 1: Applying an automatic error detection algorithm to a timeseries\n",
+ "# Example 1: Applying an automatic error detection algorithm to a time series\n",
"_Created by DavĂd Brakenhoff, Artesia, May 2020_\n",
"\n",
"
\n",
"\n",
- "This notebook contains a simple example how to set up an automatic error detection algorithm based on a few simple rules and applies those rules to a groundwater timeseries.\n",
+ "This notebook contains a simple example how to set up an automatic error detection algorithm based on a few simple rules and applies those rules to a groundwater time series.\n",
"\n",
"First import the requisite packages:"
]
@@ -21,6 +21,7 @@
"outputs": [],
"source": [
"import os\n",
+ "\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
@@ -86,7 +87,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
@@ -124,7 +125,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 4,
"metadata": {},
"outputs": [
{
@@ -138,7 +139,7 @@
" 4: combine (1, 2, 3)"
]
},
- "execution_count": 5,
+ "execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
@@ -159,7 +160,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 5,
"metadata": {},
"outputs": [
{
@@ -177,7 +178,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
@@ -186,14 +187,6 @@
"text": [
"RuleSet written to file: 'test.json'\n"
]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/home/david/Github/traval/traval/ruleset.py:436: UserWarning: Custom functions will not be preserved when storing RuleSet as JSON file!\n",
- " warnings.warn(msg)\n"
- ]
}
],
"source": [
@@ -210,7 +203,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
@@ -229,7 +222,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 8,
"metadata": {},
"outputs": [
{
@@ -238,7 +231,7 @@
"Detector: "
]
},
- "execution_count": 9,
+ "execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
@@ -257,7 +250,7 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
@@ -273,19 +266,17 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
- "image/png": "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\n",
+ "image/png": "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",
"text/plain": [
- "
"
+ ],
+ "text/plain": [
+ " correction_code series_values comparison_values\n",
+ "2020-01-01 99 NaN NaN\n",
+ "2020-01-02 0 NaN NaN\n",
+ "2020-01-03 0 NaN NaN\n",
+ "2020-01-04 0 NaN NaN\n",
+ "2020-01-05 0 NaN NaN\n",
+ "2020-01-06 0 NaN NaN\n",
+ "2020-01-07 0 NaN NaN\n",
+ "2020-01-08 0 NaN NaN\n",
+ "2020-01-09 0 NaN NaN\n",
+ "2020-01-10 99 NaN NaN"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# rule_combine_corrections_or\n",
+ "date_range = pd.date_range(\"2020-01-01\", freq=\"D\", periods=10)\n",
+ "s1 = pd.DataFrame(index=date_range, columns=[\"correction_code\"], data=0)\n",
+ "s2 = s1.copy()\n",
+ "s1.iloc[0] = 99\n",
+ "s2.iloc[-1] = -2\n",
+ "c11 = rlib.rule_combine_corrections_or(s1, s2)\n",
+ "assert (c11[\"correction_code\"] == 99).sum() == 2\n",
+ "c11"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## `rule_combine_corrections_and`\n",
+ "\n",
+ "Rule for combining results of any number of other rules. Observations are suspect if\n",
+ "ALL rules flag an observation as suspect."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 55,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
correction_code
\n",
+ "
series_values
\n",
+ "
comparison_values
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
2020-01-01
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-02
\n",
+ "
99
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-03
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-04
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-05
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-06
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-07
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-08
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-09
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-10
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " correction_code series_values comparison_values\n",
+ "2020-01-01 0 NaN NaN\n",
+ "2020-01-02 99 NaN NaN\n",
+ "2020-01-03 0 NaN NaN\n",
+ "2020-01-04 0 NaN NaN\n",
+ "2020-01-05 0 NaN NaN\n",
+ "2020-01-06 0 NaN NaN\n",
+ "2020-01-07 0 NaN NaN\n",
+ "2020-01-08 0 NaN NaN\n",
+ "2020-01-09 0 NaN NaN\n",
+ "2020-01-10 0 NaN NaN"
+ ]
+ },
+ "execution_count": 55,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# rule_combine_corrections_and\n",
+ "date_range = pd.date_range(\"2020-01-01\", freq=\"D\", periods=10)\n",
+ "s1 = pd.DataFrame(index=date_range, columns=[\"correction_code\"], data=0)\n",
+ "s2 = s1.copy()\n",
+ "s1.iloc[0:2] = 99\n",
+ "s2.iloc[1:3] = -2\n",
+ "c12 = rlib.rule_combine_corrections_and(s1, s2)\n",
+ "assert (c12[\"correction_code\"] == 99).sum() == 1\n",
+ "c12"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## `rule_funcdict`\n",
+ "\n",
+ "Rule that takes a dictionary of functions and applies those iteratively to the original\n",
+ "time series. Observations are suspect if any rule flags an observation as suspect."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
correction_code
\n",
+ "
series_values
\n",
+ "
comparison_values
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
2020-01-01
\n",
+ "
99
\n",
+ "
0.0
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-02
\n",
+ "
99
\n",
+ "
1.0
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-03
\n",
+ "
99
\n",
+ "
2.0
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-04
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-05
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-06
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-07
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-08
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-09
\n",
+ "
99
\n",
+ "
8.0
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-10
\n",
+ "
99
\n",
+ "
9.0
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " correction_code series_values comparison_values\n",
+ "2020-01-01 99 0.0 NaN\n",
+ "2020-01-02 99 1.0 NaN\n",
+ "2020-01-03 99 2.0 NaN\n",
+ "2020-01-04 0 NaN NaN\n",
+ "2020-01-05 0 NaN NaN\n",
+ "2020-01-06 0 NaN NaN\n",
+ "2020-01-07 0 NaN NaN\n",
+ "2020-01-08 0 NaN NaN\n",
+ "2020-01-09 99 8.0 NaN\n",
+ "2020-01-10 99 9.0 NaN"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# rule_funcdict_to_nan\n",
+ "date_range = pd.date_range(\"2020-01-01\", freq=\"D\", periods=10)\n",
+ "s1 = pd.Series(index=date_range, data=np.arange(10))\n",
+ "fdict = {\"lt_3\": lambda s: s < 3.0, \"gt_7\": lambda s: s > 7.0}\n",
+ "c13 = rlib.rule_funcdict(s1, fdict)\n",
+ "assert (c13[\"correction_code\"] == 99).sum() == 5\n",
+ "c13"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## `rule_keep_comments`\n",
+ "\n",
+ "Rule that keeps observations that have some comment associated with it. Can be used to\n",
+ "filter validated time series comments to obtain specific observations."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
correction_code
\n",
+ "
series_values
\n",
+ "
comparison_values
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
2020-01-01
\n",
+ "
99
\n",
+ "
0.0
\n",
+ "
keep
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-02
\n",
+ "
99
\n",
+ "
1.0
\n",
+ "
keep
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-03
\n",
+ "
99
\n",
+ "
2.0
\n",
+ "
keep
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-04
\n",
+ "
99
\n",
+ "
3.0
\n",
+ "
keep
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-05
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-06
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-07
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-08
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-09
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
2020-01-10
\n",
+ "
0
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " correction_code series_values comparison_values\n",
+ "2020-01-01 99 0.0 keep\n",
+ "2020-01-02 99 1.0 keep\n",
+ "2020-01-03 99 2.0 keep\n",
+ "2020-01-04 99 3.0 keep\n",
+ "2020-01-05 0 NaN \n",
+ "2020-01-06 0 NaN \n",
+ "2020-01-07 0 NaN \n",
+ "2020-01-08 0 NaN \n",
+ "2020-01-09 0 NaN \n",
+ "2020-01-10 0 NaN "
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# rule_keep_comments\n",
+ "date_range = pd.date_range(\"2020-01-01\", freq=\"D\", periods=10)\n",
+ "raw = pd.Series(index=date_range, data=np.arange(10), dtype=float)\n",
+ "comments = [\"keep\"] * 4 + [\"\"] * 3 + [\"discard\"] * 3\n",
+ "comment_series = pd.Series(index=raw.index, data=comments)\n",
+ "c14 = rlib.rule_keep_comments(raw, [\"keep\"], comment_series)\n",
+ "assert (c14[\"correction_code\"] == 99).sum() == 4\n",
+ "assert (c14[\"comparison_values\"] == \"keep\").sum() == 4\n",
+ "c14"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "artesia",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/pyproject.toml b/pyproject.toml
index a0db3bb..0477869 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "traval"
dynamic = ["version"]
-description = "Python package for applying automatic error detection algorithms to timeseries. Create custom error detection algorithms to support data validation workflows."
+description = "Python package for applying automatic error detection algorithms to time series. Create custom error detection algorithms to support data validation workflows."
license = { file = "LICENSE" }
readme = "readme.md"
authors = [{ name = "D.A. Brakenhoff" }]
@@ -66,10 +66,23 @@ packages = ["traval"]
[tool.setuptools.dynamic]
version = { attr = "traval.version.__version__" }
-[tool.black]
+[tool.ruff]
line-length = 88
+extend-include = ["*.ipynb"]
-[tool.isort]
-profile = "black"
-src_paths = ["traval"]
-line_length = 88
+[tool.ruff.lint]
+# See: https://docs.astral.sh/ruff/rules/
+select = [
+ "C4", # flake8-comprehensions
+ "E", # pycodestyle
+ "F", # pyflakes
+ "I", # isort
+ "PT", # pytest-style
+ "D", # pydocstyle
+ "B", # flake8-bugbear
+ "NPY", # numpy
+]
+ignore = ["D100", "D102", "D103", "D401"]
+
+[tool.ruff.lint.pydocstyle]
+convention = "numpy"
diff --git a/readme.md b/readme.md
index f3e57de..6e34fa1 100644
--- a/readme.md
+++ b/readme.md
@@ -6,63 +6,71 @@
# traval
-Tools for applying automatic error detection algorithms to timeseries.
+Tools for applying automatic error detection algorithms to time series.
## Introduction
-This module is set up to provide tools for applying any error detection
-algorithm to any timeseries. The module consists of three main components:
+This module is set up to provide tools for applying any error detection
+algorithm to any time series. The module consists of three main components:
-- `RuleSet`: the RuleSet object is a highly flexible object for defining error detection algorithms based on (user-defined) functions.
-- `Detector`: a data management object for storing timeseries and error detection results.
-- `SeriesComparison*`: objects for comparing timeseries. These objects include plots for visualizing the comparisons.
+- `RuleSet`: the RuleSet object is a highly flexible object for defining error
+ detection algorithms based on (user-defined) functions.
+- `Detector`: a data management object for storing time series and error detection
+ results.
+- `SeriesComparison*`: objects for comparing time series. These objects include plots
+ for visualizing the comparisons.
The general workflow consists of the following steps:
-1. Define error detection algorithm(s).
-2. Load data, i.e. raw timeseries data and optionally timeseries representing the "truth" to see how well the algorithms perform.
-3. Initialize Detector objects and apply algorithms to timeseries.
-4. Store and analyze the results.
+1. Define error detection algorithm(s).
+2. Load data, i.e. raw time series data and optionally time series representing the
+ "truth" to see how well the algorithms perform.
+3. Initialize Detector objects and apply algorithms to time series.
+4. Store and analyze the results.
-For more detailed information and examples, please refer to the notebooks in
+For more detailed information and examples, please refer to the notebooks in
the examples directory.
## Installation
To install the traval module, follow these steps:
-1. Clone the repository from GitHub.
-2. Open a terminal and navigate to the module root directory: `/traval`
-3. Type `pip install -e .`
+1. Clone the repository from GitHub.
+2. Open a terminal and navigate to the module root directory: `/traval`
+3. Type `pip install -e .`
## Usage
-The basic usage of the module is described below. To start using the module,
+The basic usage of the module is described below. To start using the module,
import the package:
```python
->>> import traval
+import traval
```
-The first step is generally to define an error detection algorithm. This is
+The first step is generally to define an error detection algorithm. This is
done with the `RuleSet` object:
```python
->>> ruleset = traval.RuleSet("my_first_algorithm")
+ruleset = traval.RuleSet("my_first_algorithm")
```
-Add a detection rule (using a general rule from the library contained within
+Add a detection rule (using a general rule from the library contained within
the module). In this case the rule states any value above 10.0 is suspect:
```python
->>> ruleset.add_rule("rule1", traval.rulelib.rule_ufunc_threshold , apply_to=0,
- kwargs={"ufunc": (np.greater,), "threshold": 10.0})
+ruleset.add_rule(
+ "rule1",
+ traval.rulelib.rule_ufunc_threshold,
+ apply_to=0,
+ kwargs={"ufunc": (np.greater,), "threshold": 10.0}
+)
```
Take a look at the ruleset by just typing `ruleset`:
```python
->>> ruleset
+ruleset
```
```text
@@ -71,25 +79,25 @@ RuleSet: 'my_first_algorithm'
1: rule1 0
```
-Next define a Detector object. This object is designed to store a timeseries
-and the intermediate and final results after applying an error detection
-algorithm. Initialize the Detector object with some timeseries. In this example
-we assume there is a timeseries called `raw_series`:
+Next define a Detector object. This object is designed to store a time series
+and the intermediate and final results after applying an error detection
+algorithm. Initialize the Detector object with some time series. In this example
+we assume there is a time series called `raw_series`:
```python
>>> detect = traval.Detector(raw_series)
```
-Apply our first algorithm to the timeseries.
+Apply our first algorithm to the time series.
```python
>>> detect.apply_ruleset(ruleset)
```
-By default, the result of each step in the algorithm is compared to the
-original series and stored in the `detect.comparisons` attribute. Take a
-look at the comparison between the raw data and the result of the error
-detection algorithm.
+By default, the result of each step in the algorithm is compared to the
+original series and stored in the `detect.comparisons` attribute. Take a
+look at the comparison between the raw data and the result of the error
+detection algorithm.
Since we only defined one step, step 1 represents the final result.
@@ -97,7 +105,7 @@ Since we only defined one step, step 1 represents the final result.
>>> cp = detect.comparisons[1] # result of step 1 = final result
```
-The `SeriesComparison*` objects contain methods to visualize the comparison,
+The `SeriesComparison*` objects contain methods to visualize the comparison,
or summarize the number of observations in each category:
```python
@@ -105,9 +113,9 @@ or summarize the number of observations in each category:
>>> cp.summary # series containing number of observations in each category
```
-For more detailed explanation and more complex examples, see the notebook(s)
+For more detailed explanation and more complex examples, see the notebook(s)
in the examples directory.
## Author
-- D.A. Brakenhoff, Artesia, 2020
+- D.A. Brakenhoff, Artesia, 2020
diff --git a/tests/test_001.py b/tests/test_001.py
index b83ffc9..ba2dea7 100644
--- a/tests/test_001.py
+++ b/tests/test_001.py
@@ -1,2 +1,3 @@
+# ruff: noqa: D100 D103
def test_import():
- import traval
+ pass
diff --git a/tests/test_002_ruleset.py b/tests/test_002_ruleset.py
index f95790d..0306bcc 100644
--- a/tests/test_002_ruleset.py
+++ b/tests/test_002_ruleset.py
@@ -1,19 +1,21 @@
+# ruff: noqa: D100 D103
import numpy as np
import pandas as pd
+
import traval
from traval.ruleset import RuleSet
def func1(s):
mask = s > 10
- s = pd.Series(index=s.index, data=0.0)
+ s = pd.DataFrame(index=s.index, data=0.0, columns=["correction_code"])
s.loc[mask] = np.nan
return s
def func2(s, val):
mask = s < val
- s = pd.Series(index=s.index, data=0.0)
+ s = pd.DataFrame(index=s.index, data=0.0, columns=["correction_code"])
s.loc[mask] = np.nan
return s
@@ -32,76 +34,80 @@ def func4(*args):
return result
-def test_init():
+def get_empty_ruleset():
+ return RuleSet(name="test")
+
+
+def get_filled_ruleset():
rset = traval.RuleSet(name="test")
+ rset.add_rule("gt10", func1, apply_to=0)
+ rset.add_rule("less_than_value", func2, apply_to=1, kwargs={"val": 0})
return rset
+def test_init():
+ _ = traval.RuleSet(name="test")
+
+
def test_add_rules():
- rset = test_init()
+ rset = traval.RuleSet(name="test")
rset.add_rule("gt10", func1, apply_to=0)
rset.add_rule("less_than_value", func2, apply_to=1, kwargs={"val": 0})
- return rset
def test_update_rules():
- rset = test_add_rules()
+ rset = traval.RuleSet(name="test")
+ rset.add_rule("gt10", func1, apply_to=0)
+ rset.add_rule("less_than_value", func2, apply_to=1, kwargs={"val": 0})
rset.update_rule("less_than_value", func2, apply_to=1, kwargs={"val": func3})
- return rset
def test_to_dataframe():
- rset = test_add_rules()
- rdf = rset.to_dataframe()
- return rdf
+ rset = get_filled_ruleset()
+ _ = rset.to_dataframe()
def test_applyself_static_kwargs():
series = pd.Series(index=range(10), data=range(-5, 23, 3), name="test_series")
- rset = test_add_rules()
+ rset = get_filled_ruleset()
_, _ = rset(series)
- return
def test_applyself_callable_kwargs():
series = pd.Series(index=range(10), data=range(-5, 23, 3), name="test_series")
- rset = test_update_rules()
+ rset = get_filled_ruleset()
+ rset.update_rule("less_than_value", func2, apply_to=1, kwargs={"val": func3})
_, _ = rset(series)
- return
def test_applyself_combine():
- rset = test_init()
+ rset = traval.RuleSet(name="test")
rset.add_rule("+1", lambda s: s + 1, apply_to=0)
rset.add_rule("add 0+1", func4, apply_to=(0, 1))
series = pd.Series(index=range(10), data=0.0, name="test_series")
d, _ = rset(series)
assert (d[len(d) - 1] == 1.0).all()
- return d
def test_del_rules():
- rset = test_add_rules()
+ rset = get_filled_ruleset()
rset.del_rule("gt10")
assert len(rset.rules) == 1
- return
def test_to_from_pickle():
- rset = test_add_rules()
+ rset = get_filled_ruleset()
rset.to_pickle("test.pkl")
rset = RuleSet.from_pickle("test.pkl")
import os
os.remove("test.pkl")
- return
def test_to_from_json():
- rset = test_add_rules()
+ rset = get_filled_ruleset()
rset.to_json("test.json")
rset = RuleSet.from_json("test.json")
import os
os.remove("test.json")
- return
diff --git a/tests/test_003_detector.py b/tests/test_003_detector.py
index 1b91318..e8588d1 100644
--- a/tests/test_003_detector.py
+++ b/tests/test_003_detector.py
@@ -1,22 +1,42 @@
+# ruff: noqa: D100 D103
import numpy as np
import pandas as pd
+from test_002_ruleset import get_filled_ruleset
+
import traval
-from test_002_ruleset import test_add_rules
+
+def get_detector():
+ s = pd.Series(
+ index=range(10), data=np.arange(-5, 23, 3, dtype=float), name="test_series"
+ )
+ return traval.Detector(s)
+
+
+def get_detector_with_result():
+ d = get_detector()
+ rset = get_filled_ruleset()
+ t = pd.Series(
+ index=range(10), data=np.arange(-5, 23, 3, dtype=float), name="test_series"
+ )
+ t[t < 0] = np.nan
+ t[t > 10] = np.nan
+ d = get_detector()
+ d.set_truth(t)
+ d.apply_ruleset(rset)
+ return d
def test_init_detector():
s = pd.Series(
index=range(10), data=np.arange(-5, 23, 3, dtype=float), name="test_series"
)
- d = traval.Detector(s)
- return d
+ traval.Detector(s)
def test_repr():
- d = test_init_detector()
+ d = get_detector()
d.__repr__()
- return d
def test_add_truth():
@@ -25,56 +45,53 @@ def test_add_truth():
)
t[t < 0] = np.nan
t[t > 10] = np.nan
- d = test_init_detector()
+ d = get_detector()
d.set_truth(t)
- return d
def test_apply_ruleset():
- rset = test_add_rules()
- d = test_add_truth()
+ rset = get_filled_ruleset()
+ t = pd.Series(
+ index=range(10), data=np.arange(-5, 23, 3, dtype=float), name="test_series"
+ )
+ t[t < 0] = np.nan
+ t[t > 10] = np.nan
+ d = get_detector()
+ d.set_truth(t)
d.apply_ruleset(rset)
- return d
def test_reset():
- d = test_apply_ruleset()
+ d = get_detector_with_result()
d.reset()
assert not hasattr(d, "ts_result")
- return
def test_confusion_matrix():
- d = test_apply_ruleset()
+ d = get_detector_with_result()
_ = d.confusion_matrix()
- return
def test_uniqueness():
- d = test_apply_ruleset()
+ d = get_detector_with_result()
_ = d.uniqueness()
- return
def test_plot_overview():
- d = test_apply_ruleset()
+ d = get_detector_with_result()
_ = d.plot_overview()
- return
def test_get_series():
- d = test_apply_ruleset()
+ d = get_detector_with_result()
_ = d.get_series(2, category="tp")
- return
def test_get_corrections():
- d = test_apply_ruleset()
+ d = get_detector_with_result()
_ = d.get_corrections_dataframe()
- return
def test_get_final_result():
- d = test_apply_ruleset()
+ d = get_detector_with_result()
_ = d.get_final_result()
- return
diff --git a/tests/test_004_comparison.py b/tests/test_004_comparison.py
index b7199cc..082fbae 100644
--- a/tests/test_004_comparison.py
+++ b/tests/test_004_comparison.py
@@ -1,5 +1,7 @@
+# ruff: noqa: D100 D103
import numpy as np
import pandas as pd
+
import traval
@@ -12,8 +14,7 @@ def test_series_comparison():
s2 = pd.Series(index=idx2, data=2.0)
s2.loc["2020-04-01":"2020-04-30"] = np.nan
- sc = traval.SeriesComparison(s1, s2)
- return sc
+ _ = traval.SeriesComparison(s1, s2)
def test_series_relative_comparison():
@@ -72,8 +73,6 @@ def test_series_relative_comparison():
for k, v in checkresult.items():
assert summary.loc[k] == v
- return scr
-
def test_relative_comparison_stats():
base_idx = pd.date_range("2020-01-01", periods=110, freq="D")
@@ -94,9 +93,6 @@ def test_relative_comparison_stats():
assert scr.bc.false_positive_rate + scr.bc.specificity == 1
assert scr.bc.false_negative_rate + scr.bc.sensitivity == 1
- return scr
-
-def test_confusion_matrix():
- cp = test_relative_comparison_stats()
- return cp.bc.confusion_matrix()
+ # test confusion matrix
+ scr.bc.confusion_matrix()
diff --git a/tests/test_005_plots.py b/tests/test_005_plots.py
index 1181485..b8996dc 100644
--- a/tests/test_005_plots.py
+++ b/tests/test_005_plots.py
@@ -1,5 +1,7 @@
+# ruff: noqa: D100 D103
import numpy as np
import pandas as pd
+
from traval import SeriesComparison, SeriesComparisonRelative
@@ -20,10 +22,9 @@ def test_series_comparison_plot():
sc = SeriesComparison(s1, s2)
- ax = sc.plots.plot_series_comparison(
+ sc.plots.plot_series_comparison(
mark_different=True, mark_identical=True, mark_unique=True
)
- return ax
def test_relative_series_comparison_plot():
@@ -43,8 +44,6 @@ def test_relative_series_comparison_plot():
scr = SeriesComparisonRelative(s1, s2, b)
- ax = scr.plots.plot_relative_comparison(
+ scr.plots.plot_relative_comparison(
mark_unique=True, mark_different=True, mark_identical=True, mark_introduced=True
)
-
- return ax
diff --git a/tests/test_006_rulelib.py b/tests/test_006_rulelib.py
index efd945b..d37cbeb 100644
--- a/tests/test_006_rulelib.py
+++ b/tests/test_006_rulelib.py
@@ -1,6 +1,7 @@
+# ruff: noqa: D100 D103
import numpy as np
import pandas as pd
-import pytest
+
from traval import rulelib as rlib
@@ -9,8 +10,7 @@ def test_rule_ufunc_threshold_float():
date_range = pd.date_range("2020-01-01", freq="D", periods=10)
s1 = pd.Series(index=date_range, data=np.arange(10))
c1 = rlib.rule_ufunc_threshold(s1, (np.greater_equal,), 5)
- assert c1.iloc[5:].isna().sum() == 5
- return c1
+ assert (c1["correction_code"] == 2).sum() == 5
def test_rule_ufunc_threshold_series():
@@ -20,8 +20,7 @@ def test_rule_ufunc_threshold_series():
idx = date_range[:3].to_list() + date_range[-4:-1].to_list()
thresh_series = pd.Series(index=idx, data=5.0)
c2 = rlib.rule_ufunc_threshold(s1, (np.greater_equal,), thresh_series)
- assert c2.iloc[5:].isna().sum() == 5
- return c2
+ assert (c2["correction_code"] == 2).sum() == 5
def test_rule_diff_ufunc_threshold():
@@ -30,8 +29,7 @@ def test_rule_diff_ufunc_threshold():
s1 = pd.Series(index=date_range, data=np.arange(10))
s1.loc[date_range[4]] += 1
c3 = rlib.rule_diff_ufunc_threshold(s1, (np.greater_equal,), 1.1)
- assert c3.iloc[4:5].isna().all()
- return c3
+ assert (c3["correction_code"] == 2).sum() == 1
def test_rule_other_ufunc_threshold():
@@ -40,8 +38,7 @@ def test_rule_other_ufunc_threshold():
s1 = pd.Series(index=date_range, data=np.arange(10))
val = s1.copy()
c4 = rlib.rule_other_ufunc_threshold(s1, val, (np.less,), 5)
- assert c4.iloc[:5].isna().sum() == 5
- return c4
+ assert (c4["correction_code"] == -2).sum() == 5
def test_rule_max_gradient():
@@ -50,8 +47,7 @@ def test_rule_max_gradient():
s1 = pd.Series(index=date_range, data=np.arange(10))
s1.loc[date_range[4]] += 1
c5 = rlib.rule_max_gradient(s1, max_step=1.0, max_timestep="1D")
- assert c5.iloc[4:5].isna().all()
- return c5
+ assert (c5["correction_code"] == 2).sum() == 1
def test_rule_spike_detection():
@@ -60,8 +56,7 @@ def test_rule_spike_detection():
s1 = pd.Series(index=date_range, data=np.arange(10))
s1.iloc[4] += 3
c6 = rlib.rule_spike_detection(s1, threshold=2, spike_tol=2)
- assert c6.iloc[4:5].isna().all()
- return c6
+ assert (c6["correction_code"] == 99).sum() == 1
def test_offset_detection():
@@ -70,8 +65,7 @@ def test_offset_detection():
s1 = pd.Series(index=date_range, data=np.arange(10))
s1.iloc[3:7] += 10
c7 = rlib.rule_offset_detection(s1, threshold=5, updown_diff=2.0)
- assert c7.iloc[3:7].isna().sum() == 4
- return c7
+ assert (c7["correction_code"] == 99).sum() == 4
def test_rule_outside_n_sigma():
@@ -79,8 +73,8 @@ def test_rule_outside_n_sigma():
date_range = pd.date_range("2020-01-01", freq="D", periods=10)
s1 = pd.Series(index=date_range, data=np.arange(10))
c8 = rlib.rule_outside_n_sigma(s1, n=1.0)
- assert c8.iloc[[0, 1, 8, 9]].isna().sum() == 4
- return c8
+ assert (c8["correction_code"] == -2).sum() == 2
+ assert (c8["correction_code"] == 2).sum() == 2
def test_rule_diff_outside_of_n_sigma():
@@ -88,9 +82,8 @@ def test_rule_diff_outside_of_n_sigma():
date_range = pd.date_range("2020-01-01", freq="D", periods=10)
s1 = pd.Series(index=date_range, data=np.arange(10))
s1.iloc[5:] += np.arange(5)
- c9 = rlib.rule_diff_outside_of_n_sigma(s1, 1.0)
- assert c9.iloc[6:].isna().sum() == 4
- return c9
+ c9 = rlib.rule_diff_outside_of_n_sigma(s1, 2.0)
+ assert (c9["correction_code"] == 2).sum() == 4
def test_rule_outside_bandwidth():
@@ -100,8 +93,19 @@ def test_rule_outside_bandwidth():
lb = pd.Series(index=date_range[[0, -1]], data=[1, 2])
ub = pd.Series(index=date_range[[0, -1]], data=[7, 8])
c10 = rlib.rule_outside_bandwidth(s1, lb, ub)
- assert c10.iloc[[0, 1, 8, 9]].isna().sum() == 4
- return c10
+ assert (c10["correction_code"] == -2).sum() == 2
+ assert (c10["correction_code"] == 2).sum() == 2
+
+
+def test_rule_compare_to_manual_obs():
+ # rule_shift_to_manual_obs
+ date_range = pd.date_range("2020-01-01", freq="D", periods=10)
+ s1 = pd.Series(index=date_range, data=np.arange(10))
+ h = pd.Series(index=date_range[[1, -1]], data=[2, 7])
+ c11 = rlib.rule_compare_to_manual_obs(
+ s1, h, threshold=1.0, max_dt="2D", method="linear"
+ )
+ assert (c11["correction_code"] == -2).sum() == 3
def test_rule_shift_to_manual_obs():
@@ -112,7 +116,6 @@ def test_rule_shift_to_manual_obs():
a = rlib.rule_shift_to_manual_obs(s1, h, max_dt="2D")
assert (a.iloc[1:] == s1.iloc[1:] + 1).all()
assert a.iloc[0] == s1.iloc[0]
- return a
def test_rule_combine_nan_or():
@@ -122,9 +125,18 @@ def test_rule_combine_nan_or():
s2 = s1.copy()
s1.iloc[0] = np.nan
s2.iloc[-1] = np.nan
- c11 = rlib.rule_combine_nan_or(s1, s2)
- assert c11.iloc[[0, -1]].isna().sum() == 2
- return c11
+ c11a = rlib.rule_combine_nan_or(s1, s2)
+ assert c11a.iloc[[0, -1]].isna().sum() == 2
+
+
+def test_rule_combine_corrections_or():
+ date_range = pd.date_range("2020-01-01", freq="D", periods=10)
+ s1 = pd.DataFrame(index=date_range, columns=["correction_code"], data=0)
+ s2 = s1.copy()
+ s1.iloc[0] = 99
+ s2.iloc[-1] = -2
+ c11b = rlib.rule_combine_corrections_or(s1, s2)
+ assert (c11b["correction_code"] == 99).sum() == 2
def test_rule_combine_nan_and():
@@ -134,9 +146,19 @@ def test_rule_combine_nan_and():
s2 = s1.copy()
s1.iloc[0:2] = np.nan
s2.iloc[1:3] = np.nan
- c11 = rlib.rule_combine_nan_and(s1, s2)
- assert c11.isna().sum() == 2
- return c11
+ c12a = rlib.rule_combine_nan_and(s1, s2)
+ assert c12a.isna().sum() == 2
+
+
+def test_rule_combine_corrections_and():
+ # rule_combine_nan
+ date_range = pd.date_range("2020-01-01", freq="D", periods=10)
+ s1 = pd.DataFrame(index=date_range, columns=["correction_code"], data=0)
+ s2 = s1.copy()
+ s1.iloc[0:2] = 99
+ s2.iloc[1:3] = -2
+ c12b = rlib.rule_combine_corrections_and(s1, s2)
+ assert (c12b["correction_code"] == 99).sum() == 1
def test_rule_funcdict_to_nan():
@@ -144,9 +166,8 @@ def test_rule_funcdict_to_nan():
date_range = pd.date_range("2020-01-01", freq="D", periods=10)
s1 = pd.Series(index=date_range, data=np.arange(10))
fdict = {"lt_3": lambda s: s < 3.0, "gt_7": lambda s: s > 7.0}
- c12 = rlib.rule_funcdict_to_nan(s1, fdict)
- assert c12.iloc[[0, 1, 2, -2, -1]].isna().sum() == 5
- return c12
+ c13 = rlib.rule_funcdict(s1, fdict)
+ assert (c13["correction_code"] == 99).sum() == 5
def test_rule_keep_comments():
@@ -155,16 +176,6 @@ def test_rule_keep_comments():
raw = pd.Series(index=date_range, data=np.arange(10), dtype=float)
comments = ["keep"] * 4 + [""] * 3 + ["discard"] * 3
comment_series = pd.Series(index=raw.index, data=comments)
- val = raw.copy()
- val += 1.0
- val.loc[comment_series == "keep"] = np.nan
- f = rlib.rule_keep_comments(raw, ["keep"], comment_series, val)
- assert (f.loc[comment_series == "keep"] == 0).all()
- assert (f.loc[comment_series != "keep"] == 1).all()
-
-
-@pytest.mark.skip
-def test_rule_pastas_outside_pi():
- # rule_pastas_outside_pi
- # skip for now
- pass
+ c14 = rlib.rule_keep_comments(raw, ["keep"], comment_series)
+ assert (c14["correction_code"] == 99).sum() == 4
+ assert (c14["comparison_values"] == "keep").sum() == 4
diff --git a/tests/test_007_binaryclassifier.py b/tests/test_007_binaryclassifier.py
index b8467c0..b548b3f 100644
--- a/tests/test_007_binaryclassifier.py
+++ b/tests/test_007_binaryclassifier.py
@@ -1,14 +1,15 @@
+# ruff: noqa: D100 D103
from pandas import Series
+
from traval import BinaryClassifier
-def test_bc():
- bc = BinaryClassifier(9, 1, 9, 1)
- return bc
+def get_bc():
+ return BinaryClassifier(9, 1, 9, 1)
def test_all_stats():
- bc = test_bc()
+ bc = get_bc()
stats = bc.get_all_statistics()
answer = {
"tp": 9.0,
@@ -31,14 +32,12 @@ def test_all_stats():
"mcc": 0.8,
}
assert (stats == Series(answer)).all()
- return
def test_add():
- bc = test_bc()
+ bc = get_bc()
bcsum = bc + bc
assert bcsum.tp == 18
assert bcsum.fp == 2
assert bcsum.tn == 18
assert bcsum.fn == 2
- return
diff --git a/tests/test_008_travalparameters.py b/tests/test_008_travalparameters.py
index 85a2e8f..4910959 100644
--- a/tests/test_008_travalparameters.py
+++ b/tests/test_008_travalparameters.py
@@ -1,6 +1,8 @@
+# ruff: noqa: D100 D103
import os
import numpy as np
+
from traval import RuleSet, TravalParameters, rulelib
@@ -51,18 +53,17 @@ def get_ruleset2():
def test_tp_from_ruleset():
rset = get_ruleset1()
- tp = TravalParameters.from_ruleset(rset)
- return tp
+ TravalParameters.from_ruleset(rset)
def test_tp_from_ruleset_w_locations():
rset = get_ruleset1()
- tp = TravalParameters.from_ruleset(rset, locations=["loc1"])
- return tp
+ TravalParameters.from_ruleset(rset, locations=["loc1"])
def test_tp_get_parameters_defaults():
- tp = test_tp_from_ruleset()
+ rset = get_ruleset1()
+ tp = TravalParameters.from_ruleset(rset)
_ = tp.get_parameters() # return all defaults
_ = tp.get_parameters(rulename="gt10") # return all params for rule
p3 = tp.get_parameters(rulename="gt10", parameter="threshold") # value
@@ -76,11 +77,11 @@ def test_tp_get_parameters_defaults():
tp.get_parameters(rulename="gt10", parameter="non-existent-param")
except KeyError:
pass
- return
def test_tp_get_parameters_location_specific():
- tp = test_tp_from_ruleset_w_locations()
+ rset = get_ruleset1()
+ tp = TravalParameters.from_ruleset(rset, locations=["loc1"])
_ = tp.get_parameters() # return all defaults
_ = tp.get_parameters(location="loc1") # return all for location
# return loc params for rule
@@ -100,7 +101,6 @@ def test_tp_get_parameters_location_specific():
)
except KeyError:
pass
- return
def test_tp_to_from_csv():
@@ -112,7 +112,6 @@ def test_tp_to_from_csv():
mask = tp.defaults["value"].apply(lambda s: tp._test_callable(s))
assert (tp.defaults.loc[~mask].index == tp2.defaults.index).all()
assert (tp.defaults.loc[~mask, "value"] == tp2.defaults.loc[~mask, "value"]).all()
- return
def test_tp_to_from_json():
@@ -124,7 +123,6 @@ def test_tp_to_from_json():
mask = tp.defaults["value"].apply(lambda s: tp._test_callable(s))
assert (tp.defaults.loc[~mask].index == tp2.defaults.index).all()
assert (tp.defaults.loc[~mask, "value"] == tp2.defaults.loc[~mask, "value"]).all()
- return
def test_tp_to_from_pickle():
@@ -135,4 +133,3 @@ def test_tp_to_from_pickle():
os.remove("test.pkl")
assert (tp.defaults.index == tp2.defaults.index).all()
assert (tp.defaults["value"] == tp2.defaults["value"]).all()
- return
diff --git a/traval/binary_classifier.py b/traval/binary_classifier.py
index bb653e7..563b3d8 100644
--- a/traval/binary_classifier.py
+++ b/traval/binary_classifier.py
@@ -53,7 +53,7 @@ def from_series_comparison_relative(cls, comparison):
Parameters
----------
comparison : traval.SeriesComparisonRelative
- object comparing two timeseries with base timeseries
+ object comparing two time series with base time series
Returns
-------
@@ -89,7 +89,7 @@ def from_confusion_matrix(cls, cmat):
BinaryClassifier
BinaryClassifier object based on values in confusion matrix.
- See also
+ See Also
--------
BinaryClassifier.confusion_matrix : for explanation (of abbreviations)
"""
@@ -154,7 +154,6 @@ def confusion_matrix(self, as_array=False):
data : pd.DataFrame or np.array
confusion matrix
"""
-
# create array with data
data = np.zeros((2, 2), dtype=int)
# true positives = errors correctly identified
@@ -192,7 +191,7 @@ def matthews_correlation_coefficient(self):
phi : float
the Matthews correlation coefficient
- See also
+ See Also
--------
mcc : convenience method for calculating MCC
"""
@@ -218,7 +217,7 @@ def mcc(self):
phi : float
the Matthews correlation coefficient
- See also
+ See Also
--------
matthews_correlation_coefficient : more information about the statistic
"""
@@ -268,7 +267,7 @@ def specificity(self):
def true_positive_rate(self):
"""True Positive Rate. Synonym for sensitivity.
- See sensitiviy for description.
+ See sensitivity for description.
"""
return self.sensitivity
@@ -349,7 +348,7 @@ def accuracy(self):
@property
def prevalence(self):
- """Prevalance of true errors in total population.
+ """Prevalence of true errors in total population.
Prevalence = (TP + FN) / (TP + FP + FN + TN)
@@ -434,7 +433,6 @@ def get_all_statistics(self, use_abbreviations=True):
s : pandas.Series
series containing all statistics
"""
-
sdict = {}
for k, v in self.stats_abbreviations.items():
if use_abbreviations:
diff --git a/traval/detector.py b/traval/detector.py
index 8762bf6..005b9e7 100755
--- a/traval/detector.py
+++ b/traval/detector.py
@@ -5,23 +5,29 @@
import pandas as pd
from .ts_comparison import SeriesComparison, SeriesComparisonRelative
-from .ts_utils import unique_nans_in_series
+from .ts_utils import (
+ corrections_as_float,
+ corrections_as_nan,
+ mask_corrections_modified_value,
+ mask_corrections_no_comparison_value,
+ unique_nans_in_series,
+)
class Detector:
- """Detector object for applying error detection algorithms to timeseries.
+ """Detector object for applying error detection algorithms to time series.
- The Detector is used to apply error detection algorithms to a timeseries
+ The Detector is used to apply error detection algorithms to a time series
and optionally contains a 'truth' series, to which the error detection
result can be compared. An example of a 'truth' series is a manually
- validated timeseries. Custom error detection algorithms can be defined
+ validated time series. Custom error detection algorithms can be defined
using the RuleSet object.
Parameters
----------
series : pd.Series or pd.DataFrame
- timeseries to check
+ time series to check
truth : pd.Series or pd.DataFrame, optional
series that represents the 'truth', i.e. a benchmark to which
the error detection result can be compared, by default None
@@ -29,15 +35,14 @@ class Detector:
Examples
--------
-
- Given a timeseries 'series' and some ruleset 'rset':
+ Given a time series 'series' and some ruleset 'rset':
>>> d = Detector(series)
>>> d.apply_ruleset(rset)
>>> d.plot_overview()
- See also
+ See Also
--------
traval.RuleSet : object for defining detection algorithms
"""
@@ -48,7 +53,7 @@ def __init__(self, series, truth=None):
Parameters
----------
series : pd.Series or pd.DataFrame
- timeseries to check
+ time series to check
truth : pd.Series or pd.DataFrame, optional
series that represents the 'truth', i.e. a benchmark to which
the error detection result can be compared, by default None
@@ -77,7 +82,7 @@ def _validate_input_series(series):
Parameters
----------
series : object
- timeseries to check, must be pd.Series or pd.DataFrame. Datatype
+ time series to check, must be pd.Series or pd.DataFrame. Datatype
of series or first column of DataFrame must be float.
Raises
@@ -85,7 +90,6 @@ def _validate_input_series(series):
TypeError
if series or dtype of series does not comply
"""
-
# check pd.Series or pd.DataFrame
if isinstance(series, pd.Series):
dtype = series.dtypes
@@ -123,7 +127,7 @@ def apply_ruleset(self, ruleset, compare=True):
for convenience.
- See also
+ See Also
--------
traval.RuleSet : object for defining detection algorithms
"""
@@ -238,8 +242,8 @@ def confusion_matrix(self, steps=None, truth=None):
def uniqueness(self, truth=None):
"""Calculate unique contribution per rule to stats.
- Note: the calculated statistics per rule contain an undercount,
- i.e. when multiple rules mark the same observatin as suspect it is
+ Note: the calculated statistics per rule are under counted,
+ i.e. when multiple rules mark the same observation as suspect it is
not contained in this result.
Parameters
@@ -388,7 +392,7 @@ def get_comment_series(self, steps=None):
rulenames = [self.ruleset.get_step_name(i) for i in steps]
# get corrections
- corr = self.get_corrections_dataframe()
+ corr = self.get_corrections_dataframe(as_correction_codes=True)
if corr.empty:
corr = pd.DataFrame(index=self.series.index, columns=rulenames, data=0.0)
@@ -397,8 +401,8 @@ def get_comment_series(self, steps=None):
comments = []
for col in corr.columns:
- s = corr[col].copy()
- s = s.replace(0.0, "").replace(np.nan, col)
+ s = pd.Series(index=corr.index, data=col)
+ s.loc[corr[col] == 0] = ""
comments.append(s)
comments = pd.concat(comments, axis=1).apply(
@@ -422,12 +426,12 @@ def get_results_dataframe(self):
return df
def get_final_result(self):
- """Get final timeseries with flagged values set to NaN.
+ """Get final time series with flagged values set to NaN.
Returns
-------
series : pandas.Series
- Timeseries produced by final step in RuleSet with flagged
+ time series produced by final step in RuleSet with flagged
values set to NaN.
"""
key = len(self.results.keys()) - 1
@@ -435,29 +439,54 @@ def get_final_result(self):
s.name = self.name
return s
- def get_corrections_dataframe(self):
+ def get_corrections_dataframe(self, as_correction_codes=False, as_addable_df=False):
"""Get DataFrame containing corrections.
+ Parameters
+ ----------
+ as_correction_codes : bool, optional
+ return DataFrame with correction codes, by default False
+ as_addable_df : bool, optional
+ return DataFrame with corrections dataframe that you can add to the original
+ time series to obtain the final result. Corrections are NaN when errors are
+ detected, and nonzero where observations are shifted, and zero everywhere
+ else.
+
Returns
-------
df : pandas.DataFrame
- DataFrame containing corrections. NaN means value is flagged
- as suspicious, 0.0 means no correction.
+ DataFrame containing corrections.
"""
+ if as_correction_codes and as_addable_df:
+ raise ValueError(
+ "Only one of 'as_correction_codes' and 'as_addable_df' can be True!"
+ )
clist = []
for s in self.corrections.values():
if isinstance(s, np.ndarray):
- s = pd.Series(dtype=float)
- clist.append(s.fillna(-9999))
-
- # corrections are nan, 0.0 means nothing is changed
- df = (
- pd.concat(clist, axis=1)
- .isna()
- .astype(float)
- .replace(0.0, np.nan)
- .replace(1.0, 0.0)
- )
+ if as_addable_df:
+ s = pd.Series()
+ else:
+ s = pd.Series(name="correction_code")
+ elif isinstance(s, pd.DataFrame) and "correction_code" in s.columns:
+ if as_addable_df:
+ s = corrections_as_nan(s) + corrections_as_float(s)
+ else:
+ s = s["correction_code"]
+ elif isinstance(s, pd.Series):
+ if as_correction_codes:
+ s = mask_corrections_no_comparison_value(s, s.isna()).add(
+ mask_corrections_modified_value(s, s, (s.notnull() & s != 0.0)),
+ fill_value=0,
+ )
+ s = s["correction_code"]
+
+ clist.append(s)
+
+ # corrections, 0 means nothing is changed, nan means value is missing
+ df = pd.concat(clist, axis=1)
+ if as_correction_codes:
+ df = df.infer_objects(copy=False).fillna(0).astype(int)
df.columns = list(self.ruleset.rules.keys())
return df
@@ -506,7 +535,7 @@ def get_corrections_comparison(self, truth=None):
return df
def plot_overview(self, mark_suspects=True, **kwargs):
- """Plot timeseries with flagged values per applied rule.
+ """Plot time series with flagged values per applied rule.
Parameters
----------
@@ -518,8 +547,6 @@ def plot_overview(self, mark_suspects=True, **kwargs):
ax : list of matplotlib.pyplot.Axes
axes objects
"""
- resultsdf = self.get_results_dataframe()
-
if "figsize" in kwargs:
figsize = kwargs.pop("figsize")
else:
@@ -534,16 +561,17 @@ def plot_overview(self, mark_suspects=True, **kwargs):
**kwargs,
)
- for iax, icol in zip(axes, resultsdf):
- iax.plot(resultsdf.index, resultsdf[icol], label=icol)
+ for icol, iax in enumerate(axes):
+ iresult = self.results[icol]
+ iax.plot(iresult.index, iresult, label=self.ruleset.get_step_name(icol))
if mark_suspects:
- if icol != resultsdf.columns[0]:
- corr = self.corrections[resultsdf.columns.get_loc(icol)]
- if isinstance(corr, pd.Series):
+ if icol != 0:
+ icorr = self.corrections[icol]
+ if isinstance(icorr, pd.DataFrame):
iax.plot(
- corr.index,
- resultsdf.loc[corr.index].iloc[:, 0],
+ icorr.index,
+ self.results[0].loc[icorr.index],
marker="x",
c="C3",
ls="none",
diff --git a/traval/params.py b/traval/params.py
index d61e2a3..90a2749 100644
--- a/traval/params.py
+++ b/traval/params.py
@@ -409,7 +409,7 @@ def _combine_parameter_dfs(self):
@staticmethod
def _test_callable(f):
- """Method to test whether parameter value is a callable.
+ """Test whether parameter value is a callable.
Also returns True if callable is stored in a tuple.
diff --git a/traval/plots.py b/traval/plots.py
index 4d761fd..7edf91f 100755
--- a/traval/plots.py
+++ b/traval/plots.py
@@ -6,7 +6,7 @@
class ComparisonPlots:
- """Mix-in class for plots for comparing timeseries."""
+ """Mix-in class for plots for comparing time series."""
color_dict = {
"only_in_s1": {"color": "orange"},
@@ -60,16 +60,16 @@ def reset_color_dict(self):
def plot_series_comparison(
self, mark_unique=True, mark_different=True, mark_identical=True, ax=None
):
- """Plot comparison between two timeseries.
+ """Plot comparison between two time series.
Parameters
----------
mark_unique : bool, optional
mark unique values with colored X's, by default True
mark_different : bool, optional
- highlight where timeseries differ with red, by default True
+ highlight where time series differ with red, by default True
mark_identical : bool, optional
- highlight where timeseries are identical with green,
+ highlight where time series are identical with green,
by default True
ax : axis, optional
axis object to plot on, by default None
@@ -79,7 +79,6 @@ def plot_series_comparison(
ax : axis
axis object
"""
-
if ax is None:
fig, ax = plt.subplots(1, 1, figsize=(12, 5))
else:
@@ -174,7 +173,7 @@ def plot_relative_comparison(
mark_introduced=False,
ax=None,
):
- """Plot comparison between two timeseries relative to base timeseries.
+ """Plot comparison between two time series relative to base time series.
Parameters
----------
@@ -185,7 +184,7 @@ def plot_relative_comparison(
mark_identical : bool, optional
highlight where series are identical with green, by default True
mark_introduced : bool, optional
- mark observations that are not in the base timeseries with X's,
+ mark observations that are not in the base time series with X's,
by default False
ax : axis, optional
axis to plot on, by default None
@@ -195,7 +194,6 @@ def plot_relative_comparison(
ax : axis
axis handle
"""
-
ax = self.plot_series_comparison(
mark_unique=mark_unique,
mark_different=mark_different,
@@ -479,7 +477,6 @@ def det_plot(fpr, fnr, labels, ax=None, **kwargs):
ax : matplotlib.pyplot.Axes
axes handle
"""
-
if not isinstance(fpr, list):
fpr = [fpr]
if not isinstance(fnr, list):
diff --git a/traval/rulelib.py b/traval/rulelib.py
index 04024cb..6e12c9d 100755
--- a/traval/rulelib.py
+++ b/traval/rulelib.py
@@ -5,9 +5,16 @@
import pandas as pd
from .ts_utils import (
+ CorrectionCode,
diff_with_gap_awareness,
+ get_empty_corrections_df,
interpolate_series_to_new_index,
- mask_corrections_as_nan,
+ mask_corrections_above_below,
+ mask_corrections_above_threshold,
+ mask_corrections_below_threshold,
+ mask_corrections_equal_value,
+ mask_corrections_no_comparison_value,
+ mask_corrections_not_equal_value,
resample_short_series_to_long_series,
smooth_lower_bound,
smooth_upper_bound,
@@ -15,7 +22,18 @@
)
-def rule_funcdict_to_nan(series, funcdict):
+def _ufunc_corrections(series, ufunc, threshold, mask):
+ if "greater" in ufunc.__name__:
+ return mask_corrections_above_threshold(series, threshold, mask)
+ elif "less" in ufunc.__name__:
+ return mask_corrections_below_threshold(series, threshold, mask)
+ elif ufunc.__name__ == "equal":
+ return mask_corrections_equal_value(series, threshold, mask)
+ else:
+ return mask_corrections_not_equal_value(series, threshold, mask)
+
+
+def rule_funcdict(series, funcdict):
"""Detection rule, flag values with dictionary of functions.
Use dictionary of functions to identify suspect values and set
@@ -24,17 +42,17 @@ def rule_funcdict_to_nan(series, funcdict):
Parameters
----------
series : pd.Series
- timeseries in which suspect values are identified
+ time series in which suspect values are identified
funcdict : dict
dictionary with function names as keys and functions/methods as
- values. Each function is applied to each value in the timeseries
+ values. Each function is applied to each value in the time series
using `series.apply(func)`. Suspect values are those where
the function evaluates to True.
Returns
-------
corrections: pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Suspect values (according to the provided functions)
are set to np.nan.
"""
@@ -43,19 +61,19 @@ def rule_funcdict_to_nan(series, funcdict):
mask = series.apply(func)
else:
mask = or_(mask, series.apply(func))
- return mask_corrections_as_nan(series, mask)
+ return mask_corrections_no_comparison_value(series, mask)
def rule_max_gradient(series, max_step=0.5, max_timestep="1D"):
"""Detection rule, flag values when maximum gradient exceeded.
- Set values tot NaN when maximum gradient between two
- observations is exceeded.
+ Flag values when maximum gradient between two observations is exceeded.
+ Use negative max_step to flag values with negative gradient.
Parameters
----------
series : pd.Series
- timeseries in which suspect values are identified
+ time series in which suspect values are identified
max_step : float, optional
max jump between two observations within given timestep,
by default 0.5
@@ -66,15 +84,19 @@ def rule_max_gradient(series, max_step=0.5, max_timestep="1D"):
Returns
-------
corrections: pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Suspect values are set to np.nan.
"""
- conversion = pd.Timedelta(max_timestep) / pd.Timedelta("1S")
+ conversion = pd.Timedelta(max_timestep) / pd.Timedelta("1s")
grad = (
series.diff() / series.index.to_series().diff().dt.total_seconds() * conversion
)
- mask = grad.abs() > max_step
- return mask_corrections_as_nan(series, mask)
+ if max_step > 0.0:
+ mask = grad > max_step
+ return mask_corrections_above_threshold(series, max_step, mask)
+ else:
+ mask = grad < -max_step
+ return mask_corrections_below_threshold(series, max_step, mask)
def rule_hardmax(series, threshold, offset=0.0):
@@ -100,13 +122,13 @@ def rule_ufunc_threshold(series, ufunc, threshold, offset=0.0):
Parameters
----------
series : pd.Series
- timeseries in which suspect values are identified
+ time series in which suspect values are identified
ufunc : tuple
tuple containing ufunc (i.e. (numpy.greater_equal,) ). The function
must be callable according to `ufunc(series, threshold)`. The function
is passed as a tuple to bypass RuleSet logic.
threshold : float or pd.Series
- value or timeseries to compare series with
+ value or time series to compare series with
offset : float, optional
value that is added to the threshold, e.g. if some extra tolerance is
allowable. Default value is 0.0.
@@ -114,16 +136,18 @@ def rule_ufunc_threshold(series, ufunc, threshold, offset=0.0):
Returns
-------
corrections: pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Suspect values are set to np.nan.
"""
ufunc = ufunc[0]
if isinstance(threshold, pd.Series):
full_threshold_series = resample_short_series_to_long_series(threshold, series)
+ threshold = full_threshold_series.add(offset)
mask = ufunc(series, full_threshold_series.add(offset))
else:
- mask = ufunc(series, threshold + offset)
- return mask_corrections_as_nan(series, mask)
+ threshold = threshold + offset
+ mask = ufunc(series, threshold)
+ return _ufunc_corrections(series, ufunc, threshold, mask)
def rule_diff_ufunc_threshold(series, ufunc, threshold, max_gap="7D"):
@@ -142,13 +166,13 @@ def rule_diff_ufunc_threshold(series, ufunc, threshold, max_gap="7D"):
Parameters
----------
series : pd.Series
- timeseries in which suspect values are identified
+ time series in which suspect values are identified
ufunc : tuple
tuple containing ufunc (i.e. (numpy.greater_equal,) ). The function
must be callable according to `ufunc(series, threshold)`. The function
is passed as a tuple to bypass RuleSet logic.
threshold : float
- value to compare diff of timeseries to
+ value to compare diff of time series to
max_gap : str, optional
only considers observations within this maximum gap
between measurements to calculate diff, by default "7D".
@@ -156,21 +180,20 @@ def rule_diff_ufunc_threshold(series, ufunc, threshold, max_gap="7D"):
Returns
-------
corrections: pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Suspect values are set to np.nan.
"""
ufunc = ufunc[0]
# identify gaps and set diff value after gap to nan
diff = diff_with_gap_awareness(series, max_gap=max_gap)
- mask = ufunc(diff.abs(), threshold)
- return mask_corrections_as_nan(series, mask)
+ mask = ufunc(diff, threshold)
+ return _ufunc_corrections(series, ufunc, threshold, mask)
def rule_other_ufunc_threshold(series, other, ufunc, threshold):
"""Detection rule, flag values based on other series and threshold.
- Set values to Nan based on comparison of another timeseries with a
- threshold value.
+ Correct values based on comparison of another time series with a threshold value.
The argument ufunc is a tuple containing an operator function (i.e. '>',
'<', '>=', '<='). These are passed using their named equivalents, e.g. in
@@ -181,44 +204,45 @@ def rule_other_ufunc_threshold(series, other, ufunc, threshold):
Parameters
----------
series : pd.Series
- timeseries in which suspect values are identified, only used
+ time series in which suspect values are identified, only used
to test if index of other overlaps
other : pd.Series
- other timeseries based on which suspect values are identified
+ other time series based on which suspect values are identified
ufunc : tuple
tuple containing ufunc (i.e. (numpy.greater_equal,) ). The function
must be callable according to `ufunc(series, threshold)`. The function
is passed as a tuple to bypass RuleSet logic.
threshold : float
- value to compare timeseries to
+ value to compare time series to
Returns
-------
corrections: pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Suspect values are set to np.nan.
"""
ufunc = ufunc[0]
mask = ufunc(other, threshold)
shared_idx = series.index.intersection(other.loc[mask].index)
- return mask_corrections_as_nan(series, shared_idx)
+ other_values = other.reindex(series.index).loc[series.index]
+ return _ufunc_corrections(other_values, ufunc, threshold, shared_idx)
def rule_spike_detection(series, threshold=0.15, spike_tol=0.15, max_gap="7D"):
- """Detection rule, identify spikes in timeseries and set to NaN.
+ """Detection rule, identify spikes in time series and set to NaN.
- Spikes are sudden jumps in the value of a timeseries that last 1 timestep.
+ Spikes are sudden jumps in the value of a time series that last 1 timestep.
They can be both negative or positive.
Parameters
----------
series : pd.Series
- timeseries in which suspect values are identified
+ time series in which suspect values are identified
threshold : float, optional
the minimum size of the jump to qualify as a spike, by default 0.15
spike_tol : float, optional
- offset between value of timeseries before spike and after spike,
- by default 0.15. After a spike, the value of the timeseries is usually
+ offset between value of time series before spike and after spike,
+ by default 0.15. After a spike, the value of the time series is usually
close to but not identical to the value that preceded the spike. Use
this parameter to control how close the value has to be.
max_gap : str, optional
@@ -228,14 +252,14 @@ def rule_spike_detection(series, threshold=0.15, spike_tol=0.15, max_gap="7D"):
Returns
-------
corrections: pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Suspect values are set to np.nan.
"""
upspikes, downspikes = spike_finder(
series, threshold=threshold, spike_tol=spike_tol, max_gap=max_gap
)
mask = upspikes.index.union(downspikes.index)
- return mask_corrections_as_nan(series, mask)
+ return mask_corrections_no_comparison_value(series, mask)
def rule_offset_detection(
@@ -257,7 +281,7 @@ def rule_offset_detection(
Parameters
----------
series : pd.Series
- timeseries in which to look for offset errors
+ time series in which to look for offset errors
threshold : float, optional
minimum jump to consider as offset error, by default 0.35
updown_diff : float, optional
@@ -278,7 +302,7 @@ def rule_offset_detection(
Returns
-------
corrections: pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Suspect values are set to np.nan.
"""
verbose = False
@@ -356,11 +380,19 @@ def rule_offset_detection(
]
periods = [jump_df.index[0], series.index[-1]]
- corrections = pd.Series(
- index=series.index, data=np.zeros(series.index.size), fastpath=True
+ # manually compute corrections dataframe
+ corrections = pd.DataFrame(
+ index=series.index,
+ data={
+ "correction_code": np.zeros(series.size, dtype=float),
+ "series_values": np.full(series.size, np.nan),
+ "comparison_values": np.full(series.size, np.nan),
+ },
)
for j in range(0, len(periods), 2):
- corrections.loc[periods[j] : periods[j + 1] - pd.Timedelta(seconds=30)] = np.nan
+ corrections.loc[
+ periods[j] : periods[j + 1] - pd.Timedelta(seconds=30), "correction_code"
+ ] = 99
if return_df:
return corrections, df, jump_df
else:
@@ -368,27 +400,34 @@ def rule_offset_detection(
def rule_outside_n_sigma(series, n=2.0):
- """Detection rule, set values outside of n * standard deviation to NaN
+ """Detection rule, set values outside of n * standard deviation to NaN.
Parameters
----------
series : pd.Series
- timeseries in which suspect values are identified
+ time series in which suspect values are identified
n : float, optional
number of standard deviations to use, by default 2
Returns
-------
corrections: pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Suspect values are set to np.nan.
"""
-
- mask = (series > series.mean() + n * series.std()) | (
- series < series.mean() - n * series.std()
+ threshold_above = series.mean() + n * series.std()
+ mask_above = series > threshold_above
+ threshold_below = series.mean() - n * series.std()
+ mask_below = series < threshold_below
+
+ return mask_corrections_above_below(
+ series,
+ mask_above,
+ threshold_above,
+ mask_below,
+ threshold_below,
)
- return mask_corrections_as_nan(series, mask)
def rule_diff_outside_of_n_sigma(series, n=2.0, max_gap="7D"):
@@ -400,7 +439,7 @@ def rule_diff_outside_of_n_sigma(series, n=2.0, max_gap="7D"):
Parameters
----------
series : pd.Series
- timeseries in which suspect values are identified
+ time series in which suspect values are identified
n : float, optional
number of standard deviations to use, by default 2
max_gap : str, optional
@@ -410,15 +449,14 @@ def rule_diff_outside_of_n_sigma(series, n=2.0, max_gap="7D"):
Returns
-------
corrections: pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Suspect values are set to np.nan.
"""
-
# identify gaps and set diff value after gap to nan
diff = diff_with_gap_awareness(series, max_gap=max_gap)
nsigma = n * diff.std()
- mask = (diff.abs() - diff.mean()) > nsigma
- return mask_corrections_as_nan(series, mask)
+ mask = diff.abs() > nsigma
+ return mask_corrections_above_threshold(diff, nsigma, mask)
def rule_outside_bandwidth(series, lowerbound, upperbound):
@@ -427,18 +465,18 @@ def rule_outside_bandwidth(series, lowerbound, upperbound):
Parameters
----------
series : pd.Series
- timeseries in which suspect values are identified
+ time series in which suspect values are identified
lowerbound : pd.Series
- timeseries containing the lower bound, if bound values are less
+ time series containing the lower bound, if bound values are less
frequent than series, bound is interpolated to series.index
upperbound : pd.Series
- timeseries containing the upper bound, if bound values are less
+ time series containing the upper bound, if bound values are less
frequent than series, bound is interpolated to series.index
Returns
-------
corrections : pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Suspect values are set to np.nan.
"""
if series.index.symmetric_difference(lowerbound.index).size > 0:
@@ -446,8 +484,11 @@ def rule_outside_bandwidth(series, lowerbound, upperbound):
if series.index.symmetric_difference(upperbound.index).size > 0:
upperbound = interpolate_series_to_new_index(upperbound, series.index)
- mask = (series > upperbound) | (series < lowerbound)
- return mask_corrections_as_nan(series, mask)
+ mask_above = series > upperbound
+ mask_below = series < lowerbound
+ return mask_corrections_above_below(
+ series, mask_above, upperbound, mask_below, lowerbound
+ )
def rule_pastas_outside_pi(
@@ -463,15 +504,15 @@ def rule_pastas_outside_pi(
):
"""Detection rule, flag values based on pastas model prediction interval.
- Flag suspect outside prediction interval calculated by pastas timeseries
+ Flag suspect outside prediction interval calculated by pastas time series
model. Uses a pastas.Model and a confidence interval as input.
Parameters
----------
series : pd.Series
- timeseries to identify suspect observations in
+ time series to identify suspect observations in
ml : pastas.Model
- timeseries model for series
+ time series model for series
ci : float, optional
confidence interval for calculating bandwidth, by default 0.95.
Higher confidence interval means that bandwidth is wider and more
@@ -495,34 +536,30 @@ def rule_pastas_outside_pi(
Returns
-------
corrections : pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Suspect values are set to np.nan.
"""
# no model
if ml is None:
if verbose:
print("Warning: No Pastas model found!")
- corrections = mask_corrections_as_nan(
- series, pd.Series(index=series.index, data=False)
- )
- corrections.name = "sim"
- # no fit
- elif ml.fit is None:
+ corrections = get_empty_corrections_df(series)
+ corrections.columns = ["sim", "series_values", "comparison_values"]
+ # no solver
+ elif ml.solver is None:
if verbose:
- print("Warning: Pastas model fit attribute is None!")
- corrections = mask_corrections_as_nan(
- series, pd.Series(index=series.index, data=False)
- )
- corrections.name = "sim"
+ print("Warning: Model has no attribute solver!")
+ corrections = get_empty_corrections_df(series)
+ corrections.columns = ["sim", "series_values", "comparison_values"]
# calculate pi
else:
- if tmin is not None:
- ml.settings["tmin"] = tmin
- if tmax is not None:
- ml.settings["tmax"] = tmax
+ if tmin is None:
+ tmin = series.first_valid_index()
+ if tmax is None:
+ tmax = series.last_valid_index()
# calculate prediction interval
- pi = ml.fit.prediction_interval(alpha=(1 - ci))
+ pi = ml.solver.prediction_interval(alpha=(1 - ci), tmin=tmin, tmax=tmax)
# prediction interval empty
if pi.empty:
@@ -531,10 +568,8 @@ def rule_pastas_outside_pi(
"Warning: calculated prediction interval with "
"Pastas model is empty!"
)
- corrections = mask_corrections_as_nan(
- series, pd.Series(index=series.index, data=False)
- )
- corrections.name = "sim"
+ corrections = get_empty_corrections_df(series)
+ corrections.columns = ["sim", "series_values", "comparison_values"]
else:
lower = pi.iloc[:, 0]
upper = pi.iloc[:, 1]
@@ -553,9 +588,15 @@ def rule_pastas_outside_pi(
lower = lower - min_ci / 2.0
corrections = rule_outside_bandwidth(series, lower, upper)
- corrections.name = "sim (r^2={0:.3f})".format(ml.stats.rsq())
+ corrections.columns = [
+ "correction_code",
+ "series_values",
+ "comparison_values",
+ ]
+ corrections.index.name = f"sim (r^2={ml.stats.rsq():.3f})"
if savedir:
+ savedir.mkdir(exist_ok=True)
pi.to_pickle(os.path.join(savedir, f"pi_{ml.name}.pkl"))
return corrections
@@ -567,80 +608,117 @@ def rule_pastas_percentile_pi(
if ml is None:
if verbose:
print("Warning: No Pastas model found!")
- corrections = mask_corrections_as_nan(
- series, pd.Series(index=series.index, data=False)
- )
- corrections.name = "sim"
- # no fit
- elif ml.fit is None:
+ corrections = get_empty_corrections_df(series)
+ corrections.columns = ["sim", "series_values", "comparison_values"]
+ # no solver
+ elif ml.solver is None:
if verbose:
- print("Warning: Pastas model fit attribute is None!")
- corrections = mask_corrections_as_nan(
- series, pd.Series(index=series.index, data=False)
- )
- corrections.name = "sim"
+ print("Warning: Model has no solver attribute!")
+ corrections = get_empty_corrections_df(series)
+ corrections.columns = ["sim", "series_values", "comparison_values"]
# calculate realizations
# TODO: work in progress
-def rule_keep_comments(series, keep_comments, comment_series, other_series):
- """Filter rule, modify timeseries to keep data with certain comments.
+def rule_keep_comments(series, keep_comments, comment_series):
+ """Filter rule, modify time series to keep data with certain comments.
- This rule was invented to extract timeseries only containing certain
+ This rule was invented to extract time series only containing certain
types of errors, based on labeled data. For example, to get only erroneous
observations caused by sensors above the groundwater level:
- - series: the raw timeseries
+ - series: the raw time series
- keep_comments: list of comments to keep, e.g. ['dry sensor']
- - comment_series: timeseries containing the comments for erroneous obs
- - other_series: the validated timeseries where the commented observations
- were removed (set to NaN).
+ - comment_series: time series containing the comments for erroneous obs
Parameters
----------
series : pd.Series
- timeseries to filter
+ time series to filter
keep_comments : list of str
list of comments to keep
comment_series : pd.Series
- timeseries containing comments, should have same index as series
- other_series : pd.Series
- timeseries containing corrected/adjusted values corresponding
- to the commmented entries.
+ time series containing comments, should have same index as series
Returns
-------
- corrections : pd.Series
- timeseries containing NaN values where comment is in keep_comments
+ corrections : pd.DataFrame
+ dataframe containing correction code 99 where comment is in keep_comments
and 0 otherwise.
"""
- new_series = series.copy()
- for c in keep_comments:
- mask = comment_series.str.startswith(c)
- new_series.where(mask, other=other_series, inplace=True)
+ c = get_empty_corrections_df(series)
+ c["comparison_values"] = ""
+ for comment in keep_comments:
+ mask = comment_series.str.contains(comment)
+ c.loc[mask, "correction_code"] = CorrectionCode.UNKNOWN_COMPARISON_VALUE
+ c.loc[mask, "series_values"] = series.loc[mask]
+ c.loc[mask, "comparison_values"] = comment
- corrections = new_series - series
- corrections.name = "_".join(keep_comments)
+ return c
- return corrections
+
+def rule_compare_to_manual_obs(
+ series, manual_obs, threshold=0.05, method="linear", max_dt="1D"
+):
+ # check if time between manual obs and sensor obs
+ # are further apart than max_dt:
+ nearest = series.index.get_indexer(manual_obs.index, method="nearest")
+ mask = np.abs((series.index[nearest] - manual_obs.index).total_seconds()) <= (
+ pd.Timedelta(max_dt) / pd.Timedelta("1s")
+ )
+
+ # interpolate raw obs to manual obs times
+ s_obs = (
+ series.reindex(series.index.join(manual_obs.index, how="outer"))
+ .interpolate(method="time")
+ .loc[manual_obs.index]
+ )
+
+ # calculate diff (manual - sensor, i.e. positive value means
+ # manual observation is higher)
+ diff = -(s_obs - manual_obs)
+
+ # use only diff where mask is True (= time between obs < max_dt)
+ diff = diff.loc[mask]
+
+ # interpolate w/ method
+ if method == "linear":
+ diff_full_index = (
+ diff.reindex(series.index.join(diff.index, how="outer"), method=None)
+ .interpolate(method="linear")
+ .fillna(0.0)
+ )
+ else:
+ diff_full_index = diff.reindex(series.index, method=method).fillna(0.0)
+
+ mask_above = diff_full_index.loc[series.index] > threshold
+ mask_below = diff_full_index.loc[series.index] < -threshold
+
+ return mask_corrections_above_below(
+ diff_full_index.loc[series.index],
+ mask_above,
+ threshold,
+ mask_below,
+ -threshold,
+ )
def rule_shift_to_manual_obs(
series, hseries, method="linear", max_dt="1D", reset_dates=None
):
- """Adjustment rule, for shifting timeseries onto manual observations.
+ """Adjustment rule, for shifting time series onto manual observations.
- Used for shifting timeseries based on sensor observations onto manual
+ Used for shifting time series based on sensor observations onto manual
verification measurements. By default uses linear interpolation between
two manual verification observations.
Parameters
----------
series : pd.Series
- timeseries to adjust
+ time series to adjust
hseries : pd.Series
- timeseries containing manual observations
+ time series containing manual observations
method : str, optional
method to use for interpolating between two manual observations,
by default "linear". Other options are those that are accepted by
@@ -656,15 +734,14 @@ def rule_shift_to_manual_obs(
Returns
-------
adjusted_series : pd.Series
- timeseries containing adjustments to shift series onto manual
+ time series containing adjustments to shift series onto manual
observations.
"""
# check if time between manual obs and sensor obs
# are further apart than max_dt:
- # nearest = hseries.index.map(lambda t: series.index[series.index.get_indexer([t], method="nearest")])
nearest = series.index.get_indexer(hseries.index, method="nearest")
mask = np.abs((series.index[nearest] - hseries.index).total_seconds()) <= (
- pd.Timedelta(max_dt) / pd.Timedelta("1S")
+ pd.Timedelta(max_dt) / pd.Timedelta("1s")
)
# interpolate raw obs to manual obs times
@@ -674,8 +751,9 @@ def rule_shift_to_manual_obs(
.loc[hseries.index]
)
- # calculate diff
- diff = s_obs - hseries
+ # calculate diff (manual - sensor, i.e. positive value means
+ # manual observation is higher)
+ diff = -(s_obs - hseries)
# use only diff where mask is True (= time between obs < max_dt)
diff = diff.loc[mask]
@@ -694,13 +772,13 @@ def rule_shift_to_manual_obs(
else:
diff_full_index = diff.reindex(series.index, method=method).fillna(0.0)
- adjusted_series = series - diff_full_index
+ adjusted_series = series + diff_full_index
return adjusted_series
def rule_combine_nan_or(*args):
- """Combination rule, combine NaN values for any number of timeseries.
+ """Combination rule, combine NaN values for any number of time series.
Used for combining intermediate results in branching algorithm trees to
create one final result, i.e. (s1.isna() OR s2.isna())
@@ -708,7 +786,7 @@ def rule_combine_nan_or(*args):
Returns
-------
corrections : pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Contains NaNs where any of the input series
values is NaN.
"""
@@ -720,8 +798,28 @@ def rule_combine_nan_or(*args):
return result
+def rule_combine_corrections_or(*args):
+ """Combination rule, combine corrections for any number of time series.
+
+ Used for combining intermediate results in branching algorithm trees to
+ create one final result, i.e. (corr_s1 OR corr_s2)
+
+ Returns
+ -------
+ corrections : pd.Series
+ a series with same index as the input time series containing
+ corrections. Contains corrections where all of the input series
+ values contain corrections.
+ """
+ for i, series in enumerate(args):
+ if i == 0:
+ c = get_empty_corrections_df(series)
+ c.loc[series["correction_code"] != 0, "correction_code"] = 99
+ return c
+
+
def rule_combine_nan_and(*args):
- """Combination rule, combine NaN values for any number of timeseries.
+ """Combination rule, combine NaN values for any number of time series.
Used for combining intermediate results in branching algorithm trees to
create one final result, i.e. (s1.isna() AND s2.isna())
@@ -729,7 +827,7 @@ def rule_combine_nan_and(*args):
Returns
-------
corrections : pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Contains NaNs where any of the input series
values is NaN.
"""
@@ -743,6 +841,29 @@ def rule_combine_nan_and(*args):
return result
+def rule_combine_corrections_and(*args):
+ """Combination rule, combine corrections for any number of time series.
+
+ Used for combining intermediate results in branching algorithm trees to
+ create one final result, i.e. (corr_s1 AND corr_s2)
+
+ Returns
+ -------
+ corrections : pd.Series
+ a series with same index as the input time series containing
+ corrections. Contains corrections where all of the input series
+ values contain corrections.
+ """
+ for i, series in enumerate(args):
+ if i == 0:
+ mask = series["correction_code"] != 0
+ else:
+ mask = mask & (series["correction_code"] != 0)
+ c = get_empty_corrections_df(args[0])
+ c.loc[mask, "correction_code"] = 99
+ return c
+
+
def rule_flat_signal(
series,
window,
@@ -762,7 +883,7 @@ def rule_flat_signal(
Parameters
----------
series : pd.Series
- timeseries to analyse
+ time series to analyse
window : int
number of days in window
min_obs : int
@@ -779,16 +900,16 @@ def rule_flat_signal(
limit. Only search for flat signals above this limit.
By default None.
hbelow : float, optional
- absolute value in units of timeseries signifying an upper limit.
+ absolute value in units of time series signifying an upper limit.
Only search for flat signals below this limit. By default None.
habove : float, optional
- absolute value in units of timeseries signifying a lower limit.
+ absolute value in units of time series signifying a lower limit.
Only search for flat signals above this limit. By default None.
Returns
-------
corrections : pd.Series
- a series with same index as the input timeseries containing
+ a series with same index as the input time series containing
corrections. Contains NaNs where the signal is considered flat
or dead.
"""
@@ -817,4 +938,4 @@ def rule_flat_signal(
mask = stdmask & quantilemask & levelmask
mask = mask.reindex(series.index, fill_value=False)
- return mask_corrections_as_nan(series, mask)
+ return mask_corrections_no_comparison_value(series, mask)
diff --git a/traval/ruleset.py b/traval/ruleset.py
index 6839c90..d4e766b 100755
--- a/traval/ruleset.py
+++ b/traval/ruleset.py
@@ -12,6 +12,8 @@
class RuleSetEncoder(json.JSONEncoder):
+ """Encode values in RuleSet to JSON."""
+
def default(self, o):
if callable(o):
return "func:" + o.__name__
@@ -39,7 +41,8 @@ def ruleset_hook(obj):
val = getattr(rulelib, funcname)
except AttributeError:
warnings.warn(
- f"Could not load function {funcname} " "from `traval.rulelib`!"
+ f"Could not load function {funcname} " "from `traval.rulelib`!",
+ stacklevel=1,
)
val = funcname
obj[key] = val
@@ -49,7 +52,9 @@ def ruleset_hook(obj):
try:
val = getattr(np, funcname)
except AttributeError:
- warnings.warn(f"Could not load function {funcname} " "from `numpy`!")
+ warnings.warn(
+ f"Could not load function {funcname} " "from `numpy`!", stacklevel=1
+ )
val = (funcname,)
obj[key] = (val,)
elif str(value).startswith("series:"):
@@ -83,7 +88,7 @@ class RuleSet:
The RuleSet object stores detection rules and other relevant information
in a dictionary. The order in which rules are carried out, the functions
- that parse the timeseries, the extra arguments required by those functions
+ that parse the time series, the extra arguments required by those functions
are all stored together.
The detection functions must take a series as the first argument, and
@@ -103,7 +108,6 @@ class RuleSet:
Examples
--------
-
Given two detection functions 'foo' and 'bar':
>>> rset = RuleSet(name="foobar")
@@ -144,21 +148,20 @@ def __call__(self, series):
Parameters
----------
series : pandas.Series or pandas.DataFrame
- timeseries to apply rules to
+ time series to apply rules to
Returns
-------
d : OrderedDict
- Dictionary containing resulting timeseries after applying rules.
+ Dictionary containing resulting time series after applying rules.
Keys represent step numbers (0 is the original series, 1 the
outcome of rule #1, etc.)
c : OrderedDict
- Dictionary containing corrections to timeseries based on rules
+ Dictionary containing corrections to time series based on rules
Keys represent step numbers (1 contains the corrections based on
rule #1, etc.). When no correction is available, step contains
the value 0.
"""
-
return self._applyself(series)
def add_rule(self, name, func, apply_to=None, kwargs=None):
@@ -272,7 +275,7 @@ def get_parameters(self, name=None):
@staticmethod
def _parse_kwargs(kwargs, name=None):
- """Internal method, parse keyword arguments dictionary.
+ """Internal method to parse keyword arguments dictionary.
Iterates over keys, values in kwargs dictionary. If value is callable,
calls value with 'name' as function argument. The result is stored
@@ -290,7 +293,7 @@ def _parse_kwargs(kwargs, name=None):
dict
dictionary of parsed arguments
"""
- new_args = dict()
+ new_args = {}
if kwargs is not None:
for k, v in kwargs.items():
if callable(v):
@@ -300,21 +303,21 @@ def _parse_kwargs(kwargs, name=None):
return new_args
def _applyself(self, series):
- """Internal method, apply ruleset to series.
+ """Internal method to apply ruleset to series.
Parameters
----------
series: pandas.Series or pandas.DataFrame
- timeseries to apply rules to
+ time series to apply rules to
Returns
-------
d: OrderedDict
- Dictionary containing resulting timeseries after applying rules.
+ Dictionary containing resulting time series after applying rules.
Keys represent step numbers (0 is the original series, 1 the
outcome of rule # 1, etc.)
c: OrderedDict
- Dictionary containing corrections to timeseries based on rules
+ Dictionary containing corrections to time series based on rules
Keys represent step numbers(1 contains the corrections based on
rule # 1, etc.). When no correction is available, step contains
the value 0.
@@ -329,8 +332,21 @@ def _applyself(self, series):
arg_dict = self._parse_kwargs(irule["kwargs"], name)
corr = irule["func"](d[int(irule["apply_to"])], **arg_dict)
# store both correction and result
- d[i] = d[int(irule["apply_to"])] + corr
- c[i] = corr.loc[corr != 0.0].copy()
+ # support correction code based corrections
+ if isinstance(corr, pd.DataFrame) and "correction_code" in corr.columns:
+ d[i] = d[int(irule["apply_to"])].where(
+ corr["correction_code"] == 0, np.nan
+ )
+ c[i] = corr.loc[corr["correction_code"] != 0.0].copy()
+ elif isinstance(corr, pd.Series):
+ # support nan-based corrections
+ d[i] = d[int(irule["apply_to"])] + corr
+ c[i] = corr.loc[corr != 0.0]
+ else:
+ raise TypeError(
+ "Corrections computed by rules must be pd.Series containing "
+ "NaNs or DataFrame containing a column named 'correction_code'."
+ )
# if apply_to is tuple, collect series as kwargs to func
elif isinstance(irule["apply_to"], tuple):
# collect results
@@ -383,7 +399,7 @@ def to_pickle(self, fname, verbose=True):
verbose : bool, optional
prints message when operation complete, default is True
- See also
+ See Also
--------
from_pickle : load RuleSet from pickle file
to_json : store RuleSet as json file (does not support custom functions)
@@ -412,7 +428,7 @@ def from_pickle(cls, fname):
RuleSet
RuleSet object, including custom functions and parameters
- See also
+ See Also
--------
to_pickle : store RuleSet as pickle (supports custom functions)
to_json : store RuleSet as json file (does not support custom functions)
@@ -443,7 +459,7 @@ def to_json(self, fname=None, verbose=True):
prints message when operation complete, default is True
- See also
+ See Also
--------
from_json : load RuleSet from json file
to_pickle : store RuleSet as pickle (supports custom functions)
@@ -453,7 +469,7 @@ def to_json(self, fname=None, verbose=True):
"Custom functions will not be preserved when storing "
"RuleSet as JSON file!"
)
- warnings.warn(msg)
+ warnings.warn(msg, stacklevel=1)
rules = deepcopy(self.rules)
rules["name"] = self.name
if fname is not None:
@@ -486,7 +502,7 @@ def from_json(cls, fname):
RuleSet:
RuleSet object
- See also
+ See Also
--------
to_json : store RuleSet as JSON file (does not support custom functions)
to_pickle : store RuleSet as pickle (supports custom functions)
@@ -520,9 +536,9 @@ def get_resolved_ruleset(self, name):
new_ruleset = deepcopy(self.rules)
for rule in new_ruleset.values():
rule["kwargs"] = self._parse_kwargs(rule["kwargs"], name=name)
-
+
# create new object with resolved parameters
rset = RuleSet(name)
rset.rules = new_ruleset
-
+
return rset
diff --git a/traval/ts_comparison.py b/traval/ts_comparison.py
index 9a4689f..6c5a833 100755
--- a/traval/ts_comparison.py
+++ b/traval/ts_comparison.py
@@ -53,7 +53,7 @@ def idx_in_idx2(self):
class SeriesComparison:
- """Object for comparing two timeseries.
+ """Object for comparing two time series.
Comparison yields the following categories:
@@ -77,7 +77,7 @@ class SeriesComparison:
"""
def __init__(self, s1, s2, names=None, diff_threshold=0.0):
- """Compare two timeseries.
+ """Compare two time series.
Parameters
----------
@@ -86,7 +86,7 @@ def __init__(self, s1, s2, names=None, diff_threshold=0.0):
s2 : pd.Series or pd.DataFrame
second series to compare
names : list of str, optional
- list of names of timeseries, by default None, which
+ list of names of time series, by default None, which
uses series name, or dataframe column name
diff_threshold : float, optional
value beyond which a difference is considered significant, by
@@ -127,7 +127,7 @@ def __init__(self, s1, s2, names=None, diff_threshold=0.0):
@staticmethod
def _parse_series(series):
- """Internal method to parse timeseries input.
+ """Internal method to parse time series input.
Parameters
----------
@@ -138,7 +138,7 @@ def _parse_series(series):
Returns
-------
series, comments : pd.Series, pd.Series
- returns timeseries and comment series. Comment series is empty
+ returns time series and comment series. Comment series is empty
series if no comments are included in input
Raises
@@ -248,7 +248,6 @@ def compare_by_comment(self):
ValueError
if no comment series is found
"""
-
if self.c2n.empty:
raise ValueError("No comment series!")
@@ -339,64 +338,63 @@ def _check_idx_comparison(self, return_missing=False):
class SeriesComparisonRelative(SeriesComparison):
- """Object for comparing two timeseries relative to a third timeseries.
+ """Object for comparing two time series relative to a third time series.
Extends the SeriesComparison object to include a comparison between
- two timeseries and a third base timeseries. This is used for example, when
+ two time series and a third base time series. This is used for example, when
comparing the results of two error detection outcomes to the original
- raw timeseries.
+ raw time series.
Comparison yields both the results from SeriesComparison as well as the
- following categories for the relative comparison to the base timeseries:
+ following categories for the relative comparison to the base time series:
- - kept_in_both: both timeseries and the base timeseries contain values
+ - kept_in_both: both time series and the base time series contain values
- flagged_in_s1: value is NaN/missing in series #1
- flagged_in_s2: value is NaN/missing in series #2
- flagged_in_both: value is NaN/missing in both series #1 and series #2
- - in_all_nan: value is NaN in all timeseries (series #1, #2 and base)
+ - in_all_nan: value is NaN in all time series (series #1, #2 and base)
- introduced_in_s1: value is NaN/missing in base but has value in series #1
- introduced_in_s2: value is NaN/missing in base but has value in series #2
- introduced_in_both: value is NaN/missing in base but has value in both
- timeseries
+ time series
Parameters
----------
s1 : pd.Series or pd.DataFrame
first series to compare
truth : pd.Series or pd.DataFrame
- second series to compare, if a "truth" timeseries is available
- pass it as the second timeseries. Stored in object as 's2'.
+ second series to compare, if a "truth" time series is available
+ pass it as the second time series. Stored in object as 's2'.
base : pd.Series or pd.DataFrame
- timeseries to compare other two series with
+ time series to compare other two series with
diff_threshold : float, optional
value beyond which a difference is considered significant, by
default 0.0. Two values whose difference is smaller than threshold
are considered identical.
- See also
+ See Also
--------
- SeriesComparison : Comparison of two timeseries relative to each other
+ SeriesComparison : Comparison of two time series relative to each other
"""
def __init__(self, s1, truth, base, diff_threshold=0.0):
- """Compare two timeseries relative to a base timeseries.
+ """Compare two time series relative to a base time series.
Parameters
----------
s1 : pd.Series or pd.DataFrame
first series to compare
truth : pd.Series or pd.DataFrame
- second series to compare, if a "truth" timeseries is available
- pass it as the second timeseries. Stored in object as 's2'.
+ second series to compare, if a "truth" time series is available
+ pass it as the second time series. Stored in object as 's2'.
base : pd.Series or pd.DataFrame
- timeseries to compare other two series with
+ time series to compare other two series with
diff_threshold : float, optional
value beyond which a difference is considered significant, by
default 0.0. Two values whose difference is smaller than threshold
are considered identical.
"""
-
# Do the original comparison between s1 and s2
super().__init__(s1, truth, diff_threshold=diff_threshold)
@@ -417,9 +415,8 @@ def __init__(self, s1, truth, base, diff_threshold=0.0):
self.bc = BinaryClassifier.from_series_comparison_relative(self)
def _compare_series_to_base(self):
- """Internal method for comparing two timseries to base timeseries."""
-
- # where Nans in base timeseries
+ """Internal method for comparing two timseries to base time series."""
+ # where Nans in base time series
nanmask = self.basen.isna()
# prepare some indices
@@ -439,7 +436,7 @@ def _compare_series_to_base(self):
self.idx_r_in_all_nan = self.basen.loc[nanmask].index.difference(s1s2_union)
# self.idx_r_in_all_nan = self.basen.loc[nanmask].index.intersection(
# self.idx_in_both_nan) # only where all are NaN
- # counts for both NaNs and missing in base timeseries
+ # counts for both NaNs and missing in base time series
self.idx_r_introduced_in_s1 = (
self.basen.loc[nanmask]
.index.intersection(only_in_s1)
@@ -457,13 +454,13 @@ def _compare_series_to_base(self):
)
def _summarize_comparison_to_base(self):
- """Internal method for summarizing comparison with base timeseries.
+ """Internal method for summarizing comparison with base time series.
Returns
-------
summary : pandas.Series
Series summarizing the series comparison relative to base
- timeseries, containing counts per category
+ time series, containing counts per category
"""
categories = [
"kept_in_both",
@@ -496,7 +493,6 @@ def compare_to_base_by_comment(self):
ValueError
if no comment series is available.
"""
-
if self.c2n.empty:
raise ValueError("No comment series!")
diff --git a/traval/ts_utils.py b/traval/ts_utils.py
index abf26fb..9243182 100644
--- a/traval/ts_utils.py
+++ b/traval/ts_utils.py
@@ -1,45 +1,247 @@
+from enum import IntEnum
+
import numpy as np
import pandas as pd
-def mask_corrections_as_nan(series, mask):
- """Get corrections series with NaNs where mask == True.
+class CorrectionCode(IntEnum):
+ """Codes and labels for labeling error detection results."""
+
+ NO_CORRECTION = 0
+ BELOW_THRESHOLD = -2
+ NOT_EQUAL_VALUE = -1
+ EQUAL_VALUE = 1
+ ABOVE_THRESHOLD = 2
+ MODIFIED_VALUE = 4
+ UNKNOWN_COMPARISON_VALUE = 99
+
+
+def get_empty_corrections_df(series):
+ """Method to get corrections empty dataframe.
+
+ Parameters
+ ----------
+ series : pd.Series
+ time series to apply corrections to
+ """
+ c = pd.DataFrame(
+ index=series.index,
+ data={
+ "correction_code": CorrectionCode.NO_CORRECTION,
+ "series_values": np.full(series.size, np.nan),
+ "comparison_values": np.full(series.size, np.nan),
+ },
+ )
+ return c
+
+
+def _mask_corrections(series, values, mask, correction_code):
+ c = get_empty_corrections_df(series)
+ c.loc[mask, "series_values"] = series
+ if values is not None:
+ if isinstance(values, pd.Series):
+ c.loc[mask, "comparison_values"] = values.loc[mask]
+ else:
+ c.loc[mask, "comparison_values"] = values
+ c.loc[mask, "correction_code"] = correction_code
+ return c
+
+
+def mask_corrections_above_below(
+ series,
+ mask_above,
+ threshold_above,
+ mask_below,
+ threshold_below,
+):
+ """Get corrections where above threshold.
+
+ Parameters
+ ----------
+ series : pd.Series
+ time series to apply corrections to
+ threshold_above : pd.Series
+ time series with values to compare with
+ mask_above : DateTimeIndex or boolean np.array
+ DateTimeIndex containing timestamps where value should be set to NaN,
+ or boolean array with same length as series set to True where
+ value should be set to NaN. (Uses pandas .loc[mask] to set values.)
+ threshold_below : pd.Series
+ time series with values to compare with
+ mask_below : DateTimeIndex or boolean np.array
+ DateTimeIndex containing timestamps where value should be set to NaN,
+ or boolean array with same length as series set to True where
+ value should be set to NaN. (Uses pandas .loc[mask] to set values.)
+ """
+ c_above = mask_corrections_above_threshold(series, threshold_above, mask_above)
+ c_below = mask_corrections_below_threshold(series, threshold_below, mask_below)
+ return c_above.add(c_below, fill_value=0)
+
+
+def mask_corrections_above_threshold(series, threshold, mask):
+ """Get corrections where below threshold.
Parameters
----------
series : pd.Series
- timeseries to provide corrections for
+ time series to apply corrections to
+ threshold : pd.Series
+ time series with values to compare with
mask : DateTimeIndex or boolean np.array
DateTimeIndex containing timestamps where value should be set to NaN,
or boolean array with same length as series set to True where
value should be set to NaN. (Uses pandas .loc[mask] to set values.)
+ """
+ return _mask_corrections(series, threshold, mask, CorrectionCode.ABOVE_THRESHOLD)
+
+
+def mask_corrections_below_threshold(series, threshold, mask):
+ """Get corrections where below threshold.
+
+ Parameters
+ ----------
+ series : pd.Series
+ time series to apply corrections to
+ threshold : pd.Series
+ time series with values to compare with
+ mask : DateTimeIndex or boolean np.array
+ DateTimeIndex containing timestamps where value should be set to NaN,
+ or boolean array with same length as series set to True where
+ value should be set to NaN. (Uses pandas .loc[mask] to set values.)
+ """
+ return _mask_corrections(series, threshold, mask, CorrectionCode.BELOW_THRESHOLD)
+
+
+def mask_corrections_equal_value(series, values, mask):
+ """Get corrections where equal to value.
+
+ Parameters
+ ----------
+ series : pd.Series
+ time series to apply corrections to
+ values : pd.Series
+ time series with values to compare with
+ mask : DateTimeIndex or boolean np.array
+ DateTimeIndex containing timestamps where value should be set to NaN,
+ or boolean array with same length as series set to True where
+ value should be set to NaN. (Uses pandas .loc[mask] to set values.)
+ """
+ return _mask_corrections(series, values, mask, CorrectionCode.EQUAL_VALUE)
+
+
+def mask_corrections_modified_value(series, values, mask):
+ """Get corrections where value was modified.
+
+ Parameters
+ ----------
+ series : pd.Series
+ time series to apply corrections to
+ values : pd.Series
+ time series with values to compare with
+ mask : DateTimeIndex or boolean np.array
+ DateTimeIndex containing timestamps where value should be set to NaN,
+ or boolean array with same length as series set to True where
+ value should be set to NaN. (Uses pandas .loc[mask] to set values.)
+ """
+ return _mask_corrections(series, values, mask, CorrectionCode.MODIFIED_VALUE)
+
+
+def mask_corrections_not_equal_value(series, values, mask):
+ """Get corrections where not equal to value.
+
+ Parameters
+ ----------
+ series : pd.Series
+ time series to apply corrections to
+ values : pd.Series
+ time series with values to compare with
+ mask : DateTimeIndex or boolean np.array
+ DateTimeIndex containing timestamps where value should be set to NaN,
+ or boolean array with same length as series set to True where
+ value should be set to NaN. (Uses pandas .loc[mask] to set values.)
+ """
+ return _mask_corrections(series, values, mask, CorrectionCode.NOT_EQUAL_VALUE)
+
+
+def mask_corrections_no_comparison_value(series, mask):
+ """Get corrections where equal to value.
+
+ Parameters
+ ----------
+ series : pd.Series
+ time series to apply corrections to
+ mask : DateTimeIndex or boolean np.array
+ DateTimeIndex containing timestamps where value should be set to NaN,
+ or boolean array with same length as series set to True where
+ value should be set to NaN. (Uses pandas .loc[mask] to set values.)
+ """
+ return _mask_corrections(
+ series, None, mask, CorrectionCode.UNKNOWN_COMPARISON_VALUE
+ )
+
+
+def corrections_as_nan(corrections):
+ """Convert correction code series to NaNs.
+
+ Excludes codes 0 and 4, which are used to indicate no correction and a modification
+ of the value, respectively.
+
+ Parameters
+ ----------
+ corrections : pd.Series or pd.DataFrame
+ series or dataframe with correction code
Returns
-------
c : pd.Series
- return corrections series
+ return corrections series with nans where value is corrected
"""
- c = pd.Series(
- index=series.index,
- data=np.zeros(series.index.size),
- fastpath=True,
- dtype=float,
+ if isinstance(corrections, pd.DataFrame):
+ corrections = corrections["correction_code"]
+ c = pd.Series(index=corrections.index, data=0.0)
+ # set values where correction code is *not* 0 or 4 to NaN
+ # (meaning a correction was applied)
+ c.loc[(corrections != 0) | (corrections != 4)] = np.nan
+ return c
+
+
+def corrections_as_float(corrections):
+ """Convert correction code series to NaNs.
+
+ Excludes codes 0 and 4, which are used to indicate no correction and a modification
+ of the value, respectively.
+
+ Parameters
+ ----------
+ corrections : pd.DataFrame
+ dataframe with correction code and original + modified values
+
+ Returns
+ -------
+ c : pd.Series
+ return corrections series with floats where value is modified
+ """
+ c = pd.Series(index=corrections.index, data=0.0)
+ # set values where correction code is 4 to difference between original and modified
+ mask = corrections["correction_code"] == 4
+ c.loc[mask] = (
+ corrections.loc[mask, "comparison_values"]
+ - corrections.loc[mask, "series_values"]
)
- c.loc[mask] = np.nan
return c
def resample_short_series_to_long_series(short_series, long_series):
- """Resample a short timeseries to index from a longer timeseries.
+ """Resample a short time series to index from a longer time series.
First uses 'ffill' then 'bfill' to fill new series.
Parameters
----------
short_series : pd.Series
- short timeseries
+ short time series
long_series : pd.Series
- long timeseries
+ long time series
Returns
-------
@@ -55,17 +257,17 @@ def resample_short_series_to_long_series(short_series, long_series):
first_date_after = long_series.loc[mask].index[0]
new_series.loc[first_date_after] = short_series.iloc[i]
- new_series = new_series.fillna(method="ffill").fillna(method="bfill")
+ new_series = new_series.ffill().bfill()
return new_series
def diff_with_gap_awareness(series, max_gap="7D"):
- """Get diff of timeseries with a limit on gap between two values.
+ """Get diff of time series with a limit on gap between two values.
Parameters
----------
series : pd.Series
- timeseries to calculate diff for
+ time series to calculate diff for
max_gap : str, optional
maximum period between two observations for calculating diff, otherwise
set value to NaN, by default "7D"
@@ -73,7 +275,7 @@ def diff_with_gap_awareness(series, max_gap="7D"):
Returns
-------
diff : pd.Series
- timeseries with diff, with NaNs whenever two values are farther apart
+ time series with diff, with NaNs whenever two values are farther apart
than max_gap.
"""
diff = series.diff()
@@ -86,20 +288,20 @@ def diff_with_gap_awareness(series, max_gap="7D"):
def spike_finder(series, threshold=0.15, spike_tol=0.15, max_gap="7D"):
- """Find spikes in timeseries.
+ """Find spikes in time series.
- Spikes are sudden jumps in the value of a timeseries that last 1 timestep.
+ Spikes are sudden jumps in the value of a time series that last 1 timestep.
They can be both negative or positive.
Parameters
----------
series : pd.Series
- timeseries to find spikes in
+ time series to find spikes in
threshold : float, optional
the minimum size of the jump to qualify as a spike, by default 0.15
spike_tol : float, optional
- offset between value of timeseries before spike and after spike,
- by default 0.15. After a spike, the value of the timeseries is usually
+ offset between value of time series before spike and after spike,
+ by default 0.15. After a spike, the value of the time series is usually
close to but not identical to the value that preceded the spike. Use
this parameter to control how close the value has to be.
max_gap : str, optional
@@ -112,7 +314,6 @@ def spike_finder(series, threshold=0.15, spike_tol=0.15, max_gap="7D"):
pandas DateTimeIndex objects containing timestamps of upward and
downward spikes.
"""
-
# identify gaps and set diff value after gap to nan
diff = diff_with_gap_awareness(series, max_gap=max_gap)
@@ -140,7 +341,7 @@ def spike_finder(series, threshold=0.15, spike_tol=0.15, max_gap="7D"):
def bandwidth_moving_avg_n_sigma(series, window, n):
- """Calculate bandwidth around timeseries based moving average + n * std.
+ """Calculate bandwidth around time series based moving average + n * std.
Parameters
----------
@@ -165,7 +366,7 @@ def bandwidth_moving_avg_n_sigma(series, window, n):
def interpolate_series_to_new_index(series, new_index):
- """Interpolate timeseries to new DateTimeIndex.
+ """Interpolate time series to new DateTimeIndex.
Parameters
----------
@@ -183,7 +384,7 @@ def interpolate_series_to_new_index(series, new_index):
s_interp = np.interp(
new_index, series.index.asi8, series.values, left=np.nan, right=np.nan
)
- si = pd.Series(index=new_index, data=s_interp, dtype=float, fastpath=True)
+ si = pd.Series(index=new_index, data=s_interp, dtype=float)
return si
@@ -202,7 +403,6 @@ def unique_nans_in_series(series, *args):
mask : pd.Series
mask with value True where NaN is unique to series
"""
-
mask = series.isna()
for s in args:
@@ -214,30 +414,29 @@ def unique_nans_in_series(series, *args):
return mask
-def create_synthetic_raw_timeseries(raw_series, truth_series, comments):
- """Create synthetic raw timeseries.
+def create_synthetic_raw_time_series(raw_series, truth_series, comments):
+ """Create synthetic raw time series.
Updates 'truth_series' (where values are labelled with a comment)
with values from raw_series. Used for removing unlabeled changes between
- a raw and validated timeseries.
+ a raw and validated time series.
Parameters
----------
raw_series : pd.Series
- timeseries with raw data
+ time series with raw data
truth_series : pd.Series
- timeseries with validated data
+ time series with validated data
comments : pd.Series
- timeseries with comments. Index must be same as 'truth_series'.
+ time series with comments. Index must be same as 'truth_series'.
When value does not have a comment it must be an empty string: ''.
Returns
-------
s : pd.Series
- synthetic raw timeseries, same as truth_series but updated with
+ synthetic raw time series, same as truth_series but updated with
raw_series where value has been commented.
"""
-
if truth_series.index.symmetric_difference(comments.index).size > 0:
raise ValueError("'truth_series' and 'comments' must have same index!")
@@ -265,7 +464,7 @@ def shift_series_forward_backward(s, freqstr="1D"):
def smooth_upper_bound(b, smoothfreq="1D"):
smoother = shift_series_forward_backward(b, freqstr=smoothfreq)
smoother.iloc[:, 0] = smoother.iloc[:, 0].interpolate(method="linear")
- smoother.iloc[:, 2] = smoother.iloc[:, 1].interpolate(method="linear")
+ smoother.iloc[:, 2] = smoother.iloc[:, 2].interpolate(method="linear")
return smoother.max(axis=1).loc[smoother.iloc[:, 1].dropna().index]
@@ -274,3 +473,19 @@ def smooth_lower_bound(b, smoothfreq="1D"):
smoother.iloc[:, 0] = smoother.iloc[:, 0].interpolate(method="linear")
smoother.iloc[:, 2] = smoother.iloc[:, 2].interpolate(method="linear")
return smoother.min(axis=1).loc[smoother.iloc[:, 1].dropna().index]
+
+
+def get_correction_status_name(corrections):
+ """Get correction status name from correction codes.
+
+ Parameters
+ ----------
+ correction_code : pd.DataFrame or pd.Series
+ dataframe or series containing corrections codes
+
+ Returns
+ -------
+ pd.DataFrame or pd.Series
+ dataframe or series filled with correction status name
+ """
+ return corrections.fillna(0).map(lambda c: CorrectionCode(c).name)
diff --git a/traval/version.py b/traval/version.py
index 3d26edf..3d18726 100644
--- a/traval/version.py
+++ b/traval/version.py
@@ -1 +1 @@
-__version__ = "0.4.1"
+__version__ = "0.5.0"