Гид по технологиям

Модуль statistics в Python: когда и как использовать встроенные статистические функции

8 min read Python Обновлено 20 Oct 2025
Модуль statistics в Python: руководство и примеры
Модуль statistics в Python: руководство и примеры

Калькулятор с числами и логотипами Python вокруг него.

Содержание

  • Что такое модуль statistics в Python?
  • Описательная статистика
  • Регрессия и корреляция
  • Нормальное распределение
  • Когда переходить на NumPy, SciPy и pandas
  • Быстрый справочник и чек-листы
  • Решающее дерево выбора библиотеки
  • Часто задаваемые вопросы

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

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

Определение в одну строку: statistics — это «набор калькуляторных» статистических инструментов для быстрой интерактивной работы и обучения.

Импорт модуля в коде:

import statistics
# или для интерактивной работы
from statistics import mean, median, stdev

Важно: в скриптах лучше импортировать модуль полностью (import statistics), чтобы избежать случайного переопределения встроенных имён.

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

Дескриптивная статистика в интерактивном интерпретаторе Python с модулем statistics.

Описательная статистика отвечает на вопросы: какова «средняя» величина, насколько значения рассредоточены, какие квантили и какие экстремумы присутствуют. Модуль statistics покрывает большинство базовых потребностей.

Примеры и пояснения (коротко и понятно):

  • mean — арифметическое среднее (сумма делённая на количество);
  • fmean — быстродействующее среднее с переводом в float, поддерживает веса;
  • geometric_mean — геометрическое среднее, полезно для роста/процентных изменений;
  • harmonic_mean — гармоническое среднее, полезно для скоростей и показателей со скоростью в знаменателе;
  • median — медиана, центральный элемент;
  • mode — мода, наиболее часто встречающееся значение;
  • stdev / pstdev — выборочное / популяционное стандартное отклонение;
  • variance / pvariance — аналогично для дисперсии;
  • quantiles — функция для вычисления квантилей.

Пример: простая последовательность и вычисления

from statistics import mean, fmean, geometric_mean, harmonic_mean, median, mode, stdev, pstdev, variance, quantiles

a = [4, 4, 3, 6]
print('mean', mean(a))          # 4.25
print('fmean (с весами)', fmean(a))
print('geometric_mean', geometric_mean(a))
print('harmonic_mean', harmonic_mean(a))
print('median', median(a))
print('mode', mode(a))
print('stdev (выборочная)', stdev(a))
print('pstdev (популяционная)', pstdev(a))
print('variance (выборочная)', variance(a))
print('quantiles', quantiles(a))
print('min/max', min(a), max(a))

Пояснение к весам: fmean принимает необязательный параметр weights — список чисел той же длины, что и данные. Взвешенное среднее полезно, когда наблюдения имеют разную «важность».

Когда использовать каждое среднее — эмпирические правила:

  • Если данные аддитивны и равнозначны — используйте arithmetic mean.
  • Для средних скоростей и масштабированных величин — harmonic mean.
  • Для мультипликативного роста (проценты, ROI) — geometric mean.

Критерии приёмки: функции возвращают значения корректных типов (int/float) и выбрасывают понятные исключения при пустых входах или неверных типах.

Важно: в интерактивных сессиях (Jupyter, IPython) удобно импортировать нужные функции напрямую; в production-скриптах так можно случайно затереть имена.

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

Для быстрого вычисления простой линейной регрессии по двум переменным statistics предоставляет linear_regression — обычный метод наименьших квадратов. Результат — наклон (slope) и сдвиг (intercept) для формулы y = m*x + b.

Пример:

from statistics import linear_regression, correlation
x = [1, 2, 3, 4, 5]
y = [5, 7, 9, 11, 13]

slope, intercept = linear_regression(x, y)
print('slope', slope, 'intercept', intercept)  # slope 2, intercept 3

r = correlation(x, y)
print('correlation r', r)  # 1.0 — идеальная положительная корреляция

Ограничения:

  • linear_regression рассчитывает только простую линейную регрессию (одна зависимая переменная, одна независимая).
  • Не возвращает подробную статистику (p-значения, доверительные интервалы, остатки) — для этого применяют statsmodels или SciPy.
  • Не строит графики — для визуализации используйте matplotlib, Seaborn.

Когда использовать: быстрые проверки гипотез о линейной зависимости при малом объёме данных. Когда нужен полноценный статистический анализ — переходите на более мощные библиотеки.

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

Модуль предоставляет класс NormalDist для работы с нормальным распределением: создание объекта по среднему и стандартному отклонению, вычисление плотности, кумулятивной функции и обратной функции.

Пример с данными о росте мужчин (дано в источнике): среднее 175.1 см. В статье использовалась стандартная ошибка 0.3 и размер выборки 2690. Чтобы оценить стандартное отклонение популяции, произведём расчёт:

import math
sd = math.sqrt(2690) * 0.3
print(sd)  # примерно 15.56

Используя это стандартное отклонение, создадим NormalDist и оценим долю мужчин с ростом между 160 и 180 см:

from statistics import NormalDist
men_height = NormalDist(mu=175.1, sigma=15.56)
prob = men_height.cdf(180) - men_height.cdf(160)
print('Доля между 160 и 180 см ≈', prob)  # примерно 0.458 ≈ 45.8%

Пояснение: cdf(x) возвращает вероятность того, что непрерывная нормальная переменная ≤ x. Поскольку распределение симметрично, разность cdf(верх) − cdf(низ) даёт вероятность попадания в интервал.

Примечание: NormalDist удобен для быстрых оценок и демонстраций, но для больших вычислений и моделирования вероятностных процессов предпочтительнее SciPy и специализированные библиотеки.

Когда переходить на NumPy, SciPy, pandas и др.

Модуль statistics подходит, когда:

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

Следует выбрать более мощные библиотеки в этих случаях:

  • Большие массивы чисел и нужда в векторизированных операциях — NumPy;
  • Табличные данные с разными типами колонок, удобная агрегация, группировка — pandas;
  • Статистический анализ с тестами, доверительными интервалами, регрессией с несколькими предикторами — statsmodels или SciPy;
  • Машинное обучение и обработка больших наборов данных — scikit-learn.

Короткая шпаргалка: если вы заметили, что операции становятся медленными или код превращается в циклы над элементами списков — это сигнал перейти на NumPy/pandas.

Быстрый справочник функций и когда их применять

ЗадачаФункция в statisticsКогда применять
Среднее арифметическоеmeanМалые наборы, образовательные примеры
Быстрое среднее с floatfmeanСкорость и пропуск int→float
Геометрическое среднееgeometric_meanРост/проценты, мультипликативные эффекты
Гармоническое среднееharmonic_meanСредние скорости, отношение величин
МедианаmedianРобастная оценка центра при выбросах
МодаmodeДискретные данные, часто встречающиеся значения
Стандартное отклонение выборочного типаstdevСтандартное отклонение для выборки
Стандартное отклонение популяцииpstdevКогда у вас данные всей популяции
Дисперсия выборочнаяvarianceАналог stdev, в квадрате
КвантилиquantilesРазрезание распределения на квартели/дециль
Простая регрессияlinear_regressionДве переменные, быстрый наклон/интерсепт
КорреляцияcorrelationМера линейной связи r
Нормальное распределениеNormalDistБыстрая модель нормального распр.

Ментальные модели и практические эвристики

  • «Калькулятор» vs «инструментальная панель»: statistics — калькулятор; NumPy/pandas — инструментальная панель для построения конвейеров данных.
  • «Когда сомневаешься, начни со statistics»: быстрый эксперимент в REPL часто даёт понимание данных; затем масштабируй.
  • «Проверяй типы и пустые входы»: большинство функций ожидают непустые и корректно типизированные итерации.

Мини‑методология для анализа небольшого датасета

  1. Инициализация: импортируйте statistics и базовые функции.
  2. Быстрое исследование: min, max, mean, median, stdev, quantiles.
  3. Визуальная проверка: постройте гистограмму и scatter (matplotlib).
  4. Быстрая регрессия/корреляция: linear_regression и correlation.
  5. Решение: если время выполнения и размер данных ОК — продолжайте; если нет — мигрируйте в NumPy/pandas.

Критерии приёмки: результаты совпадают с ожиданиями по типу и величине, нет неожиданных NaN, диапазон значений адекватен.

Чек-листы по ролям

Data Scientist

  • Использовал statistics для первичных проверок.
  • Оценил распределение, выбросы и квантили.
  • При необходимости мигрировал в pandas/statsmodels для продвинутых тестов.

Аналитик

  • Получил mean/median/mode и проверил корреляции.
  • Сгенерировал графики для презентации.
  • При больших данных использовал агрегации в pandas.

Студент/учащийся

  • Понял разницу между средними видами.
  • Практиковался с NormalDist и интерпретацией CDF.
  • Не боялся экспериментировать в Jupyter.

Инженер (production)

  • Не использует from statistics import mean в модуле, чтобы не затереть имена.
  • Пишет тесты на крайние случаи (пустые списки, None, нечисловые значения).
  • При больших потоках данных выбирает векторизованные решения.

Решающее дерево выбора библиотеки

flowchart TD
    A[Начало: есть числовой анализ?] --> B{Нужна ли интерактивность и простота?}
    B -- Да --> C{Объем данных мал?}
    C -- Да --> D[Использовать statistics]
    C -- Нет --> E{Нужна векторизация и скорость?}
    E -- Да --> F[Использовать NumPy/pandas]
    E -- Нет --> D
    B -- Нет --> G{Требуется продвинутая статистика?}
    G -- Да --> H[Использовать statsmodels/SciPy]
    G -- Нет --> F

Тестовые случаи и проверки качества

  • Пустой список: большинство функций выбросят StatisticsError — важно проверять вход заранее.
  • Неполные данные (None, NaN): приводите к числам или фильтруйте перед вызовом функций.
  • Взвешенные средние: длины данных и списка весов должны совпадать.
  • Регрессия: проверьте, что x и y одинаковой длины и содержат хотя бы 2 точки.

Примеры типичных ошибок и когда statistics не подойдёт

  1. Большие массивы и узкие временные рамки — statistics медленнее, чем NumPy.
  2. Многомерная регрессия — statistics не справится.
  3. Нужны p-values, доверительные интервалы, F-тесты — используйте statsmodels.
  4. Работа с категорическими признаками и групповыми агрегатами — удобнее в pandas.

Советы по миграции на NumPy/pandas

  • Замените списки на numpy.array или pandas.Series для векторизованных операций.
  • Проверяйте NaN и типы: pandas умеет хранить смешанные типы и предоставляет удобные методы очистки.
  • Для регрессии с несколькими переменными используйте statsmodels.OLS или sklearn.linear_model.

Часто задаваемые вопросы

Подходит ли statistics для реальных производственных задач?

Для простых подсчётов и небольших наборов — да. Для масштабируемой обработки и сложной статистики — лучше использовать NumPy/pandas/ SciPy.

Можно ли вычислять взвешенное среднее?

Да, fmean поддерживает параметр weights: fmean(data, weights=weights).

Как обрабатывать отсутствующие или нечисловые значения?

Отфильтруйте None/NaN до передачи в функции: [x for x in data if x is not None].

Возвращает ли linear_regression дополнительные статистики (p-value)?

Нет. linear_regression возвращает только slope и intercept. Для расширенной аналитики используйте statsmodels.

Заключение

Модуль statistics — удобный, понятный и доступный инструмент для быстрой описательной статистики и простой регрессии в Python. Используйте его как стартовую точку: он экономит время при исследовании данных и обучении, а при необходимости плавно заменяется на NumPy/pandas/SciPy для больших и сложных задач.

Важно: всегда проверяйте входные данные и их типы, и при переходе в production учитывайте требования к производительности и точности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Включить тактильный отклик на клавиатуре iPhone
How-to

Включить тактильный отклик на клавиатуре iPhone

Как открыть десктопный Facebook на Android
Руководства

Как открыть десктопный Facebook на Android

Как обойти обнаружение AdBlock на YouTube — 2025
Интернет

Как обойти обнаружение AdBlock на YouTube — 2025

Браузерные трекеры: Ghostery и Firefox Focus
Конфиденциальность

Браузерные трекеры: Ghostery и Firefox Focus

Как использовать AnDoSid для тестирования сети
Безопасность

Как использовать AnDoSid для тестирования сети

Просмотр документов онлайн: лучшие способы
Документы

Просмотр документов онлайн: лучшие способы