История изменений
Исправление shkolnick-kun, (текущая версия) :
Вот:
import numpy as np
import pandas as pd
from scipy import signal
df = pd.read_csv("254.csv")
df["timestamp"] = pd.to_datetime(df["timestamp"])
df.set_index('timestamp', inplace=True)
norm = 100.
df['medfilt'] = signal.medfilt(df['value'], kernel_size=5)
df['err'] = np.abs(df['medfilt'] - df['value'])
df['des'] = (df['err'] > norm*df['err'].median()).astype(float)
df['flt'] = df['des']*df['medfilt'] + (1.0 - df['des'])*df['value']
df['flt'].plot()
Аналогичным образом можно поступить не только с медианным фильтром, но и с любым другим.
Да, фильтр Калмана на таких данных без нормальной модели процесса работать не будет.
Исходная версия shkolnick-kun, :
Вот:
import numpy as np
import pandas as pd
from scipy import signal
df = pd.read_csv("254.csv")
df["timestamp"] = pd.to_datetime(df["timestamp"])
df.set_index('timestamp', inplace=True)
norm = 100.
df['medfilt'] = signal.medfilt(df['value'], kernel_size=5)
df['err'] = np.abs(df['medfilt'] - df['value'])
df['des'] = (df['err'] > norm*df['err'].median()).astype(float)
df['flt'] = df['des']*df['medfilt'] + (1.0 - df['des'])*df['value']
df['flt'].plot()
Аналогичным образом можно поступить не только с медианным фильтром, но и с любым другим.