В двух словах
В экосистеме Python полно продвинутых инструментов для аналитики, но для повседневных задач тебе не нужно ничего сверхсложного. Встроенный модуль statistics часто оказывается самым удобным выбором. Он облегчает жизнь: забудь о заучивании формул и ручном поиске справочных таблиц!
Что такое модуль statistics в Python?
Модуль statistics — это встроенный инструмент Python для базовых статистических расчётов. Он уже есть в любой стандартной установке Python, всё, что нужно — просто импортировать.
В интерактивных сессиях, например в IPython или Jupyter, удобно импортировать отдельные функции прямо — это избавляет от лишнего написания имени модуля. В этой статье я буду использовать именно такой способ.
Особенно полезен модуль statistics в интерактивном режиме — будь то стандартный интерпретатор, улучшенный IPython или Jupyter-ноутбук.
Описательная статистика
Самое важное в статистике — это описательные показатели: они быстро дают понять, что спрятано в твоих данных. Сюда входят самые разные “средние”, “разброс” и прочее.
Сначала посмотрим на классическое среднее (арифметическое): сложи все значения и раздели на их количество. В учебниках это называют “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.
Регрессия и корреляция
Главный вопрос статистики — связаны ли две переменные. Для этого строят точки на осях 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 — идеальная зависимость, такое в реальной жизни почти не бывает. Это просто значит, что регрессионная прямая пройдёт чётко через все точки.
Нормальное распределение
Нормальное распределение — та самая знаменитая “гауссовская колокольная кривая” — расскажет, как часто встречаются значения около среднего. С помощью 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 тебе отлично поможет.
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru