Содержание страницы
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
Эти функции вычисляют среднее или типичное значение из генеральной совокупности или выборки.
Среднее арифметическое (среднее) данных. |
|
Среднее гармоническое данных. |
|
Медиана (среднее значение) данных. |
|
Нижняя медиана данных. |
|
Верхняя медиана данных. |
|
Медиана (или 50-й процентиль) сгруппированных данных. |
|
Мода (наиболее часто встречающееся значение) дискретных данных. |
9.7.2. Меры разброса¶Measures of spread
Эти функции вычисляют меру того, насколько генеральная совокупность или выборка склонны отклоняться от типичных или средних значений.
Стандартное отклонение генеральной совокупности данных. |
|
Дисперсия генеральной совокупности данных. |
|
Стандартное отклонение выборки данных. |
|
Дисперсия выборки данных. |
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)сходится к истинному среднему всей совокупности. Если данные представляют всю генеральную совокупность, а не выборку, то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, чтобы получить дисперсию выборки.
9.7.4. Исключения¶Exceptions
Определено одно исключение:
-
exception
statistics.StatisticsError¶ Подкласс
ValueErrorдля исключений, связанных со статистикой.