Метод var аксессора expanding
Метод var аксессора expanding применяется к Series или DataFrame и вычисляет расширяющуюся дисперсию. Это означает, что для каждой точки данных вычисляется дисперсия всех предыдущих значений, включая текущее. Метод полезен для анализа волатильности данных в динамике. Основной параметр метода ddof (дельта степеней свободы) позволяет контролировать смещение оценки дисперсии.
Синтаксис
series.expanding().var([ddof])
# или
dataframe.expanding().var([ddof])
Параметр ddof определяет, на сколько уменьшается количество степеней свободы при вычислении дисперсии. По умолчанию ddof=1, что соответствует выборочной дисперсии. Если установить ddof=0, будет вычисляться дисперсия генеральной совокупности.
Пример
Рассмотрим базовый пример вычисления расширяющейся дисперсии для серии данных:
import pandas as pd
ser = pd.Series([1, 2, 3, 4, 5])
res = ser.expanding().var()
print(res)
Результат выполнения кода:
0 NaN
1 0.500000
2 1.000000
3 1.666667
4 2.500000
dtype: float64
Как видно из результата, для первого элемента дисперсия не определена и возвращается NaN. Для второго элемента дисперсия двух значений равна 0.5 и так далее.
Пример
Теперь рассмотрим использование параметра ddof для вычисления дисперсии генеральной совокупности:
import pandas as pd
ser = pd.Series([1, 2, 3, 4, 5])
res = ser.expanding().var(ddof=0)
print(res)
Результат выполнения кода:
0 0.000000
1 0.250000
2 0.666667
3 1.250000
4 2.000000
dtype: float64
В этом случае дисперсия для первого элемента равна 0, так как совокупность состоит из одного значения. Для последующих элементов значения отличаются от предыдущего примера.
Пример
Продемонстрируем работу метода var с DataFrame. В этом случае дисперсия вычисляется для каждого столбца отдельно:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [5, 4, 3, 2, 1]
})
res = df.expanding().var()
print(res)
Результат выполнения кода:
a b
0 NaN NaN
1 0.50 0.500000
2 1.00 1.000000
3 1.50 1.666667
4 2.00 2.500000
В результате каждый столбец содержит свою расширяющуюся дисперсию. Обратите внимание, что для столбца 'b' значения зеркально отражают дисперсию столбца 'a' из-за обратного порядка чисел.
Пример
Рассмотрим ситуацию с пропущенными значениями. По умолчанию метод var игнорирует NaN при вычислении дисперсии на каждом шаге:
import pandas as pd
import numpy as np
ser = pd.Series([1, np.nan, 3, 4, 5])
res = ser.expanding().var()
print(res)
Результат выполнения кода:
0 NaN
1 NaN
2 2.000000
3 2.333333
4 2.500000
dtype: float64
На втором шаге дисперсия не вычисляется из-за наличия пропущенного значения. На третьем шаге дисперсия вычисляется на основе значений 1, 3 и равна 2.0.
Смотрите также
-
метод
meanаксессора expanding,
который вычисляет расширяющееся среднее -
метод
stdаксессора expanding,
который вычисляет расширяющееся стандартное отклонение -
метод
sumаксессора expanding,
который вычисляет расширяющуюся сумму -
метод
countаксессора expanding,
который подсчитывает количество ненулевых элементов