У меня есть данные, поступающие от датчика, который я храню во временной серии.
Когда я их отображаю, я получаю:
Предполагается, что эти данные являются "непрерывными", например, температуры, не так быстро растут и падают.
После поиска похожих вопросов в Интернете - я думаю, что "сглаженная кривая" дала мне более релевантную информацию. результаты - я применяю «свертку» к данным, используя код, предоставленный в этом ответе .
Я получаю:
Это неудовлетворительно, так как я предполагаю, что некоторые точки данных просто "неправильные" и должны быть удалены, а не усреднены.
Сделать это вручную довольно легко, так как мы можем угадать кривую:
Вот данные и код для создания второго графика:
def smooth(y, box_pts):
import numpy as np
box = np.ones(box_pts)/box_pts
return np.convolve(y, box, mode='same')
def load_data(f):
from datetime import datetime as dt
with open(f, "rt") as fd:
X = []
Y = []
for line in fd.readlines():
(x,y)=line.strip().split(" ")
X.append(dt.fromtimestamp(int(x)))
Y.append(float(y))
return (X, Y)
import sys
(X,Y) = load_data(sys.argv[1])
from matplotlib.pyplot import plot, show
plot(X, Y,'b-')
plot(X, smooth(Y,19), 'g-', lw=2)
show()
Я ищуалгоритм, который удалял бы "плохие" значения, любая идея?