Интеллектуальное усреднение данных временных рядов с помощью Python - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть следующие данные (временные ряды):

t = [5.13,   5.27,   5.40,   5.46,  190.99, 191.13, 191.267, 368.70, 368.83,  368.90, 368.93]
y = [17.17, 17.18, 17.014, 17.104,  16.981,  16.96,   16.85,  17.27, 17.66,   17.76, 18.01]

, поэтому группы данных с короткими (временными) интервалами затем четко разделяются большим промежутком времени.

Я ищу простой метод, который будет разумно усреднять их вместе;своего рода «байесовские блоки», но для данных без гистограммы.

Можно сделать простую скользящую среднюю или свернутую свертку, но я ищу что-то более умное, которое будет обобщаться на более крупные, похожие, но не идентичные наборы данных.

1 Ответ

0 голосов
/ 29 сентября 2018

С пандами легко.Сначала создайте DataFrame:

df = pd.DataFrame({'t':t,'y':y})

Затем пометьте группы в соответствии с временным порогом:

groups = (df.t.diff() > 10).cumsum()

Это дает вам [0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2], потому что cumsum() при увеличении логического массивагде бы ввод не был истинным.

Наконец, используйте groupby():

df.groupby(groups).mean()

Это дает вам:

         t          y
t                    
0    5.315  17.117000
1  191.129  16.930333
2  368.840  17.675000

Если вам нужны простые массивы NumPy в концепросто отметьте .t.values и .y.values.

Если вы априори не знаете, какой временной порог использовать, я уверен, что вы можете придумать некоторую эвристику, возможно, включающую простую статистику по df.t и df.t.diff().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...