У меня есть датафрейм, как показано ниже. который является журналом аварий двух секторов за первые пять дней августа.
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.