Цель состоит в том, чтобы преобразовать фрейм данных со столбцом списка в качестве столбца данных (и, таким образом, только с одной меткой времени и продолжительностью на строку) в временной ряд в длинном формате с указателем даты и времени для каждого отдельного элемента.
В результате больше нет последовательности / списка для каждой строки для данных, а есть только один столбец значений.
df_test = pd.DataFrame({'timestamp': [1462352000000000000, 1462352100000000000, 1462352200000000000, 1462352300000000000],
'list': [[1,2,1,9], [2,2,3,0], [1,3,3,0], [1,1,3,9]],
'duration_sec': [3.0, 3.0, 3.0, 3.0]})
tdi = pd.DatetimeIndex(df_test.timestamp)
df_test.set_index(tdi, inplace=True)
df_test.drop(columns='timestamp', inplace=True)
df_test.index.name = 'datetimeindex'
Out:
list duration_sec
datetimeindex
2016-05-04 08:53:20 [1, 2, 1, 9] 3.0
2016-05-04 08:55:00 [2, 2, 3, 0] 3.0
2016-05-04 08:56:40 [1, 3, 3, 0] 3.0
2016-05-04 08:58:20 [1, 1, 3, 9] 3.0
Цель:
value
datetimeindex
2016-05-04 08:53:20 1
2016-05-04 08:53:21 2
2016-05-04 08:53:22 1
2016-05-04 08:53:23 9
2016-05-04 08:55:00 2
2016-05-04 08:55:01 2
2016-05-04 08:55:02 3
2016-05-04 08:55:03 0
2016-05-04 08:56:40 1
2016-05-04 08:56:41 3
2016-05-04 08:56:42 3
2016-05-04 08:56:43 0
2016-05-04 08:58:20 1
2016-05-04 08:58:21 1
2016-05-04 08:58:22 3
2016-05-04 08:58:23 9
Имейте в виду, что это означает, что для каждого элемента требуется не только 1 секунда, это было сделано только для упрощения примера. Вместо этого это примерно 4 элемента в последовательности, которые имеют заданную продолжительность, например, 3,0 секунды (которая также может варьироваться от строки к строке), и где первый элемент каждой последовательности всегда начинается в «время 0», что означает, что секунды для каждого элемента следует рассчитывать как [3,0 se c / (4-1) items] = 1 se c.
####
Контекст:
В этом примере показано преобразование в Datetimeindex, поскольку это делает его подходящим для Season_decompose (), см. https://www.machinelearningplus.com/time-series/time-series-analysis-python/ первое попадание при поиске.
Здесь результирующий df выглядит так:
df_test2 = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv', parse_dates=['date'], index_col='date')
Out:
value
date
1991-07-01 3.526591
1991-08-01 3.180891
1991-09-01 3.252221
1991-10-01 3.611003
1991-11-01 3.565869
...
2008-02-01 21.654285
2008-03-01 18.264945
2008-04-01 23.107677
2008-05-01 22.912510
2008-06-01 19.431740
[204 rows x 1 columns]
И тогда легко применить seaonal_decompose () -> Аддитивное разложение:
result_add = seasonal_decompose(df_test2['value'], model='additive', extrapolate_trend='freq')
График:
plt.rcParams.update({'figure.figsize': (5,5)})
result_add.plot().suptitle('Additive Decompose', fontsize=22)
plt.show()
введите описание изображения здесь
Теперь то же самое необходимо для df_test выше.