LINUX.ORG.RU

История изменений

Исправление 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()

Аналогичным образом можно поступить не только с медианным фильтром, но и с любым другим.