Skip to content
Snippets Groups Projects
Commit 91a5591e authored by Peter Lünenschloß's avatar Peter Lünenschloß
Browse files

noise tools

parent eb1a3afb
No related branches found
No related tags found
1 merge request!256Filter funcs
Pipeline #22673 passed with stage
in 1 minute and 39 seconds
......@@ -13,6 +13,7 @@ from saqc.lib.types import ColumnName, FreqString, PositiveInt, PositiveFloat
class Noise(ModuleBase):
def flagByVarianceLowPass(self,
field: ColumnName,
stat: Callable[[numpy.array, pd.Series], float],
wnsz: FreqString,
thresh: PositiveFloat,
sub_wnsz: FreqString = None,
......
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
from dios import DictOfSeries
from typing import Callable
from saqc.constants import *
from saqc.core import register, Flags
from saqc.lib.types import ColumnName, FreqString, PositiveInt, PositiveFloat
from saqc.lib.tools import getAttrOrApply
@register(masking='field', module="noise")
def flagByVarianceLowPass(data: DictOfSeries,
field: ColumnName,
flags: Flags,
stat: Callable[[np.array, pd.Series], float],
wnsz: FreqString,
thresh: PositiveFloat,
sub_wnsz: FreqString = None,
......@@ -31,9 +35,11 @@ def flagByVarianceLowPass(data: DictOfSeries,
wnsz = pd.Timedelta(wnsz)
sub_wnsz = pd.Timedelta(sub_wnsz)
stat_parent = datcol.rolling(wnsz, min_periods=min_periods).std()
stat_parent = datcol.rolling(wnsz, min_periods=min_periods)
stat_parent = getAttrOrApply(stat_parent, stat)
exceeding_parent = stat_parent > thresh
stat_sub = datcol.rolling(sub_wnsz).std()
stat_sub = datcol.rolling(sub_wnsz)
stat_sub = getAttrOrApply(stat_sub, stat)
min_stat = stat_sub.rolling(wnsz - sub_wnsz, closed='both').min()
exceeding_sub = min_stat > sub_thresh
......
......@@ -605,7 +605,7 @@ def reindexFlags(
flags: Flags,
method: Literal[
"inverse_fagg", "inverse_bagg", "inverse_nagg",
"inverse_fshift", "inverse_bshift", "inverse_nshift"
"inverse_fshift", "inverse_bshift", "inverse_nshift", "match"
],
source: str,
freq: Optional[str] = None,
......
......@@ -532,3 +532,18 @@ def getFreqDelta(index):
if i.equals(index):
return i[1] - i[0]
return delta
def getAttrOrApply(in_obj, apply_obj, attr_access='__name__', attr_or='apply'):
"""
For the repeating task of applying build in (accelerated) methods/funcs (`apply_obj`),
of rolling/resampling - like objects (`in_obj`) ,
if those build-ins are available, or pass the method/func to the objects apply-like method, otherwise.
"""
try:
out = getattr(in_obj, getattr(apply_obj, attr_access))()
except AttributeError:
out = getattr(in_obj, attr_or)(apply_obj)
return out
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment