statistics — Функции математической статистики
Новая в версии 3.4.
Исходный код: Lib/statistics.py
Этот модуль предоставляет функции для вычисления математической статистики числовых (Real-значных) данных.
Примечание
Если не указано иное, эти функции поддерживают int, float, decimal.Decimal и fractions.Fraction. Поведение с другими типами (как в числовой иерархии, так и вне её) в настоящее время не поддерживается. Смешанные типы также не определены и зависят от реализации. Если ваши входные данные состоят из смешанных типов, вы можете использовать map() для обеспечения согласованного результата, например, map(float, input_data).
9.7.1. Средние значения и меры центральной тенденции
Эти функции вычисляют среднее или типичное значение из генеральной совокупности или выборки.
Среднее арифметическое (“среднее”) данных. | |
Гармоническое среднее данных. | |
Медиана (значение посередине) данных. | |
Нижняя медиана данных. | |
Верхняя медиана данных. | |
Медиана, или 50-й процентиль, сгруппированных данных. | |
Мода (наиболее часто встречающееся значение) дискретных данных. |
9.7.2. Меры разброса
Эти функции вычисляют меру того, насколько генеральная совокупность или выборка имеют тенденцию отклоняться от типичных или средних значений.
Стандартное отклонение генеральной совокупности данных. | |
Дисперсия генеральной совокупности данных. | |
Стандартное отклонение выборки данных. | |
Дисперсия выборки данных. |
9.7.3. Подробное описание функций
Примечание: Функции не требуют, чтобы данные, предоставленные им, были отсортированы. Однако для удобства чтения большинство примеров показывают отсортированные последовательности.
-
statistics.mean(data) -
Возвращает среднее арифметическое значение 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.harmonic_mean(data) -
Возвращает гармоническое среднее data, последовательность или итератор действительных чисел.
Гармоническое среднее, иногда называемое средним значением subcontrary, является обратным к арифметическому
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]) # For an equal investment portfolio. 3.6
Использование арифметического среднего даст среднее значение около 5,167, что слишком высоко.
Исключение
StatisticsErrorвозникает, если data пустое или какое-либо значение меньше нуля.Новая в версии 3.6.
-
statistics.median(data) -
Возвращает медиану (значение посередине) числовых данных, используя общий метод «среднее двух средних значений». Если data пустое, поднимается исключение
StatisticsError. data может быть последовательностью или итератором.Медиана — это надежная мера центральной тенденции, и она меньше зависит от присутствия выбросов в данных. Когда количество точек данных нечетное, возвращается средняя точка данных:
>>> median([1, 3, 5]) 3
Когда количество точек данных четное, медиана интерполируется путем взятия среднего из двух средних значений:
>>> median([1, 3, 5, 7]) 4.0
Это подходит для случая, когда ваши данные дискретны, и вас не беспокоит, что медиана может не быть фактической точкой данных.
Если ваши данные являются порядковыми (поддерживают операции порядка), но не числовыми (не поддерживают сложение), вы должны использовать
median_low()илиmedian_high()вместо этого.См. также
-
statistics.median_low(data) -
Возвращает нижнюю медиану числовых данных. Если data пустое, поднимается исключение
StatisticsError. data может быть последовательностью или итератором.Нижняя медиана всегда является членом набора данных. Когда количество точек данных нечетное, возвращается среднее значение. Когда оно четное, возвращается меньшее из двух средних значений.
>>> median_low([1, 3, 5]) 3 >>> median_low([1, 3, 5, 7]) 3
Используйте нижнюю медиану, когда ваши данные дискретны, и вы предпочитаете, чтобы медиана была фактической точкой данных, а не интерполированной.
-
statistics.median_high(data) -
Возвращает верхнюю медиану данных. Если data пустое, поднимается исключение
StatisticsError. data может быть последовательностью или итератором.Верхняя медиана всегда является членом набора данных. Когда количество точек данных нечетное, возвращается среднее значение. Когда оно четное, возвращается большее из двух средних значений.
>>> median_high([1, 3, 5]) 3 >>> median_high([1, 3, 5, 7]) 5
Используйте верхнюю медиану, когда ваши данные дискретны, и вы предпочитаете, чтобы медиана была фактической точкой данных, а не интерполированной.
-
statistics.median_grouped(data, interval=1) -
Возвращает медиану сгруппированных непрерывных данных, вычисляемую как 50-й перцентиль с использованием интерполяции. Если data пусто, то поднимается исключение
StatisticsError. data может быть последовательностью или итератором.>>> 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()может привести точки данных к типу float. Это поведение, вероятно, изменится в будущем.См. также
- «Статистика для поведенческих наук», Фредерик Дж. Грэветтер и Ларри Б. Уоллнау (8-е издание).
- Вычисление медианы.
- Функция SSMEDIAN в электронных таблицах Gnome Gnumeric, включая данное обсуждение.
-
statistics.mode(data) -
Возвращает наиболее часто встречающуюся точку данных из дискретных или номинальных данных 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) -
Возвращает дисперсию генеральной совокупности data, непустой итерируемой последовательности действительных чисел. Дисперсия, или центральный момент второго порядка, является мерой изменчивости (разброса или рассеяния) данных. Большая дисперсия указывает на то, что данные разбросаны; малая дисперсия указывает, что данные сгруппированы близко к среднему значению.
Если задан необязательный второй аргумент 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 может привести к некорректным или невозможным результатам.
Поддерживаются десятичные и дробные значения:
>>> 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) -
Возвращает выборочную дисперсию data, итерируемую последовательность как минимум из двух действительных чисел. Дисперсия, или центральный момент второго порядка, является мерой изменчивости (разброса или рассеяния) данных. Большая дисперсия указывает на то, что данные разбросаны; малая дисперсия указывает, что данные сгруппированы близко к среднему значению.
Если задан необязательный второй аргумент 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 может привести к некорректным или невозможным результатам.
Поддерживаются десятичные и дробные значения:
>>> 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. Исключения
Определено одно исключение:
-
exception statistics.StatisticsError -
Подкласс
ValueErrorдля исключений, связанных со статистикой.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/statistics.html