Добавить в корзинуПозвонить
Найти в Дзене
Герман Геншин

Этот приём в Python экономит кучу времени: попробуй встроенный модуль statistics и удивишься!

В экосистеме Python полно продвинутых инструментов для аналитики, но для повседневных задач тебе не нужно ничего сверхсложного. Встроенный модуль statistics часто оказывается самым удобным выбором. Он облегчает жизнь: забудь о заучивании формул и ручном поиске справочных таблиц! Модуль statistics — это встроенный инструмент Python для базовых статистических расчётов. Он уже есть в любой стандартной установке Python, всё, что нужно — просто импортировать. В интерактивных сессиях, например в IPython или Jupyter, удобно импортировать отдельные функции прямо — это избавляет от лишнего написания имени модуля. В этой статье я буду использовать именно такой способ. Особенно полезен модуль statistics в интерактивном режиме — будь то стандартный интерпретатор, улучшенный IPython или Jupyter-ноутбук. Самое важное в статистике — это описательные показатели: они быстро дают понять, что спрятано в твоих данных. Сюда входят самые разные “средние”, “разброс” и прочее. Сначала посмотрим на классическ
Оглавление

В двух словах

В экосистеме Python полно продвинутых инструментов для аналитики, но для повседневных задач тебе не нужно ничего сверхсложного. Встроенный модуль statistics часто оказывается самым удобным выбором. Он облегчает жизнь: забудь о заучивании формул и ручном поиске справочных таблиц!

Что такое модуль statistics в Python?

Модуль statistics — это встроенный инструмент Python для базовых статистических расчётов. Он уже есть в любой стандартной установке Python, всё, что нужно — просто импортировать.

В интерактивных сессиях, например в IPython или Jupyter, удобно импортировать отдельные функции прямо — это избавляет от лишнего написания имени модуля. В этой статье я буду использовать именно такой способ.

Особенно полезен модуль statistics в интерактивном режиме — будь то стандартный интерпретатор, улучшенный IPython или Jupyter-ноутбук.

Описательная статистика

-2

Самое важное в статистике — это описательные показатели: они быстро дают понять, что спрятано в твоих данных. Сюда входят самые разные “средние”, “разброс” и прочее.

Сначала посмотрим на классическое среднее (арифметическое): сложи все значения и раздели на их количество. В учебниках это называют “x с чертой” или “мю”, но по сути это привычное “среднее”.

В modуле statistics посчитать среднее проще простого: просто вызываешь функцию mean.

Внимание: импортировать отдельные функции в главный namespace Python удобно для интерактивных задач. В настоящих скриптах так делать не стоит — можно случайно перекрыть другие функции с таким же именем.

Создадим список чисел и узнаем их среднее:

В примере результат — 4.6.

Функция fmean делает то же самое, но всегда возвращает результат с плавающей точкой. С помощью неё легко получить и взвешенное среднее.

Взвешенное среднее нашего набора — 4.5

Геометрическое среднее — отличный способ сравнить, например, темпы роста за разные периоды. Обычно для этого приходится возиться с корнями и логарифмами, но Python всё упростит с помощью функции geometric_mean.

Гармоническое среднее — это обратное к среднему арифметическому обратных значений. Его часто используют, когда считают среднюю скорость и похожие показатели. Python справляется с этим одной командой.

Результат — 4. Как видно, гармоническое среднее получилось меньше геометрического, а оно — меньше арифметического (на том же наборе данных).

Теперь очередь у медианы — это “серединка” ряда, число, которое делит данные пополам. Всё просто: использую median.

В нашем примере медиана равна 4.

Функция mode покажет, какое число встречается чаще других.

Снова видим: мода — 4, это самое частое значение среди наших данных.

Часто хочется понять, насколько сильно разбросаны значения. Один из главных показателей тут — стандартное отклонение, оно показывает, насколько ваши данные далеки от среднего. Стандартное отклонение — это просто корень из дисперсии (variance), то есть усреднённой суммы квадратов отличий от среднего. Для “выборочного” отклонения обычно делят не на все значения, а на их количество минус один.

В Python это функция stdev — она считает выборочное стандартное отклонение, а именно его чаще всего используют:

В нашем случае результат — примерно 1.26.

Для генеральной совокупности есть функция pstdev:

Узнать дисперсию — функцией variance.

Для оценки дисперсии по всей совокупности — pvariance.

Чтобы проанализировать распределение данных, полезно разбить их на процентили (например, узнать, сколько процентов попадает ниже определённого значения). Медиана — это 50-й процентиль, то есть половина значений меньше неё.

Функция quantiles как раз разбивает данные по процентили:

Так легко получим нижний квартиль (25%), медиану (50%) и верхний квартиль (75%). Минимум и максимум — стандартные функции min и max.

Регрессия и корреляция

-3

Главный вопрос статистики — связаны ли две переменные. Для этого строят точки на осях X и Y и ищут лучшую прямую между ними — этот метод называется “линейная регрессия”. В модуле statistics для этого есть удобная функция. Такой анализ ещё называют “ordinary least squares” (метод наименьших квадратов) — он ищет прямую, которая минимально отклоняется от всех точек.

Давайте проведём регрессию между двумя массивами — x и y:

Для этого воспользуюсь функцией linear_regression, которая возвращает коэффициенты наклона (slope) и сдвига (intercept) прямой: y = mx b.

Функция сразу выдаёт значения угла наклона и сдвига. Их удобно сохранить в переменные:

В нашем примере наклон равен 2, а сдвиг — 3, то есть регрессионная прямая выглядит как y = 2*x 3. Знак плюс показывает, что прямая “идёт вверх” — чем больше x, тем больше y.

Важно: эта функция только считает коэффициенты, но не строит графики. Она подходит только для парных переменных. Для красивых графиков или анализа с большим количеством переменных нужны другие библиотеки — например, Seaborn, statsmodels или Pingouin.

А вот функция correlation помогает оценить, насколько плотно связаны две переменные — она возвращает коэффициент корреляции r от -1 до 1. Минус — обратная зависимость, плюс — прямая.

Пример: сравним две переменные — и узнаем их коэффициент корреляции:

В нашем случае корреляция равна 1 — идеальная зависимость, такое в реальной жизни почти не бывает. Это просто значит, что регрессионная прямая пройдёт чётко через все точки.

Нормальное распределение

-4

Нормальное распределение — та самая знаменитая “гауссовская колокольная кривая” — расскажет, как часто встречаются значения около среднего. С помощью statistics можно легко понять, какова вероятность того или иного значения, если данные подчиняются нормальному закону.

Покажу на примере: у мужчин старше 20 лет средний рост — 175,1 см. Чтобы узнать стандартное отклонение по всей совокупности, надо умножить корень из количества участников (2 690) на стандартную ошибку — 0,3.

Стандартное отклонение будет примерно 15,56.

Теперь создаём объект нормального распределения:

Чтобы узнать, какой процент мужчин имеют рост от 160 до 180 см, используем кумулятивную функцию распределения (cdf). Она покажет долю людей в этом диапазоне. Так как кривая симметрична, просто вычтем значение cdf для 160 см из значения для 180 см. У нашего объекта есть метод cdf — им и воспользуемся.

В итоге — примерно 45% мужчин имеют рост от 160 до 180 см.

А где же NumPy, SciPy и прочие?

NumPy, SciPy и другие популярные библиотеки незаменимы, если работаешь с настоящим “большими” задачами или сложной аналитикой. Так зачем тогда нужен встроенный statistics? Всё просто: эти библиотеки предназначены для профессионалов и специфических кейсов. А statistics — это уровень обычного научного или графического калькулятора — идеально для учёбы, пробных расчётов и знакомства с основами статистики.

Если тебе выпал серьёзный анализ или требуется подключаться к базам данных, лучше выбрать полнофункциональные библиотеки. Там гораздо больше возможностей, но порог входа выше. А когда хочется быстрый расчет для учебы или первых проб — statistics тебе отлично поможет.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: