Lowess Сглаживание данных Python временных рядов - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь использовать LOWESS для сглаживания следующих данных:

https://i.stack.imgur.com/T7bKq.png

Я хотел бы получить плавную линию, которая отфильтровывает пики в данных.Мой код выглядит следующим образом:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import HourLocator, DayLocator, DateFormatter
from statsmodels.nonparametric.smoothers_lowess import lowess

file = r'C:...'
df = pd.read_csv(file) # reads data file   

df['Date'] = pd.to_datetime(df['Time Local'], format='%d/%m/%Y  %H:%M')     

x = df['Date']  
y1 = df['CTk2 Level'] 

filtered = lowess(y1, x, is_sorted=True, frac=0.025, it=0)

plt.plot(x, y1, 'r')
plt.plot(filtered[:,0], filtered[:,1], 'b')

plt.show()

Когда я запускаю этот код, я получаю следующую ошибку:

ValueError: минимум ограничения просмотра -7.641460199922635e + 16 меньше 1и является недопустимым значением даты Matplotlib.Это часто происходит, если вы передаете значение, отличное от даты и времени, на ось с датой и временем

Дата в моих данных представлена ​​в формате 07/05/2018 00:07:00.Я думаю, что проблема в том, что LOWESS изо всех сил пытается работать с данными даты и времени, но не уверен?

Не могли бы вы помочь мне?

1 Ответ

0 голосов
/ 07 июня 2019

Lowess не уважает тип DateTimeIndex и вместо этого просто возвращает даты в наносекундах с начала эпохи.К счастью, легко конвертировать обратно:

smoothedx, smoothedy = lowess(y1, x, is_sorted=True, frac=0.025, it=0)
smoothedx = smoothedx.astype('datetime64[s]')
...