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

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

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

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


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

Примечание

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

Средние значения и меры центрального положенияAverages and measures of central location

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

mean()

Среднее арифметическое (среднее) данных.

harmonic_mean()

Среднее гармоническое данных.

median()

Медиана (среднее значение) данных.

median_low()

Нижняя медиана данных.

median_high()

Верхняя медиана данных.

median_grouped()

Медиана (или 50-й процентиль) сгруппированных данных.

mode()

Мода (наиболее часто встречающееся значение) дискретных данных.

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

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

pstdev()

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

pvariance()

Дисперсия генеральной совокупности данных.

stdev()

Стандартное отклонение выборки данных.

variance()

Дисперсия выборки данных.

Подробности функции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) сходится к истинному среднему всей совокупности. Если данные представляют всю генеральную совокупность, а не выборку, то mean(data) эквивалентно вычислению истинного среднего генеральной совокупности μ.

statistics.harmonic_mean(data)

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

Гармоническое среднее, иногда называемое субконтрарным средним, – это обратная величина арифметического mean() обратных величин данных. Например, гармоническое среднее трёх значений a, b и c будет эквивалентно 3/(1/a + 1/b + 1/c).

Гармоническое среднее – это тип среднего, мера центральной тенденции данных. Его часто уместно использовать при усреднении величин, которые являются темпами или отношениями, например, скоростей. Например:

Предположим, инвестор покупает одинаковую стоимость акций в каждой из трёх компаний с коэффициентами P/E (цена/прибыль) 2.5, 3 и 10. Каково среднее значение P/E для портфеля инвестора?

>>> harmonic_mean([2.5, 3, 10])  # Для портфеля с равным распределением инвестиций.
3.6

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

StatisticsError возникает, если данные пусты или любой элемент меньше нуля.

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

statistics.median(data)

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

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

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

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

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

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

Если данные являются порядковыми (поддерживают операции сравнения), но не числовыми (не поддерживают сложение), следует использовать median_low() или median_high() вместо этого.

statistics.median_low(data)

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

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

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

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

statistics.median_high(data)

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

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

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

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

statistics.median_grouped(data, interval=1)

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

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

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

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

Возбуждает StatisticsError, если данные пусты.

Примеры:

>>> 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 = [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, чтобы получить дисперсию выборки.

ИсключенияExceptions

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

exception statistics.StatisticsError

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