Класс StdDev
Класс StdDev применяется в агрегирующих запросах Django
для вычисления стандартного отклонения значений указанного
поля. Он используется вместе с методом aggregate
или annotate. Класс принимает название поля модели
в качестве аргумента и возвращает вычисленное значение
стандартного отклонения для всего набора записей или
для каждой группы при использовании с annotate.
Синтаксис
from django.db.models import StdDev
result = Model.objects.aggregate(StdDev('field_name'))
Параметры
Класс StdDev принимает следующие параметры:
-
field- имя числового поля модели, по которому вычисляется стандартное отклонение (обязательный параметр) -
sample- булевый параметр, определяющий, вычислять ли выборочное стандартное отклонение (True) или стандартное отклонение генеральной совокупности (False). По умолчаниюFalse. -
distinct- булевый параметр, указывающий, учитывать ли только уникальные значения поля. По умолчаниюFalse.
Пример . Вычисление стандартного отклонения
Пусть у нас есть модель Product с полем price.
Вычислим стандартное отклонение цен всех товаров:
from django.db.models import StdDev
from myapp.models import Product
result = Product.objects.aggregate(
price_stddev=StdDev('price')
)
print(result)
Результат выполнения кода:
{"price_stddev": 150.75}
Пример . С параметром sample
Вычислим выборочное стандартное отклонение цен товаров:
from django.db.models import StdDev
from myapp.models import Product
result = Product.objects.aggregate(
price_stddev_sample=StdDev('price', sample=True)
)
print(result)
Результат выполнения кода:
{"price_stddev_sample": 160.25}
Пример . С параметром distinct
Вычислим стандартное отклонение уникальных цен товаров:
from django.db.models import StdDev
from myapp.models import Product
result = Product.objects.aggregate(
price_stddev_unique=StdDev('price', distinct=True)
)
print(result)
Результат выполнения кода:
{"price_stddev_unique": 120.50}
Пример . С группировкой
Вычислим стандартное отклонение цен товаров по категориям
с помощью метода annotate:
from django.db.models import StdDev
from myapp.models import Product
products_by_category = Product.objects.values('category').annotate(
price_stddev=StdDev('price')
)
for item in products_by_category:
print(item)
Результат выполнения кода:
{"category": "Electronics", "price_stddev": 200.00}
{"category": "Books", "price_stddev": 15.50}
Пример . С фильтрацией
Вычислим стандартное отклонение цен только для товаров с ценой больше 1000:
from django.db.models import StdDev
from myapp.models import Product
result = Product.objects.filter(price__gt=1000).aggregate(
price_stddev=StdDev('price')
)
print(result)
Результат выполнения кода:
{"price_stddev": 250.75}