Функция прогнозирования временных рядов для каждой категории столбца (групповое в пандах) - PullRequest
0 голосов
/ 02 октября 2019

У меня есть датафрейм, как показано ниже. который является журналом аварий двух секторов за первые пять дней августа.

Sector   RaisedDate       
SE1      01-Aug-2019              
SE2      02-Aug-2019               
SE2      03-Aug-2019            
SE1      01-Aug-2019               
SE2      01-Aug-2019              
SE1      03-Aug-2019               
SE1      01-Aug-2019               
SE2      04-Aug-2019              
SE2      05-Aug-2019             
SE1      03-Aug-2019              
SE1      04-Aug-2019              
SE2      05-Aug-2019              
SE1      05-Aug-2019             
SE1      03-Aug-2019              
SE2      04-Aug-2019              
SE1      02-Aug-2019         
SE1      03-Aug-2019           
SE1      04-Aug-2019      
SE2      05-Aug-2019               
SE1      05-Aug-2019            
SE1      05-Aug-2019               

С этого первого я хотел бы создать функцию, которая будет подмножествать данные по секторам и прогнозировать число аварий в следующие три дня. используя экспоненциальное взвешенное скользящее среднее или метод ARIMA.

параметр функции может быть в виде кадра данных, как показано выше, и списка секторов. например, только SE1 в этом случае.

def forecast_accidents(df, var):

sectors = ['SE1']
for var in sectors:
    def forecast_accidents(data, var)

Ожидаемый результат: (поскольку он предназначен только для SE1)

SE1:
Date            Number_of_Accidents          Forecasted_by_EWMA                     By_ARIMA
01-Aug-2019     4                            
02-Aug-2019     1
03-Aug-2019     3
04-Aug-2019     2
05-Aug-2019     3
06-Aug-2019                                  3                                     2
07-Aug-2019                                  8                                     6
08-Aug-2019                                  4                                     3

Обратите внимание, что число, указанное выше, не относится к реальной EWMAили алгоритмы ARIMA.

Точно так же, если я хотел бы прогнозировать SE2, функция должна предоставить прогнозируемое число SE2, если мы передадим сектор = ['SE2'].

Я очень новичок ввременные ряды и питон.

Я попробовал следующий код.

SE1 = df[df['Sector'] == 'SE1']
se1daily_count = SE17.groupby([
    'Sector',
    pd.Grouper(key='RaisedDate', freq='1D')
]). Sector.size()
se1 = pd.DataFrame(se1daily_count)
se1.rename({'Sector':'No_of_Issues'}, axis=1, inplace=True)
se1 = se1.droplevel(0, axis=0)
se1.drop('RaisedDate', axis=1, inplace=True)
timeseries = se1['No_of_Issues']

se1['EWMA3'] = se1['No_of_Issues'].ewm(span=3).mean()

Но приведенный выше код не работал. то, что я пробовал, сначала с разбивкой по секторам, затем подсчитал количество несчастных случаев и затем попробовал EWMA.

...