> **Источник:** https://python-all.ru/3.5/library/statistics.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 9.7. [`statistics`](https://python-all.ru/3.5/library/statistics.html#module-statistics) – Функции математической статистики

Новое в версии 3.4.

**Исходный код:** [Lib/statistics.py](https://python-all.ru/src/3.5/Lib/statistics.py)

---

Этот модуль предоставляет функции для вычисления математической статистики числовых данных (со значениями `Real`).

> **Примечание**
>
> Если явно не указано иное, эти функции поддерживают [`int`](https://python-all.ru/3.5/library/functions.html#int), [`float`](https://python-all.ru/3.5/library/functions.html#float), [`decimal.Decimal`](https://python-all.ru/3.5/library/decimal.html#decimal.Decimal) и [`fractions.Fraction`](https://python-all.ru/3.5/library/fractions.html#fractions.Fraction). Поведение с другими типами (независимо от их наличия в числовой иерархии) в настоящее время не поддерживается. Смешанные типы также не определены и зависят от реализации. Если входные данные состоят из смешанных типов, для получения согласованного результата можно использовать [`map()`](https://python-all.ru/3.5/library/functions.html#map), например `map(float, input_data)`.

## 9.7.1. Средние значения и меры центральной тенденции

Эти функции вычисляют среднее или типичное значение из генеральной совокупности или выборки.

| [`mean()`](https://python-all.ru/3.5/library/statistics.html#statistics.mean) | Среднее арифметическое (среднее) данных. |
| --- | --- |
| [`median()`](https://python-all.ru/3.5/library/statistics.html#statistics.median) | Медиана (среднее значение) данных. |
| [`median_low()`](https://python-all.ru/3.5/library/statistics.html#statistics.median_low) | Нижняя медиана данных. |
| [`median_high()`](https://python-all.ru/3.5/library/statistics.html#statistics.median_high) | Верхняя медиана данных. |
| [`median_grouped()`](https://python-all.ru/3.5/library/statistics.html#statistics.median_grouped) | Медиана (или 50-й процентиль) сгруппированных данных. |
| [`mode()`](https://python-all.ru/3.5/library/statistics.html#statistics.mode) | Мода (наиболее часто встречающееся значение) дискретных данных. |

## 9.7.2. Меры разброса

Эти функции вычисляют меру того, насколько генеральная совокупность или выборка склонны отклоняться от типичных или средних значений.

| [`pstdev()`](https://python-all.ru/3.5/library/statistics.html#statistics.pstdev) | Стандартное отклонение генеральной совокупности данных. |
| --- | --- |
| [`pvariance()`](https://python-all.ru/3.5/library/statistics.html#statistics.pvariance) | Дисперсия генеральной совокупности данных. |
| [`stdev()`](https://python-all.ru/3.5/library/statistics.html#statistics.stdev) | Стандартное отклонение выборки данных. |
| [`variance()`](https://python-all.ru/3.5/library/statistics.html#statistics.variance) | Дисперсия выборки данных. |

## 9.7.3. Описание функций

Примечание: функции не требуют, чтобы переданные им данные были отсортированы. Однако для удобства чтения в большинстве примеров показаны отсортированные последовательности.

#### `statistics.mean(data)`

Возвращает выборочное среднее арифметическое *данных* – последовательности или итератора вещественных чисел.

Среднее арифметическое – это сумма данных, делённая на количество точек данных. Его часто называют «средним значением», хотя это лишь одна из многих различных математических средних. Это мера центрального положения данных.

Если *data* пуст, будет возбуждено [`StatisticsError`](https://python-all.ru/3.5/library/statistics.html#statistics.StatisticsError).

Некоторые примеры использования:

```pycon
>>> mean([1, 2, 3, 4, 4])
2.8
>>> mean([-1.0, 2.5, 3.25, 5.75])
2.625

>>> from fractions import Fraction as F
>>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)])
Fraction(13, 21)

>>> from decimal import Decimal as D
>>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")])
Decimal('0.5625')
```

> **Примечание**
>
> Среднее сильно подвержено влиянию выбросов и не является устойчивой оценкой центральной тенденции: среднее не обязательно является типичным примером точек данных. Для более устойчивых, хотя и менее эффективных, мер центральной тенденции см. [`median()`](https://python-all.ru/3.5/library/statistics.html#statistics.median) и [`mode()`](https://python-all.ru/3.5/library/statistics.html#statistics.mode). (В данном случае «эффективный» относится к статистической эффективности, а не к вычислительной.)
>
> Выборочное среднее даёт несмещённую оценку истинного среднего генеральной совокупности, что означает, что в среднем по всем возможным выборкам `mean(sample)` сходится к истинному среднему всей совокупности. Если *данные* представляют всю генеральную совокупность, а не выборку, то `mean(data)` эквивалентно вычислению истинного среднего генеральной совокупности μ.

#### `statistics.median(data)`

Возвращает медиану (среднее значение) числовых данных, используя стандартный метод «среднее двух центральных значений». Если *данные* пусто, возбуждается [`StatisticsError`](https://python-all.ru/3.5/library/statistics.html#statistics.StatisticsError).

Медиана – это устойчивая мера центральной тенденции, и на неё меньше влияет наличие выбросов в данных. Когда количество точек данных нечётно, возвращается средняя точка данных:

```pycon
>>> median([1, 3, 5])
3
```

Если количество точек данных чётное, медиана интерполируется как среднее двух средних значений:

```pycon
>>> median([1, 3, 5, 7])
4.0
```

Это подходит для дискретных данных, когда допустимо, что медиана может не быть фактической точкой данных.

> **См. также**
>
> [`median_low()`](https://python-all.ru/3.5/library/statistics.html#statistics.median_low), [`median_high()`](https://python-all.ru/3.5/library/statistics.html#statistics.median_high), [`median_grouped()`](https://python-all.ru/3.5/library/statistics.html#statistics.median_grouped)

#### `statistics.median_low(data)`

Возвращает нижнюю медиану числовых данных. Если *данные* пусто, возбуждается [`StatisticsError`](https://python-all.ru/3.5/library/statistics.html#statistics.StatisticsError).

Нижняя медиана всегда является элементом набора данных. При нечётном количестве точек возвращается среднее значение. При чётном – возвращается меньшее из двух средних значений.

```pycon
>>> median_low([1, 3, 5])
3
>>> median_low([1, 3, 5, 7])
3
```

Используйте нижнюю медиану, когда данные дискретны и вы предпочитаете, чтобы медиана была фактической точкой данных, а не интерполированной.

#### `statistics.median_high(data)`

Возвращает верхнюю медиану данных. Если *данные* пусто, [`StatisticsError`](https://python-all.ru/3.5/library/statistics.html#statistics.StatisticsError) возбуждается.

Верхняя медиана всегда является элементом набора данных. При нечётном количестве точек возвращается среднее значение. При чётном – возвращается большее из двух средних значений.

```pycon
>>> median_high([1, 3, 5])
3
>>> median_high([1, 3, 5, 7])
5
```

Используйте верхнюю медиану, когда данные дискретны и вы предпочитаете, чтобы медиана была фактической точкой данных, а не интерполированной.

#### `statistics.median_grouped(data, interval=1)`

Возвращает медиану сгруппированных непрерывных данных, вычисленную как 50-й процентиль, с использованием интерполяции. Если *данные* пусто, [`StatisticsError`](https://python-all.ru/3.5/library/statistics.html#statistics.StatisticsError) возбуждается.

```pycon
>>> median_grouped([52, 52, 53, 54])
52.5
```

В следующем примере данные округлены, так что каждое значение представляет середину интервала данных: например, 1 – середина интервала 0.5–1.5, 2 – середина 1.5–2.5, 3 – середина 2.5–3.5 и т.д. Для данных, приведённых ниже, медианное значение попадает в интервал 3.5–4.5, и для его оценки используется интерполяция:

```pycon
>>> median_grouped([1, 2, 2, 3, 4, 4, 4, 4, 4, 5])
3.7
```

Необязательный аргумент *interval* задаёт ширину интервала; по умолчанию равен 1. Изменение ширины интервала, естественно, повлияет на интерполяцию:

```pycon
>>> median_grouped([1, 3, 3, 5, 7], interval=1)
3.25
>>> median_grouped([1, 3, 3, 5, 7], interval=2)
3.5
```

Эта функция не проверяет, что точки данных отстоят друг от друга хотя бы на величину *interval*.

**Особенность реализации CPython:** В некоторых случаях [`median_grouped()`](https://python-all.ru/3.5/library/statistics.html#statistics.median_grouped) может приводить точки данных к числам с плавающей запятой. Это поведение может измениться в будущем.

> **См. также**
>
> - «Статистика для поведенческих наук», Фредерик Дж. Граветтер и Ларри Б. Уоллнау (8-е издание).
> - Вычисление [медианы](https://python-all.ru/3.5/library/statistics.html).
> - Функция [SSMEDIAN](https://python-all.ru/3.5/library/statistics.html) в электронной таблице Gnome Gnumeric, включая [это обсуждение](https://python-all.ru/3.5/library/statistics.html).

#### `statistics.mode(data)`

Возвращает наиболее часто встречающуюся точку данных из дискретных или номинальных *данных*. Мода (когда она существует) – это наиболее типичное значение, и она является устойчивой мерой центральной тенденции.

Если *данные* пусты или если нет ровно одного наиболее часто встречающегося значения, возбуждается [`StatisticsError`](https://python-all.ru/3.5/library/statistics.html#statistics.StatisticsError).

`mode` предполагает дискретные данные и возвращает одно значение. Это стандартная трактовка моды, обычно преподаваемая в школах:

```pycon
>>> mode([1, 1, 2, 3, 3, 3, 3, 4])
3
```

Мода уникальна тем, что это единственная статистика, которая также применима к номинальным (нечисловым) данным:

```pycon
>>> mode(["red", "blue", "blue", "red", "green", "red", "red"])
'red'
```

#### `statistics.pstdev(data, mu=None)`

Возвращает стандартное отклонение генеральной совокупности (квадратный корень из дисперсии генеральной совокупности). См. [`pvariance()`](https://python-all.ru/3.5/library/statistics.html#statistics.pvariance) для получения аргументов и других подробностей.

```pycon
>>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
0.986893273527251
```

#### `statistics.pvariance(data, mu=None)`

Возвращает дисперсию генеральной совокупности *данных*, непустого итерабельного объекта, содержащего вещественные числа. Дисперсия, или второй центральный момент, является мерой изменчивости (разброса или рассеяния) данных. Большая дисперсия указывает на то, что данные разбросаны; малая дисперсия указывает на то, что они сгруппированы близко к среднему.

Если указан необязательный второй аргумент *mu*, он должен быть средним *данных*. Если он отсутствует или равен `None` (значение по умолчанию), среднее вычисляется автоматически.

Используйте эту функцию для расчёта дисперсии по всей генеральной совокупности. Для оценки дисперсии по выборке обычно лучше подходит функция [`variance()`](https://python-all.ru/3.5/library/statistics.html#statistics.variance).

Возбуждает [`StatisticsError`](https://python-all.ru/3.5/library/statistics.html#statistics.StatisticsError), если *данные* пусты.

Примеры:

```pycon
>>> data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25]
>>> pvariance(data)
1.25
```

Если вы уже вычислили среднее своих данных, вы можете передать его в качестве необязательного второго аргумента *mu*, чтобы избежать повторного вычисления:

```pycon
>>> mu = mean(data)
>>> pvariance(data, mu)
1.25
```

Эта функция не проверяет, что вы передали действительное среднее в качестве *mu*. Использование произвольных значений для *mu* может привести к недопустимым или невозможным результатам.

Поддерживаются типы Decimal и Fraction:

```pycon
>>> from decimal import Decimal as D
>>> pvariance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])
Decimal('24.815')

>>> from fractions import Fraction as F
>>> pvariance([F(1, 4), F(5, 4), F(1, 2)])
Fraction(13, 72)
```

> **Примечание**
>
> При вызове для всей генеральной совокупности получается дисперсия генеральной совокупности σ². При вызове для выборки получается смещённая выборочная дисперсия s², также известная как дисперсия с N степенями свободы.
>
> Если вы каким-то образом знаете истинное среднее генеральной совокупности μ, вы можете использовать эту функцию для вычисления дисперсии выборки, передав известное среднее совокупности в качестве второго аргумента. При условии, что точки данных являются репрезентативными (например, независимы и одинаково распределены), результат будет несмещённой оценкой дисперсии генеральной совокупности.

#### `statistics.stdev(data, xbar=None)`

Возвращает выборочное стандартное отклонение (квадратный корень из выборочной дисперсии). См. [`variance()`](https://python-all.ru/3.5/library/statistics.html#statistics.variance) для получения аргументов и других подробностей.

```pycon
>>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
1.0810874155219827
```

#### `statistics.variance(data, xbar=None)`

Возвращает выборочную дисперсию для *данных* – итерации, содержащей не менее двух вещественных чисел. Дисперсия (второй центральный момент) – это мера изменчивости (разброса или рассеяния) данных. Большая дисперсия указывает на то, что данные разбросаны; малая – что они сгруппированы близко к среднему.

Если указан необязательный второй аргумент *xbar*, он должен быть средним *data*. Если он отсутствует или равен `None` (по умолчанию), среднее вычисляется автоматически.

Используйте эту функцию, когда ваши данные являются выборкой из генеральной совокупности. Для расчёта дисперсии по всей совокупности см. [`pvariance()`](https://python-all.ru/3.5/library/statistics.html#statistics.pvariance).

Возбуждает [`StatisticsError`](https://python-all.ru/3.5/library/statistics.html#statistics.StatisticsError), если в *данных* меньше двух значений.

Примеры:

```pycon
>>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
>>> variance(data)
1.3720238095238095
```

Если среднее данных уже вычислено, его можно передать в качестве необязательного второго аргумента *xbar*, чтобы избежать повторного вычисления:

```pycon
>>> m = mean(data)
>>> variance(data, m)
1.3720238095238095
```

Эта функция не проверяет, было ли передано истинное среднее в качестве *xbar*. Использование произвольных значений для *xbar* может привести к неверным или невозможным результатам.

Поддерживаются значения Decimal и Fraction:

```pycon
>>> from decimal import Decimal as D
>>> variance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])
Decimal('31.01875')

>>> from fractions import Fraction as F
>>> variance([F(1, 6), F(1, 2), F(5, 3)])
Fraction(67, 108)
```

> **Примечание**
>
> Это выборочная дисперсия s² с поправкой Бесселя, также известная как дисперсия с N-1 степенями свободы. При условии, что точки данных репрезентативны (например, независимы и одинаково распределены), результат должен быть несмещенной оценкой истинной дисперсии генеральной совокупности.
>
> Если каким-либо образом известно истинное среднее генеральной совокупности μ, его следует передать в функцию [`pvariance()`](https://python-all.ru/3.5/library/statistics.html#statistics.pvariance) в качестве параметра *mu*, чтобы получить дисперсию выборки.

## 9.7.4. Исключения

Определено одно исключение:

#### `exception statistics.StatisticsError`

Подкласс [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError) для исключений, связанных со статистикой.
