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

statistics.md

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

1> **Источник:** https://python-all.ru/3.6/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.6/library/statistics.html#module-statistics) – Функции математической статистики89Новое в версии 3.4.1011**Исходный код:** [Lib/statistics.py](https://python-all.ru/src/3.6/Lib/statistics.py)1213---1415Этот модуль предоставляет функции для вычисления математической статистики числовых данных (со значениями `Real`).1617> **Примечание**18>19> Если явно не указано иное, эти функции поддерживают [`int`](https://python-all.ru/3.6/library/functions.html#int), [`float`](https://python-all.ru/3.6/library/functions.html#float), [`decimal.Decimal`](https://python-all.ru/3.6/library/decimal.html#decimal.Decimal) и [`fractions.Fraction`](https://python-all.ru/3.6/library/fractions.html#fractions.Fraction). Поведение с другими типами (независимо от их наличия в числовой иерархии) в настоящее время не поддерживается. Смешанные типы также не определены и зависят от реализации. Если входные данные состоят из смешанных типов, для получения согласованного результата можно использовать [`map()`](https://python-all.ru/3.6/library/functions.html#map), например `map(float, input_data)`.2021## 9.7.1. Средние значения и меры центральной тенденции2223Эти функции вычисляют среднее или типичное значение из генеральной совокупности или выборки.2425| [`mean()`](https://python-all.ru/3.6/library/statistics.html#statistics.mean) | Среднее арифметическое (среднее) данных. |26| --- | --- |27| [`harmonic_mean()`](https://python-all.ru/3.6/library/statistics.html#statistics.harmonic_mean) | Среднее гармоническое данных. |28| [`median()`](https://python-all.ru/3.6/library/statistics.html#statistics.median) | Медиана (среднее значение) данных. |29| [`median_low()`](https://python-all.ru/3.6/library/statistics.html#statistics.median_low) | Нижняя медиана данных. |30| [`median_high()`](https://python-all.ru/3.6/library/statistics.html#statistics.median_high) | Верхняя медиана данных. |31| [`median_grouped()`](https://python-all.ru/3.6/library/statistics.html#statistics.median_grouped) | Медиана (или 50-й процентиль) сгруппированных данных. |32| [`mode()`](https://python-all.ru/3.6/library/statistics.html#statistics.mode) | Мода (наиболее часто встречающееся значение) дискретных данных. |3334## 9.7.2. Меры разброса3536Эти функции вычисляют меру того, насколько генеральная совокупность или выборка склонны отклоняться от типичных или средних значений.3738| [`pstdev()`](https://python-all.ru/3.6/library/statistics.html#statistics.pstdev) | Стандартное отклонение генеральной совокупности данных. |39| --- | --- |40| [`pvariance()`](https://python-all.ru/3.6/library/statistics.html#statistics.pvariance) | Дисперсия генеральной совокупности данных. |41| [`stdev()`](https://python-all.ru/3.6/library/statistics.html#statistics.stdev) | Стандартное отклонение выборки данных. |42| [`variance()`](https://python-all.ru/3.6/library/statistics.html#statistics.variance) | Дисперсия выборки данных. |4344## 9.7.3. Подробности функций4546Примечание: функции не требуют, чтобы переданные им данные были отсортированы. Однако для удобства чтения в большинстве примеров показаны отсортированные последовательности.4748#### `statistics.mean(data)`4950Возвращает выборочное среднее арифметическое *данных*, которые могут быть последовательностью или итератором.5152Среднее арифметическое – это сумма данных, делённая на количество точек данных. Его часто называют «средним значением», хотя это лишь одна из многих различных математических средних. Это мера центрального положения данных.5354Если *data* пуст, будет возбуждено [`StatisticsError`](https://python-all.ru/3.6/library/statistics.html#statistics.StatisticsError).5556Некоторые примеры использования:5758```pycon59>>> mean([1, 2, 3, 4, 4])602.861>>> mean([-1.0, 2.5, 3.25, 5.75])622.6256364>>> from fractions import Fraction as F65>>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)])66Fraction(13, 21)6768>>> from decimal import Decimal as D69>>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")])70Decimal('0.5625')71```7273> **Примечание**74>75> Среднее сильно подвержено влиянию выбросов и не является устойчивой оценкой центральной тенденции: среднее не обязательно является типичным примером точек данных. Для более устойчивых, хотя и менее эффективных, мер центральной тенденции см. [`median()`](https://python-all.ru/3.6/library/statistics.html#statistics.median) и [`mode()`](https://python-all.ru/3.6/library/statistics.html#statistics.mode). (В данном случае «эффективный» относится к статистической эффективности, а не к вычислительной.)76>77> Выборочное среднее даёт несмещённую оценку истинного среднего генеральной совокупности, что означает, что в среднем по всем возможным выборкам `mean(sample)` сходится к истинному среднему всей совокупности. Если *данные* представляют всю генеральную совокупность, а не выборку, то `mean(data)` эквивалентно вычислению истинного среднего генеральной совокупности μ.7879#### `statistics.harmonic_mean(data)`8081Возвращает гармоническое среднее *данных*, последовательности или итератора вещественных чисел.8283Гармоническое среднее, иногда называемое субконтрарным средним, – это обратная величина арифметического [`mean()`](https://python-all.ru/3.6/library/statistics.html#statistics.mean) обратных величин данных. Например, гармоническое среднее трёх значений *a*, *b* и *c* будет эквивалентно `3/(1/a + 1/b + 1/c)`.8485Гармоническое среднее – это тип среднего, мера центральной тенденции данных. Его часто уместно использовать при усреднении величин, которые являются темпами или отношениями, например, скоростей. Например:8687Предположим, инвестор покупает одинаковую стоимость акций в каждой из трёх компаний с коэффициентами P/E (цена/прибыль) 2.5, 3 и 10. Каково среднее значение P/E для портфеля инвестора?8889```pycon90>>> harmonic_mean([2.5, 3, 10])  # Для портфеля с равным распределением инвестиций.913.692```9394Использование среднего арифметического дало бы среднее около 5.167, что слишком высоко.9596[`StatisticsError`](https://python-all.ru/3.6/library/statistics.html#statistics.StatisticsError) возникает, если *данные* пусты или любой элемент меньше нуля.9798Новое в версии 3.6.99100#### `statistics.median(data)`101102Возвращает медиану (среднее значение) числовых данных, используя распространённый метод «среднее двух центральных значений». Если *данные* пусты, возбуждается [`StatisticsError`](https://python-all.ru/3.6/library/statistics.html#statistics.StatisticsError). *данные* могут быть последовательностью или итератором.103104Медиана – это устойчивая мера центральной тенденции, и на неё меньше влияет наличие выбросов в данных. Когда количество точек данных нечётно, возвращается средняя точка данных:105106```pycon107>>> median([1, 3, 5])1083109```110111Если количество точек данных чётное, медиана интерполируется как среднее двух средних значений:112113```pycon114>>> median([1, 3, 5, 7])1154.0116```117118Это подходит для дискретных данных, когда допустимо, что медиана может не быть фактической точкой данных.119120Если данные являются порядковыми (поддерживают операции сравнения), но не числовыми (не поддерживают сложение), следует использовать [`median_low()`](https://python-all.ru/3.6/library/statistics.html#statistics.median_low) или [`median_high()`](https://python-all.ru/3.6/library/statistics.html#statistics.median_high) вместо этого.121122> **См. также**123>124> [`median_low()`](https://python-all.ru/3.6/library/statistics.html#statistics.median_low), [`median_high()`](https://python-all.ru/3.6/library/statistics.html#statistics.median_high), [`median_grouped()`](https://python-all.ru/3.6/library/statistics.html#statistics.median_grouped)125126#### `statistics.median_low(data)`127128Возвращает нижнюю медиану числовых данных. Если *данные* пусты, возбуждается [`StatisticsError`](https://python-all.ru/3.6/library/statistics.html#statistics.StatisticsError). *данные* могут быть последовательностью или итератором.129130Нижняя медиана всегда является элементом набора данных. При нечётном количестве точек возвращается среднее значение. При чётном – возвращается меньшее из двух средних значений.131132```pycon133>>> median_low([1, 3, 5])1343135>>> median_low([1, 3, 5, 7])1363137```138139Используйте нижнюю медиану, когда данные дискретны и вы предпочитаете, чтобы медиана была фактической точкой данных, а не интерполированной.140141#### `statistics.median_high(data)`142143Возвращает верхнюю медиану данных. Если *данные* пусты, возбуждается [`StatisticsError`](https://python-all.ru/3.6/library/statistics.html#statistics.StatisticsError). *данные* могут быть последовательностью или итератором.144145Верхняя медиана всегда является элементом набора данных. При нечётном количестве точек возвращается среднее значение. При чётном – возвращается большее из двух средних значений.146147```pycon148>>> median_high([1, 3, 5])1493150>>> median_high([1, 3, 5, 7])1515152```153154Используйте верхнюю медиану, когда данные дискретны и вы предпочитаете, чтобы медиана была фактической точкой данных, а не интерполированной.155156#### `statistics.median_grouped(data, interval=1)`157158Возвращает медиану сгруппированных непрерывных данных, вычисленную как 50-й процентиль, с использованием интерполяции. Если *данные* пусты, возбуждается [`StatisticsError`](https://python-all.ru/3.6/library/statistics.html#statistics.StatisticsError). *данные* могут быть последовательностью или итератором.159160```pycon161>>> median_grouped([52, 52, 53, 54])16252.5163```164165В следующем примере данные округлены, так что каждое значение представляет середину интервала данных: например, 1 – середина интервала 0.5–1.5, 2 – середина 1.5–2.5, 3 – середина 2.5–3.5 и т.д. Для данных, приведённых ниже, медианное значение попадает в интервал 3.5–4.5, и для его оценки используется интерполяция:166167```pycon168>>> median_grouped([1, 2, 2, 3, 4, 4, 4, 4, 4, 5])1693.7170```171172Необязательный аргумент *interval* задаёт ширину интервала; по умолчанию равен 1. Изменение ширины интервала, естественно, повлияет на интерполяцию:173174```pycon175>>> median_grouped([1, 3, 3, 5, 7], interval=1)1763.25177>>> median_grouped([1, 3, 3, 5, 7], interval=2)1783.5179```180181Эта функция не проверяет, что точки данных отстоят друг от друга хотя бы на величину *interval*.182183**Особенность реализации CPython:** В некоторых случаях [`median_grouped()`](https://python-all.ru/3.6/library/statistics.html#statistics.median_grouped) может приводить точки данных к числам с плавающей запятой. Это поведение может измениться в будущем.184185> **См. также**186>187> - «Статистика для поведенческих наук», Фредерик Дж. Граветтер и Ларри Б. Уоллнау (8-е издание).188> - Вычисление [медианы](https://python-all.ru/3.6/library/statistics.html).189> - Функция [SSMEDIAN](https://python-all.ru/3.6/library/statistics.html) в электронной таблице Gnome Gnumeric, включая [это обсуждение](https://python-all.ru/3.6/library/statistics.html).190191#### `statistics.mode(data)`192193Возвращает наиболее часто встречающуюся точку данных из дискретных или номинальных *данных*. Мода (когда она существует) – это наиболее типичное значение, и она является устойчивой мерой центральной тенденции.194195Если *данные* пусты или если нет ровно одного наиболее часто встречающегося значения, возбуждается [`StatisticsError`](https://python-all.ru/3.6/library/statistics.html#statistics.StatisticsError).196197`mode` предполагает дискретные данные и возвращает одно значение. Это стандартная трактовка моды, обычно преподаваемая в школах:198199```pycon200>>> mode([1, 1, 2, 3, 3, 3, 3, 4])2013202```203204Мода уникальна тем, что это единственная статистика, которая также применима к номинальным (нечисловым) данным:205206```pycon207>>> mode(["red", "blue", "blue", "red", "green", "red", "red"])208'red'209```210211#### `statistics.pstdev(data, mu=None)`212213Возвращает стандартное отклонение генеральной совокупности (квадратный корень из дисперсии генеральной совокупности). См. [`pvariance()`](https://python-all.ru/3.6/library/statistics.html#statistics.pvariance) для получения аргументов и других подробностей.214215```pycon216>>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])2170.986893273527251218```219220#### `statistics.pvariance(data, mu=None)`221222Возвращает дисперсию генеральной совокупности *данных*, непустого итерабельного объекта, содержащего вещественные числа. Дисперсия, или второй центральный момент, является мерой изменчивости (разброса или рассеяния) данных. Большая дисперсия указывает на то, что данные разбросаны; малая дисперсия указывает на то, что они сгруппированы близко к среднему.223224Если указан необязательный второй аргумент *mu*, он должен быть средним *данных*. Если он отсутствует или равен `None` (значение по умолчанию), среднее вычисляется автоматически.225226Используйте эту функцию для расчёта дисперсии по всей генеральной совокупности. Для оценки дисперсии по выборке обычно лучше подходит функция [`variance()`](https://python-all.ru/3.6/library/statistics.html#statistics.variance).227228Возбуждает [`StatisticsError`](https://python-all.ru/3.6/library/statistics.html#statistics.StatisticsError), если *данные* пусты.229230Примеры:231232```pycon233>>> data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25]234>>> pvariance(data)2351.25236```237238Если вы уже вычислили среднее своих данных, вы можете передать его в качестве необязательного второго аргумента *mu*, чтобы избежать повторного вычисления:239240```pycon241>>> mu = mean(data)242>>> pvariance(data, mu)2431.25244```245246Эта функция не проверяет, что вы передали действительное среднее в качестве *mu*. Использование произвольных значений для *mu* может привести к недопустимым или невозможным результатам.247248Поддерживаются типы Decimal и Fraction:249250```pycon251>>> from decimal import Decimal as D252>>> pvariance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])253Decimal('24.815')254255>>> from fractions import Fraction as F256>>> pvariance([F(1, 4), F(5, 4), F(1, 2)])257Fraction(13, 72)258```259260> **Примечание**261>262> При вызове для всей генеральной совокупности получается дисперсия генеральной совокупности σ². При вызове для выборки получается смещённая выборочная дисперсия s², также известная как дисперсия с N степенями свободы.263>264> Если вы каким-то образом знаете истинное среднее генеральной совокупности μ, вы можете использовать эту функцию для вычисления дисперсии выборки, передав известное среднее совокупности в качестве второго аргумента. При условии, что точки данных являются репрезентативными (например, независимы и одинаково распределены), результат будет несмещённой оценкой дисперсии генеральной совокупности.265266#### `statistics.stdev(data, xbar=None)`267268Возвращает выборочное стандартное отклонение (квадратный корень из выборочной дисперсии). См. [`variance()`](https://python-all.ru/3.6/library/statistics.html#statistics.variance) для получения аргументов и других подробностей.269270```pycon271>>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])2721.0810874155219827273```274275#### `statistics.variance(data, xbar=None)`276277Возвращает выборочную дисперсию для *данных* – итерации, содержащей не менее двух вещественных чисел. Дисперсия (второй центральный момент) – это мера изменчивости (разброса или рассеяния) данных. Большая дисперсия указывает на то, что данные разбросаны; малая – что они сгруппированы близко к среднему.278279Если указан необязательный второй аргумент *xbar*, он должен быть средним *data*. Если он отсутствует или равен `None` (по умолчанию), среднее вычисляется автоматически.280281Используйте эту функцию, когда ваши данные являются выборкой из генеральной совокупности. Для расчёта дисперсии по всей совокупности см. [`pvariance()`](https://python-all.ru/3.6/library/statistics.html#statistics.pvariance).282283Возбуждает [`StatisticsError`](https://python-all.ru/3.6/library/statistics.html#statistics.StatisticsError), если в *данных* меньше двух значений.284285Примеры:286287```pycon288>>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]289>>> variance(data)2901.3720238095238095291```292293Если среднее данных уже вычислено, его можно передать в качестве необязательного второго аргумента *xbar*, чтобы избежать повторного вычисления:294295```pycon296>>> m = mean(data)297>>> variance(data, m)2981.3720238095238095299```300301Эта функция не проверяет, было ли передано истинное среднее в качестве *xbar*. Использование произвольных значений для *xbar* может привести к неверным или невозможным результатам.302303Поддерживаются значения Decimal и Fraction:304305```pycon306>>> from decimal import Decimal as D307>>> variance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])308Decimal('31.01875')309310>>> from fractions import Fraction as F311>>> variance([F(1, 6), F(1, 2), F(5, 3)])312Fraction(67, 108)313```314315> **Примечание**316>317> Это выборочная дисперсия s² с поправкой Бесселя, также известная как дисперсия с N-1 степенями свободы. При условии, что точки данных репрезентативны (например, независимы и одинаково распределены), результат должен быть несмещенной оценкой истинной дисперсии генеральной совокупности.318>319> Если каким-либо образом известно истинное среднее генеральной совокупности μ, его следует передать в функцию [`pvariance()`](https://python-all.ru/3.6/library/statistics.html#statistics.pvariance) в качестве параметра *mu*, чтобы получить дисперсию выборки.320321## 9.7.4. Исключения322323Определено одно исключение:324325#### `exception statistics.StatisticsError`326327Подкласс [`ValueError`](https://python-all.ru/3.6/library/exceptions.html#ValueError) для исключений, связанных со статистикой.328