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

statistics.md

304 строк · 22.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.4/library/statistics.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 9.7. [`statistics`](https://python-all.ru/3.4/library/statistics.html#module-statistics) – Функции математической статистики89Новое в версии 3.4.1011**Исходный код:** [Lib/statistics.py](https://python-all.ru/src/3.4/Lib/statistics.py)1213---1415Этот модуль предоставляет функции для вычисления математической статистики числовых данных (типа `Real`).1617> **Примечание**18>19> Если не указано иное, эти функции поддерживают [`int`](https://python-all.ru/3.4/library/functions.html#int), [`float`](https://python-all.ru/3.4/library/functions.html#float), [`decimal.Decimal`](https://python-all.ru/3.4/library/decimal.html#decimal.Decimal) и [`fractions.Fraction`](https://python-all.ru/3.4/library/fractions.html#fractions.Fraction). Поведение с другими типами (будь то в числовой иерархии или нет) в настоящее время не поддерживается. Смешанные типы также не определены и зависят от реализации. Если ваши входные данные состоят из смешанных типов, вы можете использовать [`map()`](https://python-all.ru/3.4/library/functions.html#map) для получения согласованного результата, например `map(float, input_data)`.2021## 9.7.1. Средние значения и меры центральной тенденции2223Эти функции вычисляют среднее или типичное значение из генеральной совокупности или выборки.2425| [`mean()`](https://python-all.ru/3.4/library/statistics.html#statistics.mean) | Среднее арифметическое (среднее) данных. |26| --- | --- |27| [`median()`](https://python-all.ru/3.4/library/statistics.html#statistics.median) | Медиана (среднее значение) данных. |28| [`median_low()`](https://python-all.ru/3.4/library/statistics.html#statistics.median_low) | Нижняя медиана данных. |29| [`median_high()`](https://python-all.ru/3.4/library/statistics.html#statistics.median_high) | Верхняя медиана данных. |30| [`median_grouped()`](https://python-all.ru/3.4/library/statistics.html#statistics.median_grouped) | Медиана (или 50-й процентиль) сгруппированных данных. |31| [`mode()`](https://python-all.ru/3.4/library/statistics.html#statistics.mode) | Мода (наиболее часто встречающееся значение) дискретных данных. |3233## 9.7.2. Меры разброса3435Эти функции вычисляют меру того, насколько генеральная совокупность или выборка склонны отклоняться от типичных или средних значений.3637| [`pstdev()`](https://python-all.ru/3.4/library/statistics.html#statistics.pstdev) | Стандартное отклонение генеральной совокупности данных. |38| --- | --- |39| [`pvariance()`](https://python-all.ru/3.4/library/statistics.html#statistics.pvariance) | Дисперсия генеральной совокупности данных. |40| [`stdev()`](https://python-all.ru/3.4/library/statistics.html#statistics.stdev) | Стандартное отклонение выборки данных. |41| [`variance()`](https://python-all.ru/3.4/library/statistics.html#statistics.variance) | Дисперсия выборки данных. |4243## 9.7.3. Описание функций4445Примечание: функции не требуют, чтобы переданные им данные были отсортированы. Однако для удобства чтения в большинстве примеров показаны отсортированные последовательности.4647#### `statistics.mean(data)`4849Возвращает выборочное среднее арифметическое *данных* – последовательности или итератора вещественных чисел.5051Среднее арифметическое – это сумма данных, делённая на количество точек данных. Его часто называют «средним значением», хотя это лишь одна из многих различных математических средних. Это мера центрального положения данных.5253Если *data* пуст, возбуждается [`StatisticsError`](https://python-all.ru/3.4/library/statistics.html#statistics.StatisticsError).5455Некоторые примеры использования:5657```python58>>> mean([1, 2, 3, 4, 4])592.860>>> mean([-1.0, 2.5, 3.25, 5.75])612.6256263>>> from fractions import Fraction as F64>>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)])65Fraction(13, 21)6667>>> from decimal import Decimal as D68>>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")])69Decimal('0.5625')70```7172> **Примечание**73>74> Среднее арифметическое сильно подвержено влиянию выбросов и не является устойчивой оценкой центральной тенденции: среднее не обязательно является типичным представителем точек данных. Для более устойчивых, хотя и менее эффективных мер центральной тенденции см. [`median()`](https://python-all.ru/3.4/library/statistics.html#statistics.median) и [`mode()`](https://python-all.ru/3.4/library/statistics.html#statistics.mode). (В данном случае «эффективность» относится к статистической эффективности, а не к вычислительной.)75>76> Выборочное среднее дает несмещенную оценку истинного среднего генеральной совокупности, что означает, что в среднем по всем возможным выборкам `mean(sample)` сходится к истинному среднему всей совокупности. Если *data* представляет всю совокупность, а не выборку, то `mean(data)` эквивалентно вычислению истинного среднего генеральной совокупности μ.7778#### `statistics.median(data)`7980Возвращает медиану (среднее значение) числовых данных, используя распространенный метод «среднее двух средних». Если *data* пуст, возбуждается [`StatisticsError`](https://python-all.ru/3.4/library/statistics.html#statistics.StatisticsError).8182Медиана – это устойчивая мера центральной тенденции, и на неё меньше влияет наличие выбросов в данных. Когда количество точек данных нечётно, возвращается средняя точка данных:8384```python85>>> median([1, 3, 5])86387```8889Если количество точек данных чётное, медиана интерполируется как среднее двух средних значений:9091```python92>>> median([1, 3, 5, 7])934.094```9596Это подходит для дискретных данных, когда допустимо, что медиана может не быть фактической точкой данных.9798> **См. также**99>100> [`median_low()`](https://python-all.ru/3.4/library/statistics.html#statistics.median_low), [`median_high()`](https://python-all.ru/3.4/library/statistics.html#statistics.median_high), [`median_grouped()`](https://python-all.ru/3.4/library/statistics.html#statistics.median_grouped)101102#### `statistics.median_low(data)`103104Возвращает нижнюю медиану числовых данных. Если *data* пуст, возбуждается [`StatisticsError`](https://python-all.ru/3.4/library/statistics.html#statistics.StatisticsError).105106Нижняя медиана всегда является элементом набора данных. При нечётном количестве точек возвращается среднее значение. При чётном – возвращается меньшее из двух средних значений.107108```python109>>> median_low([1, 3, 5])1103111>>> median_low([1, 3, 5, 7])1123113```114115Используйте нижнюю медиану, когда данные дискретны и вы предпочитаете, чтобы медиана была фактической точкой данных, а не интерполированной.116117#### `statistics.median_high(data)`118119Возвращает верхнюю медиану данных. Если *data* пуст, возбуждается [`StatisticsError`](https://python-all.ru/3.4/library/statistics.html#statistics.StatisticsError).120121Верхняя медиана всегда является элементом набора данных. При нечётном количестве точек возвращается среднее значение. При чётном – возвращается большее из двух средних значений.122123```python124>>> median_high([1, 3, 5])1253126>>> median_high([1, 3, 5, 7])1275128```129130Используйте верхнюю медиану, когда данные дискретны и вы предпочитаете, чтобы медиана была фактической точкой данных, а не интерполированной.131132#### `statistics.median_grouped(data, interval=1)`133134Возвращает медиану сгруппированных непрерывных данных, вычисляемую как 50-й процентиль с использованием интерполяции. Если *data* пуст, возбуждается [`StatisticsError`](https://python-all.ru/3.4/library/statistics.html#statistics.StatisticsError).135136```python137>>> median_grouped([52, 52, 53, 54])13852.5139```140141В следующем примере данные округлены так, что каждое значение представляет середину интервала данных, например 1 – середина интервала 0.5–1.5, 2 – середина 1.5–2.5, 3 – середина 2.5–3.5 и т.д. Для заданных данных медианное значение попадает в интервал 3.5–4.5, и для его оценки используется интерполяция:142143```python144>>> median_grouped([1, 2, 2, 3, 4, 4, 4, 4, 4, 5])1453.7146```147148Необязательный аргумент *interval* задаёт ширину интервала; по умолчанию равен 1. Изменение ширины интервала, естественно, повлияет на интерполяцию:149150```python151>>> median_grouped([1, 3, 3, 5, 7], interval=1)1523.25153>>> median_grouped([1, 3, 3, 5, 7], interval=2)1543.5155```156157Эта функция не проверяет, что точки данных отстоят друг от друга хотя бы на величину *interval*.158159**Особенность реализации CPython:** При некоторых обстоятельствах [`median_grouped()`](https://python-all.ru/3.4/library/statistics.html#statistics.median_grouped) может приводить точки данных к числам с плавающей запятой. Это поведение, вероятно, изменится в будущем.160161> **См. также**162>163> - «Статистика для поведенческих наук», Фредерик Дж. Граветтер и Ларри Б. Уоллнау (8-е издание).164> - Вычисление [медианы](https://python-all.ru/3.4/library/statistics.html).165> - Функция [SSMEDIAN](https://python-all.ru/3.4/library/statistics.html) в электронной таблице Gnome Gnumeric, включая [это обсуждение](https://python-all.ru/3.4/library/statistics.html).166167#### `statistics.mode(data)`168169Возвращает наиболее часто встречающуюся точку данных из дискретных или номинальных *данных*. Мода (когда она существует) – это наиболее типичное значение, и она является устойчивой мерой центральной тенденции.170171Если *data* пуст или если нет ровно одного наиболее часто встречающегося значения, возбуждается [`StatisticsError`](https://python-all.ru/3.4/library/statistics.html#statistics.StatisticsError).172173`mode` предполагает дискретные данные и возвращает единственное значение. Это стандартная трактовка моды, которой обычно учат в школах:174175```python176>>> mode([1, 1, 2, 3, 3, 3, 3, 4])1773178```179180Мода уникальна тем, что это единственная статистика, которая также применима к номинальным (нечисловым) данным:181182```python183>>> mode(["red", "blue", "blue", "red", "green", "red", "red"])184'red'185```186187#### `statistics.pstdev(data, mu=None)`188189Возвращает стандартное отклонение генеральной совокупности (квадратный корень из дисперсии генеральной совокупности). См. [`pvariance()`](https://python-all.ru/3.4/library/statistics.html#statistics.pvariance), где описаны аргументы и другие подробности.190191```python192>>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])1930.986893273527251194```195196#### `statistics.pvariance(data, mu=None)`197198Возвращает дисперсию генеральной совокупности *данных*, непустого итерабельного объекта, содержащего вещественные числа. Дисперсия, или второй центральный момент, является мерой изменчивости (разброса или рассеяния) данных. Большая дисперсия указывает на то, что данные разбросаны; малая дисперсия указывает на то, что они сгруппированы близко к среднему.199200Если указан необязательный второй аргумент *mu*, он должен быть средним значением *data*. Если он отсутствует или равен `None` (значение по умолчанию), среднее вычисляется автоматически.201202Используйте эту функцию для расчета дисперсии по всей генеральной совокупности. Для оценки дисперсии по выборке обычно лучше подходит функция [`variance()`](https://python-all.ru/3.4/library/statistics.html#statistics.variance).203204Вызывает [`StatisticsError`](https://python-all.ru/3.4/library/statistics.html#statistics.StatisticsError), если *data* пуст.205206Примеры:207208```python209>>> data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25]210>>> pvariance(data)2111.25212```213214Если вы уже вычислили среднее своих данных, вы можете передать его в качестве необязательного второго аргумента *mu*, чтобы избежать повторного вычисления:215216```python217>>> mu = mean(data)218>>> pvariance(data, mu)2191.25220```221222Эта функция не проверяет, что вы передали действительное среднее в качестве *mu*. Использование произвольных значений для *mu* может привести к недопустимым или невозможным результатам.223224Поддерживаются типы Decimal и Fraction:225226```python227>>> from decimal import Decimal as D228>>> pvariance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])229Decimal('24.815')230231>>> from fractions import Fraction as F232>>> pvariance([F(1, 4), F(5, 4), F(1, 2)])233Fraction(13, 72)234```235236> **Примечание**237>238> При вызове для всей генеральной совокупности получается дисперсия генеральной совокупности σ². При вызове для выборки получается смещённая выборочная дисперсия s², также известная как дисперсия с N степенями свободы.239>240> Если вы каким-то образом знаете истинное среднее генеральной совокупности μ, вы можете использовать эту функцию для вычисления дисперсии выборки, передав известное среднее совокупности в качестве второго аргумента. При условии, что точки данных являются репрезентативными (например, независимы и одинаково распределены), результат будет несмещённой оценкой дисперсии генеральной совокупности.241242#### `statistics.stdev(data, xbar=None)`243244Возвращает выборочное стандартное отклонение (квадратный корень из выборочной дисперсии). См. [`variance()`](https://python-all.ru/3.4/library/statistics.html#statistics.variance), где описаны аргументы и другие подробности.245246```python247>>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])2481.0810874155219827249```250251#### `statistics.variance(data, xbar=None)`252253Возвращает выборочную дисперсию для *данных* – итерации, содержащей не менее двух вещественных чисел. Дисперсия (второй центральный момент) – это мера изменчивости (разброса или рассеяния) данных. Большая дисперсия указывает на то, что данные разбросаны; малая – что они сгруппированы близко к среднему.254255Если указан необязательный второй аргумент *xbar*, он должен быть средним значением *data*. Если он отсутствует или равен `None` (значение по умолчанию), среднее вычисляется автоматически.256257Эту функцию следует использовать, когда данные представляют собой выборку из генеральной совокупности. Чтобы рассчитать дисперсию по всей генеральной совокупности, см. [`pvariance()`](https://python-all.ru/3.4/library/statistics.html#statistics.pvariance).258259Вызывает [`StatisticsError`](https://python-all.ru/3.4/library/statistics.html#statistics.StatisticsError), если *data* содержит менее двух значений.260261Примеры:262263```python264>>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]265>>> variance(data)2661.3720238095238095267```268269Если среднее данных уже вычислено, его можно передать в качестве необязательного второго аргумента *xbar*, чтобы избежать повторного вычисления:270271```python272>>> m = mean(data)273>>> variance(data, m)2741.3720238095238095275```276277Эта функция не проверяет, было ли передано истинное среднее в качестве *xbar*. Использование произвольных значений для *xbar* может привести к неверным или невозможным результатам.278279Поддерживаются значения Decimal и Fraction:280281```python282>>> from decimal import Decimal as D283>>> variance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])284Decimal('31.01875')285286>>> from fractions import Fraction as F287>>> variance([F(1, 6), F(1, 2), F(5, 3)])288Fraction(67, 108)289```290291> **Примечание**292>293> Это выборочная дисперсия s² с поправкой Бесселя, также известная как дисперсия с N-1 степенями свободы. При условии, что точки данных репрезентативны (например, независимы и одинаково распределены), результат должен быть несмещенной оценкой истинной дисперсии генеральной совокупности.294>295> Если вы каким-то образом знаете истинное среднее генеральной совокупности μ, передайте его функции [`pvariance()`](https://python-all.ru/3.4/library/statistics.html#statistics.pvariance) в качестве параметра *mu*, чтобы получить дисперсию выборки.296297## 9.7.4. Исключения298299Определено одно исключение:300301#### `exception statistics.StatisticsError`302303Подкласс [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError) для исключений, связанных со статистикой.304