#python #pandas #time-series
#python #pandas #временные ряды
Вопрос:
У меня есть данные длинного временного ряда. Но давайте просто используем минимальный пример здесь, с 10 случайными числами в качестве моего набора данных временных рядов.
In [60]: from numpy.random import RandomState
In [61]: prng = RandomState(32)
In [62]: series = pd.Series(prng.random(10))
In [63]: series
Out[63]:
0 0.858889
1 0.372711
2 0.555129
3 0.955657
4 0.736670
5 0.816205
6 0.101087
7 0.928488
8 0.609109
9 0.596553
dtype: float64
Давайте предположим, что приведенный выше набор данных моего временного ряда не является стационарным.
Чтобы сделать его стационарным, я делаю следующее:
In [64]: series['diff'] = series.diff().diff()
Out[64]:
0 NaN
1 NaN
2 0.668596
3 0.218110
4 -0.619515
5 0.298522
6 -0.794654
7 1.542520
8 -1.146780
9 0.306823
dtype: float64
Теперь я применяю ARIMA
модель для прогнозирования:
arima_model = ARIMA(series['diff'],order=(1,0,0)
results_arima = arima_model.fit(disp=-2)
prediction = results_arima.fittedvalues
Теперь prediction
будет иметь только 8 значений, так как мы сделали два различия. Как мне сделать, чтобы prediction
массив был в том же масштабе, что и мой оригинал series
?
т. Е. prediction
Массив не будет иметь того же «масштаба», что и мой оригинал series
, а также будут отсутствовать первые два значения.
Комментарии:
1. Можете ли вы показать ожидаемый результат?
2.
prediction
Массив не имеет того же масштаба, что и моя оригинальная серия, а также не хватает двух значений. Я хочу вернуть его к тому же масштабу, что и моя оригинальная серия, а также вернуть первые две недостающие точки.3. После двух различий первые два значения станут NaN , какими бы вы хотели, чтобы они были?
4. вы могли бы согласовать прогноз с
series.loc[2:, 'pred'] = prediction
5. отсутствие прогноза для первых значений является всего лишь результатом примененного вами преобразования, обойти это невозможно (т. Е. Вы не можете получить прогноз, если
series['diff'] == NaN
)
Ответ №1:
Проверьте с reindex
news = pd.Series(prediction, index=series.index[series.notna()]).reindex(series.index)