Я делаю анализ временных рядов акций Microsoft с использованием данных, полученных из Quandl. Я хочу построить цены закрытия против скользящих средних. Когда я строю скользящие средние, они не доходят до правой части графика.
Я считаю, что наличие разрыва имеет смысл (например, 200-дневная скользящая средняя не может начаться до дня 200), но я обеспокоен тем, что разрыв находится справа. Это означает, что оно начинается с самой последней даты (что имеет некоторый смысл, поскольку самая последняя дата является первой во временном ряду), что, очевидно, не является правильным способом сделать это.
Я мог бы просто повернуть вспять серию (новый фрейм данных по возрастанию, а не по убыванию), но я полагаю, что тогда он также построит график, начиная с самой последней даты, что, очевидно, неприемлемо.
#calculate moving averages for Microsoft
roll100 = MSFT_data['Adj. Close'].rolling(100).mean()
roll200 = MSFT_data['Adj. Close'].rolling(200).mean()
roll50 = MSFT_data['Adj. Close'].rolling(50).mean()
roll10 = MSFT_data['Adj. Close'].rolling(10).mean()
roll200.plot(label = '200 Day Moving Average')
roll50.plot(label = '50 Day Moving Average')
roll100.plot(label = '100 Day Moving Average')
MSFT_data['Adj. Close'].plot(label = 'MSFT Closing Price', color = 'blue')
plt.legend(loc = 'upper left')
Поскольку скользящие средние всегда должны рассчитываться, начиная с самой ранней даты, я предполагаю, что мне не хватает простой команды для этого.
Обновление: было предложено, чтобы я сделал скользящие средние частью исходного фрейма данных (я предполагаю, что они были связаны с индексом даты), но у меня был тот же результат:
MSFT_data['roll100'] = MSFT_data['Adj. Close'].rolling(100).mean()
MSFT_data['roll200'] = MSFT_data['Adj. Close'].rolling(200).mean()
MSFT_data['roll50'] = MSFT_data['Adj. Close'].rolling(50).mean()
MSFT_data['roll10'] = MSFT_data['Adj. Close'].rolling(10).mean()
#plot Microsoft Price along with moving averages
fig = plt.figure()
fig.set_figheight(8)
fig.set_figwidth(10)
MSFT_data['roll200'].plot(label = '200 Day Moving Average')
MSFT_data['roll50'].plot(label = '50 Day Moving Average')
MSFT_data['roll100'].plot(label = '100 Day Moving Average')
MSFT_data['Adj. Close'].plot(label = 'MSFT Closing Price', color = 'blue')
plt.legend(loc = 'upper left')
Также, если я проверю столбец, например, с помощью:
MSFT_data['roll10'].head(12)
Date
2017-12-29 NaN
2017-12-28 NaN
2017-12-27 NaN
2017-12-26 NaN
2017-12-22 NaN
2017-12-21 NaN
2017-12-20 NaN
2017-12-19 NaN
2017-12-18 NaN
2017-12-15 85.796
2017-12-14 85.711
2017-12-13 85.674
Name: roll10, dtype: float64
Я вижу, что 9 самых последних значений - NaN. И наоборот, если я создаю новый фрейм данных и пытаюсь переиндексировать по возрастанию, мои последние 9 значений в хвосте равны NaN.