У меня есть график с некоторыми выбросами (неправильные измерения):
![enter image description here](https://i.stack.imgur.com/izgPz.png)
Хотя базовые данные хороши.Я хочу просто удалить все, что слишком далеко от «текущего среднего».Я пытался использовать pd.rolling().mean()
, но без удовлетворительного результата:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
data = np.genfromtxt('shard_height_plot.csv', delimiter = ',')
df = pd.DataFrame(data)
df.set_index(0, inplace = True)
df2 = df.rolling(20).mean()
plt.plot(df)
plt.plot(df2)
plt.show()
![enter image description here](https://i.stack.imgur.com/mDonl.png)
Я пытался найти в Интернете хорошее решение, но не смогнайти один.Не должно быть так сложно удалить точки данных, которые прыгают через крышу, не так ли?
Редактировать: файл данных можно загрузить здесь: https://ufile.io/pviuc
Редактировать2:
Я решил эту проблему со слишком многими выбросами, улучшив создание моего набора данных.
Суть его:
if abs(D - D_List[-2]) > 30:
D = D_List[-2]
D_List.pop()
D_List.append(D)
По сути, это проверяет, больше ли изменение значения, чем 30, и удаляет ли последнее значение и заменяет его вторым последним.Не очень эффектно, но именно то, что мне нужно.Я использовал один из ответов, потому что он намного красивее.Большое спасибо, ребята.
![enter image description here](https://i.stack.imgur.com/KfjxK.png)