53

I am trying to build a ARIMA for anomaly detection. I need to find the moving average of the time series graph I am trying to use pandas 0.23 for this

import pandas as pd
import numpy as np
from statsmodels.tsa.stattools import adfuller
import matplotlib.pylab as plt
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 15, 6

dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m')
data = pd.read_csv('AirPassengers.csv', parse_dates=['Month'], index_col='Month',date_parser=dateparse)

data.index
ts = data['#Passengers']
ts.head(10)

plt.plot(ts)
ts_log = np.log(ts)
plt.plot(ts_log)
moving_avg = pd.rolling_mean(ts_log,12)  # here is the error

pd.rolling_mean  
plt.plot(ts_log)
plt.plot(moving_avg, color='red') 

error:Traceback (most recent call last): File "C:\Program Files\Python36\lastmainprogram.py", line 74, in moving_avg = pd.rolling_mean(ts_log,12) AttributeError: module 'pandas' has no attribute 'rolling_mean'

cs95
  • 379,657
  • 97
  • 704
  • 746
Pruce Uchiha
  • 543
  • 1
  • 4
  • 7
  • 1
    This command is deprecated since 0.18, I think. Use the rolling operation https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rolling.html – Avision May 23 '18 at 08:34

3 Answers3

119

I believe need change:

moving_avg = pd.rolling_mean(ts_log,12)

to:

moving_avg = ts_log.rolling(12).mean()

because old pandas version code below pandas 0.18.0

jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
  • moving_avg = timeseries["#Passengers"].rolling(window=12).mean() here the dataframe timeseries has index as date, and column name #Passengers has the count for passengers in corresponding dates – Sourav Saha Aug 27 '20 at 05:48
14

Change:

moving_avg = pd.rolling_mean(ts_log,12)

to:

rolmean = pd.Series(timeseries).rolling(window=12).mean()

rolstd = pd.Series(timeseries).rolling(window=12).std()
Dharman
  • 30,962
  • 25
  • 85
  • 135
0

You will need this in your detection so you can add.

moving_std = ts_log.rolling(12).std()