#python
Вопрос:
У меня есть много различных временных рядов, которые являются сезонными и включают большие выбросы.
При использовании текущей средней для извлечения тренда (как в реализации STL) это может привести к повреждению извлеченного тренда и сезонной составляющей и появлению ложных выбросов в остатках.
Один из способов борьбы с этим-извлечь тренд, используя вместо этого скользящую медиану, есть ли какой-либо пакет python, который делает это аналогично decmedian (https://rdrr.io/cran/pastecs/man/decmedian.html) в R?
Другим решением может быть попытка перевести приведенный ниже фрагмент кода на Python, но я не уверен, как перевести эту xts
часть.
decompose.median <- function(m, period) {
trend <- rollapply(m, width = period, fill = NA, align = "center",
FUN = median, na.rm = TRUE)
season <- m - trend
figure <- numeric(period)
l <- length(m)
index <- seq.int(1, l, by = period) - 1
for (i in 1:period) figure[i] <- median(season[index i], na.rm = TRUE)
seasonal=xts(rep(figure, l %/% period 1)[seq_len(l)], order.by = index(m))
list(observed = m,
trend = trend,
seasonal = seasonal,
remainder = m - trend - seasonal)
}
Попробуйте Python
def decompose_median(df,col,period):
m = df[col]
trend = df[col].rolling(period).median()
season = m - trend
figure = np.zeros(period)
l = len(m)
index = np.array(range(1,100,10)) - 1
for i in range(1,period):
figure[i] = np.median(season.dropna()[index i])
#### Not sure how to translate this part
seasonal=xts(rep(figure, l %/% period 1)[seq_len(l)], order.by =
index(m))
list(observed = m,
trend = trend,
seasonal = seasonal,
remainder = m - trend - seasonal)
}