Я хочу найти автокорреляцию ряда чисел с лагом 1,2, ... N
В этом примере у меня есть 56 чисел и N = 20.
Так что яесть файл с первыми 56 столбцами, которые являются случайными числами.От столбца 57 до столбца 77 у меня автокорреляция с лагом 1,2 ... 20.Допустим, я загружаю только в столбце 1-56.В этом примере у меня есть только одна строка, но это также может быть несколько строк.
Таким образом, цель состоит в том, чтобы получить этот результат:
Я сейчас сделал это в Excel, но как я могу сделать это вPython?А также: что если у меня несколько рядов;Как я могу сделать это на нескольких строках?
Я нашел этот код, и это хорошее начало, я думаю.
import numpy
def acf(series):
n = len(series)
data = numpy.asarray(series)
mean = numpy.mean(data)
c0 = numpy.sum((data - mean) ** 2) / float(n)
def r(h):
acf_lag = ((data[:n - h] - mean) * (data[h:] - mean)).sum() / float(n) /
c0
return round(acf_lag, 3)
x = numpy.arange(n) # Avoiding lag 0 calculation
acf_coeffs = map(r, x)
return acf_coeffs
В первой функции указано «n» число чисел;в моем примере это «56», а переменная «data» - это просто первые 56 столбцов.с0 - знаменатель формулы автокорреляции.
Теперь я вижу, что h - это число лагов.Так что в моем примере с 1 по 20. acf_lag - это фактическая формула автокорреляции, так что все выглядит хорошо.
С чем я борюсь, так это то, как я могу написать строку кода, в которой я применяю это к моему фрейму данных, чтобы получить желаемый результат ??
Оценивая каждую помощь!
Обновление:
Я пытался не определять функцию "acf", но объявить все это как отдельную переменную:
n = len(df.columns)-20
data = df.iloc[:,:56]
mean = data.mean(axis=1)
c0 = np.sum((data - mean) ** 2) / float(n)
Может быть, я могу определить r (h) функционировать потом.Но c0 дает мне ноль для каждых 56 столбцов, в то время как он должен извлекать среднее значение из каждого столбца (от 1 до 56).Это не происходит