Класс Variance

Класс Variance применяется в агрегации и аннотации QuerySet для вычисления дисперсии числовых значений поля. Дисперсия показывает, насколько сильно значения отклоняются от среднего арифметического. Класс принимает выражение для агрегации и возвращает объект, который можно использовать с методами aggregate и annotate. По умолчанию вычисляется дисперсия выборки, но можно указать вычисление дисперсии генеральной совокупности с помощью параметра sample=False.

Синтаксис

pythonVariance(expression, sample=True, **extra)

Параметры:

Пример . С агрегацией

Рассмотрим модель Article с полем rating и вычислим дисперсию рейтингов всех статей:

pythonfrom django.db.models import Variance
from myapp.models import Article

res = Article.objects.aggregate(rating_variance=Variance('rating'))
print(res)

Результат выполнения кода:

python{"rating_variance": 2.5}

Пример . С аннотацией

Аннотируем каждую категорию значением дисперсии рейтингов статей в ней:

pythonfrom django.db.models import Variance
from myapp.models import Category

categories = Category.objects.annotate(rating_variance=Variance('articles__rating'))
for category in categories:
  print(category.name, category.rating_variance)

Результат выполнения кода:

python"Technology 0.8"
"Science 1.2"

Пример . С дисперсией генеральной совокупности

Вычислим дисперсию для всей генеральной совокупности, установив параметр sample=False:

pythonfrom django.db.models import Variance
from myapp.models import Article

res = Article.objects.aggregate(
  population_variance=Variance('rating', sample=False)
)
print(res)

Результат выполнения кода:

python{"population_variance": 2.0}

Пример . С фильтрацией

Вычислим дисперсию рейтингов только для опубликованных статей:

pythonfrom django.db.models import Variance, Q
from myapp.models import Article

res = Article.objects.filter(
  Q(status='published')
).aggregate(published_variance=Variance('rating'))
print(res)

Результат выполнения кода:

python{"published_variance": 1.8}

Смотрите также

  • класс StdDev,
    который вычисляет стандартное отклонение значений
  • класс Avg,
    который вычисляет среднее арифметическое значений
  • класс Sum,
    который вычисляет сумму значений
  • класс Count,
    который подсчитывает количество объектов