This commit is contained in:
2025-04-13 22:55:55 +02:00
commit 9abfb936a3
16 changed files with 527 additions and 0 deletions

View File

@@ -0,0 +1 @@
from .mov_avg import MovAvg

36
filter_dev/filter/base.py Normal file
View File

@@ -0,0 +1,36 @@
from typing import Dict
import pandas as pd
from tkinter.ttk import Frame
from ..gui.device import Device
from ..gui.slider import Slider
class Filter:
param_map: Dict[str, Slider] = {}
def __init__(self, device: Device, toolbar: Frame, callback: callable):
self.device = device
self.toolbar = toolbar
self.callback = callback
self.init_params(toolbar)
def init_params(self, toolbar):
raise NotImplementedError()
def _get_params(self):
params = {}
for k, v in self.param_map.items():
params[k] = v.get_value()
return params
def __call__(self) -> pd.DataFrame:
df = self.device.data
df['filtered'] = self.filter(df)
return df
def filter(self, df: pd.DataFrame) -> pd.Series:
raise NotImplementedError()

View File

@@ -0,0 +1,18 @@
import pandas as pd
from .base import Filter
from ..gui.slider import Slider
class MovAvg(Filter):
def init_params(self, toolbar):
self.param_map = {
"window_size": Slider(toolbar, "Window Size", 1, 500, 10, self.callback),
"decimals": Slider(toolbar, "Decimals", 1, 5, 1, self.callback),
# "reset_threshold": Slider(self.toolbar, "Reset Threshold", 0.001, 0.1, 0.1, self.update),
}
def filter(self, df: pd.DataFrame) -> pd.Series:
params = self._get_params()
return df['weights'].rolling(window=int(params['window_size'])).mean()\
.round(int(params['decimals']))