Как использовать модуль статистики Python
Прыжковые ссылки
- Что такое модуль statistics в Python?
- Описательная статистика
- Регрессия и корреляция
- Нормальное распределение
- А как насчёт NumPy, SciPy и других?
У Python есть несколько замечательных библиотек для статистического анализа, но они могут быть излишними для простых задач. Встроенная библиотека статистики может быть именно тем, что вам нужно. Вот несколько вещей, которые вы с её помощью можете делать. Вам больше не нужно запоминать сложные формулы или просматривать таблицы.
Что такое модуль statistics в Python?
Модуль statistics в Python — это встроенный модуль для выполнения простых статистических вычислений. Поскольку он является частью стандартной библиотеки Python, он доступен в каждой установке Python. Чтобы использовать его в скриптах или интерактивных сеансах, достаточно просто импортировать его:
import statistics
Если вам нужна только одна или несколько функций из модуля Python в интерактивной сессии, например, в IPython или Jupyter notebook, вы можете импортировать их прямо в текущее пространство имён, чтобы не приходилось постоянно вводить «statistics». На этом и будут основаны примеры в этой статье.
Модуль статистики особенно хорошо проявляет себя в интерактивном режиме Python, таком как интерпретатор, улучшенная сессия в IPython или блокнот Jupyter.
Описательная статистика
Самая базовая форма статистики — это описательная статистика. Как следует из названия, эта статистика предназначена для описания данных, таких как центральные тенденции или меры разброса.
Самым простым вычислением является арифметическое среднее, которое просто представляет собой сумму всех данных, делённую на их количество. В статистических учебниках среднее значение выборки обозначается символом x с чертой сверху, который известен как «x-бар». Среднее значение генеральной совокупности обозначается греческой буквой мю, но вычисляется точно так же. Большинство людей знают это как «среднее значение».
Чтобы вычислить среднее с помощью модуля статистики, просто используйте функцию mean.
Импортируйте функции в основное пространство имён Python только в интерактивных сессиях. Это может вызвать ошибки в скриптах, если импортированная функция переопределяет встроенную функцию.
Давайте создадим небольшой массив чисел и найдём среднее значение:
a = [4,4, 3, 6] mean(a)
Результат равен 4,6.
Функция fmean также вычисляет средние значения, но преобразует данные в числа с плавающей запятой. Она также позволяет вычислять взвешенное среднее.
weights = [1,2,3,4] fmean(a,weights)
Взвешенное среднее из этого примера равно 4,5
Другой вид среднего — это геометрическое среднее, которое полезно для сравнения темпов роста за определённый период времени. Оно включает извлечение n-го корня из произведения всех значений данных. Вручную это обычно требует утомительных логарифмических вычислений, но в Python это легко сделать с помощью функции geometric_mean.
geometric_mean(a)
Гармоническое среднее — это обратное арифметическому среднему. Оно равно числу точек данных, делённому на сумму дробей 1/первая точка данных, 1/вторая точка данных и так далее. Гармоническое среднее полезно для вычисления средних значений для таких величин, как скорости, которые имеют определённые показатели. К счастью, Python также может сделать это за вас.
harmonic_mean(a)
Результат равен 4. Обратите внимание, что гармоническое среднее оказалось меньше геометрического среднего, а геометрическое среднее — меньше арифметического среднего для одного и того же набора данных.
Медиана — это еще одна популярная мера центральной тенденции. Это значение данных, которое делит набор данных пополам. Вы можете найти её с помощью функции медианы:
median(a)
Результат в нашей выборке равен 4.
Функция моды сообщает о наиболее часто встречающемся числе в выборке.
mode(a)
Снова, мода равна 4, поскольку это самое часто повторяющееся число в массиве, который мы определили ранее.
Еще одной распространенной причиной использования описательной статистики является измерение разброса данных, также известного как дисперсия. Наиболее известной мерой разброса является стандартное отклонение, которое показывает, насколько данные отклоняются от среднего арифметического. Это квадратный корень из дисперсии, или сумма квадратов разности каждого значения данных и среднего, деленная на количество данных. Это представляет собой стандартное отклонение для популяции, но для стандартного отклонения количество данных уменьшается на один, чтобы получить более репрезентативный результат для небольших выборок.
Функция stdev вычисляет выборочное стандартное отклонение, которое, скорее всего, будет тем, что вам нужно в большинстве случаев:
stdev(a)
Результат примерно равен 1,26.
Давайте сравним это со стандартным отклонением по населению с помощью функции pstdev:
pstdev(a)
Вы можете просмотреть выборочную дисперсию с помощью функции дисперсии
variance(a)
Существует также вариант для всей популяции, pvariance, который работает аналогичным образом.
Другой способ взглянуть на распределение ваших данных — разделить их на перцентили, где перцентиль показывает процент данных, который ниже данного значения. Медиана на самом деле является 50-м перцентилем, так как половина данных находится ниже этого значения.
Функция квантилей разделит данные на процентили по результатам:
quantiles(a)
Он покажет нижний квартиль, или 25-й процентиль, медиану и верхний квартиль. Встроенные функции min и max отобразят минимальные и максимальные значения.
min(a) max(a)
Регрессия и корреляция
Популярным статистическим методом является изучение того, как одна переменная коррелирует с другой. Это сводится к построению точек данных на осях x и y и проведению линии через них, чтобы увидеть, насколько хорошо она подходит. Это называется «линейной регрессией». Модуль statistics имеет метод для простой линейной регрессии. Она называется «простой», потому что коррелирует только две переменные. Для этого используется метод, называемый «метод наименьших квадратов», так называемый, потому что он стремится минимизировать квадрат расстояния между точками данных и линией, которую он создает.
Давайте построим линейную регрессию для двух массивов с метками x и y
x = [1,2,3,4,5] y = [5,7,9,11,13]
Для того чтобы подогнать модель, используйте метод linear_regression. Это позволит вычислить наклон и пересечение с осью Y для известного уравнения прямой: y=mx + b.
linear_regression(x,y)
Это даст вам наклон и точку пересечения. Вы также можете сохранить их в переменные:
slope, intercept = linear_regression(x,y)
В этом случае наклон равен 2, а пересечение с осью — 3, что соответствует уравнению наклона y=2*x + 3. Положительный знак наклона указывает на то, что линия идет вверх, то есть значение y будет увеличиваться по мере движения вправо.
Эта функция не будет строить линии или классическую диаграмму рассеяния. Она также предоставит регрессию только для двух переменных. Если вы хотите построить график или сделать прогноз, используя более одной зависимой переменной, вам придется использовать другие библиотеки, такие как Seaborn, statsmodels или Pingouin.
Вы можете увидеть, насколько хорошо коррелируют две переменные, используя функцию корреляции. Она вычисляет коэффициент корреляции, или r. Этот коэффициент будет находиться между 0 и 1, или -1, указывая на положительную или отрицательную корреляцию. Отрицательная корреляция будет означать нисходящую линию.
Проверить корреляцию между двумя переменными:
correlation(x,y)
В этом случае значение равно 1, что показывает идеальную положительную корреляцию, но реальные данные редко коррелируют настолько идеально. Это означает, что линия регрессии будет идеально проходить через точки данных при их построении на графике.
Нормальное распределение
Нормальное распределение с его знаменитой колоколообразной кривой является непрерывным распределением вероятностей. Вы можете использовать эту функцию для оценки вероятности некоторого параметра, распределенного по нормальному закону.
Мы можем продемонстрировать это с помощью данных CDC. Согласно этим данным, средний рост мужчин старше 20 лет составляет 175,1 сантиметра. Мы можем получить стандартное отклонение популяции, умножив квадратный корень из числа образцов, 2690, на стандартную ошибку, 0,3.
import math math.sqrt(2690) * .3
Стандартное отклонение составляет примерно 15,56
Мы можем использовать это для создания объекта нормального распределения:
men_height = NormalDist(175.1,28.41)
Чтобы найти процент мужчин с ростом от 160 до 180 сантиметров, мы используем функцию накопленного распределения, или CDF, которая показывает процент значений ниже определенного значения. Мы можем вычесть нижнее значение из верхнего, потому что кривая нормального распределения симметрична. У объекта, который мы только что создали, есть метод cdf, который мы можем использовать, чтобы получить эту вероятность.
men_height.cdf(180) - men_height.cdf(160)
Ответ будет таким: примерно 45% мужчин имеют рост от 160 до 180 сантиметров.
А как насчёт NumPy, SciPy и других?
NumPy, SciPy и другие библиотеки популярны для статистики и анализа данных. А как насчет модуля statistics? Указанные библиотеки предназначены для работы с большими наборами данных и профессионального использования. Разработчики модуля statistics ориентировали его на уровни научных и графических калькуляторов. Эта библиотека хорошо подходит для изучения статистических концепций и быстрых, случайных расчетов.
Если вы хотите работать с реальными наборами данных, другие библиотеки будут более мощными и гибкими, хотя кривая обучения может быть крутой. Если вы хотите попробовать возможности статистических вычислений на Python, модуль статистики — хорошее место для начала.




Добавить комментарий