Документация Python неофициальный перевод
Содержание страницы

9.7. statistics – Функции математической статистикиstatistics – Mathematical statistics functions

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

Исходный код: Lib/statistics.py


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

Примечание

Если не указано иное, эти функции поддерживают int, float, decimal.Decimal и fractions.Fraction. Поведение с другими типами (будь то в числовой иерархии или нет) в настоящее время не поддерживается. Смешанные типы также не определены и зависят от реализации. Если ваши входные данные состоят из смешанных типов, вы можете использовать map() для получения согласованного результата, например map(float, input_data).

9.7.1. Средние значения и меры центральной тенденцииAverages and measures of central location

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

mean() Среднее арифметическое (среднее) данных.
median() Медиана (среднее значение) данных.
median_low() Нижняя медиана данных.
median_high() Верхняя медиана данных.
median_grouped() Медиана (или 50-й процентиль) сгруппированных данных.
mode() Мода (наиболее часто встречающееся значение) дискретных данных.

9.7.2. Меры разбросаMeasures of spread

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

pstdev() Стандартное отклонение генеральной совокупности данных.
pvariance() Дисперсия генеральной совокупности данных.
stdev() Стандартное отклонение выборки данных.
variance() Дисперсия выборки данных.

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

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

statistics.mean(data)

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

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

Если data пуст, возбуждается StatisticsError.

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

>>> 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() и mode(). (В данном случае «эффективность» относится к статистической эффективности, а не к вычислительной.)

Выборочное среднее дает несмещенную оценку истинного среднего генеральной совокупности, что означает, что в среднем по всем возможным выборкам mean(sample) сходится к истинному среднему всей совокупности. Если data представляет всю совокупность, а не выборку, то mean(data) эквивалентно вычислению истинного среднего генеральной совокупности μ.

statistics.median(data)

Возвращает медиану (среднее значение) числовых данных, используя распространенный метод «среднее двух средних». Если data пуст, возбуждается StatisticsError.

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

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

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

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

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

statistics.median_low(data)

Возвращает нижнюю медиану числовых данных. Если data пуст, возбуждается StatisticsError.

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

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

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

statistics.median_high(data)

Возвращает верхнюю медиану данных. Если data пуст, возбуждается StatisticsError.

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

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

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

statistics.median_grouped(data, interval=1)

Возвращает медиану сгруппированных непрерывных данных, вычисляемую как 50-й процентиль с использованием интерполяции. Если data пуст, возбуждается StatisticsError.

>>> 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, и для его оценки используется интерполяция:

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

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

>>> 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() может приводить точки данных к числам с плавающей запятой. Это поведение, вероятно, изменится в будущем.

См. также

  • «Статистика для поведенческих наук», Фредерик Дж. Граветтер и Ларри Б. Уоллнау (8-е издание).
  • Вычисление медианы.
  • Функция SSMEDIAN в электронной таблице Gnome Gnumeric, включая это обсуждение.
statistics.mode(data)

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

Если data пуст или если нет ровно одного наиболее часто встречающегося значения, возбуждается StatisticsError.

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

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

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

>>> mode(["red", "blue", "blue", "red", "green", "red", "red"])
'red'
statistics.pstdev(data, mu=None)

Возвращает стандартное отклонение генеральной совокупности (квадратный корень из дисперсии генеральной совокупности). См. pvariance(), где описаны аргументы и другие подробности.

>>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
0.986893273527251
statistics.pvariance(data, mu=None)

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

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

Используйте эту функцию для расчета дисперсии по всей генеральной совокупности. Для оценки дисперсии по выборке обычно лучше подходит функция variance().

Вызывает StatisticsError, если data пуст.

Примеры:

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

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

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

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

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

>>> 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(), где описаны аргументы и другие подробности.

>>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
1.0810874155219827
statistics.variance(data, xbar=None)

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

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

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

Вызывает StatisticsError, если data содержит менее двух значений.

Примеры:

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

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

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

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

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

>>> 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() в качестве параметра mu, чтобы получить дисперсию выборки.

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

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

exception statistics.StatisticsError

Подкласс ValueError для исключений, связанных со статистикой.