W3docs

Среднее, медиана и мода в Python

Как вычислить среднее, медиану и моду в Python с numpy и statistics. Примеры, советы по выбору меры и работа с пропущенными значениями.

Среднее значение, медиана и мода — три фундаментальные меры центральной тенденции в статистике. Каждая из них описывает «центр» набора данных по-своему, и умение выбирать нужную меру — один из первых практических навыков, необходимых при подготовке данных для машинного обучения.

В этой главе рассматриваются:

  • Что означает каждая мера и как она вычисляется
  • Как рассчитать их в Python с помощью numpy и модуля statistics
  • Когда предпочесть одну меру другой
  • Как использовать их для заполнения пропущенных значений (импутация)

Что такое среднее, медиана и мода?

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

МераОпределениеЛучше всего подходит для
СреднееСумма всех значений ÷ количествоСимметричных, нормально распределённых данных
МедианаСреднее значение при сортировкеАсимметричных данных или данных с выбросами
МодаНаиболее часто встречающееся значениеКатегориальных данных или дискретных счётчиков

Понимание распределения данных поможет вам выбрать наиболее подходящую меру для вашего набора данных.

Среднее значение

Среднее арифметическое складывает все значения и делит их на количество.

Формула: mean = (x₁ + x₂ + … + xₙ) / n

Используйте numpy.mean() для вычисления в Python:

Найти среднее значение списка с помощью numpy

python— editable, runs on the server

Когда использовать среднее

Среднее хорошо работает, когда в данных нет экстремальных выбросов и они следуют примерно симметричному распределению. При наличии выбросов они тянут среднее к себе, делая его плохим представителем «типичного» значения.

Среднее и медиана при наличии выброса

import numpy as np

salaries = [40000, 42000, 45000, 48000, 50000, 300000]
print(f"Mean:   {np.mean(salaries):.0f}")    # Output: 87500
print(f"Median: {np.median(salaries):.0f}")  # Output: 46500

Здесь среднее равно 87 500 — значительно выше пяти из шести зарплат — потому что одно экстремальное значение (300 000) смещает его вверх. Медиана (46 500) лучше отражает типичный заработок сотрудника.

Медиана

Медиана — это среднее значение отсортированного набора данных.

  • Нечётное количество значений: средний элемент.
  • Чётное количество значений: среднее двух средних элементов.

Используйте numpy.median():

Найти медиану списка с помощью numpy

python— editable, runs on the server

Набор данных чётной длины — медиана усредняет два средних значения

import numpy as np

data_even = [1, 3, 5, 7]
print(np.median(data_even))  # Output: 4.0  (average of 3 and 5)

Когда использовать медиану

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

Мода

Мода — это значение, которое встречается в наборе данных чаще всего. Набор данных может иметь:

  • Нет моды — если все значения встречаются одинаковое количество раз.
  • Одна мода (унимодальный) — наиболее распространённый случай.
  • Несколько мод (мультимодальный) — два или более значения делят первое место по частоте.

Используйте statistics.mode() из стандартной библиотеки:

Найти моду списка с помощью модуля statistics

python— editable, runs on the server

Работа с мультимодальными данными

statistics.mode() вызывает StatisticsError в Python 3.7 и более ранних версиях при наличии нескольких мод. В Python 3.8+ возвращается первая обнаруженная мода. Чтобы безопасно получить все моды, используйте statistics.multimode():

Найти все моды, когда данные имеют несколько пиков

import statistics

votes = [1, 1, 2, 2, 3]
print(statistics.multimode(votes))  # Output: [1, 2]

Мода для числовых данных

Мода наиболее естественна для категориальных или дискретных целочисленных данных, но работает и с непрерывными числовыми данными:

import statistics

scores = [10, 20, 20, 30, 40]
print(statistics.mode(scores))  # Output: 20

Когда использовать моду

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

Сравнение всех трёх мер

Пример ниже показывает, как среднее, медиана и мода расходятся на асимметричном наборе данных. Несколько пожилых сотрудников тянут среднее вверх, тогда как медиана и мода остаются близко к тому месту, где фактически сосредоточены данные:

Сравнить среднее, медиану и моду на асимметричных данных

import numpy as np
import statistics

ages = [22, 23, 24, 24, 25, 25, 25, 26, 60]

print(f"Mean:   {np.mean(ages):.1f}")         # Output: 28.2
print(f"Median: {np.median(ages):.1f}")       # Output: 25.0
print(f"Mode:   {statistics.mode(ages)}")     # Output: 25

Среднее (28,2) смещено вверх единственным 60-летним сотрудником. Медиана и мода (обе равны 25) точно отражают типичного сотрудника.

Использование среднего и медианы для импутации пропущенных значений

Распространённый шаг предобработки перед обучением модели — замена пропущенных значений (NaN) репрезентативной статистикой. Этот процесс называется импутацией.

  • Импутация средним — замена NaN средним значением столбца. Быстро, но чувствительно к выбросам.
  • Импутация медианой — замена NaN медианой. Устойчива к выбросам; предпочтительна для асимметричных признаков.
  • Импутация модой — замена NaN наиболее частым значением. Подходит для категориальных столбцов.

Импутация средним с помощью numpy

import numpy as np

data = [10.0, 20.0, float('nan'), 40.0, 50.0]
mean_val = np.nanmean(data)          # ignores NaN: (10+20+40+50)/4 = 30.0
imputed = [mean_val if np.isnan(x) else x for x in data]
print(imputed)
# Output: [10.0, 20.0, 30.0, 40.0, 50.0]

В продакшн-коде обычно используют sklearn.impute.SimpleImputer, который удобно интегрируется в конвейеры scikit-learn и применяет одни и те же подобранные статистики как к обучающему, так и к тестовому набору данных.

Краткий справочник: какую меру выбрать

СценарийРекомендуемая мера
Нормально распределённые числовые данныеСреднее
Асимметричные числовые данные (доходы, цены)Медиана
Данные с экстремальными выбросамиМедиана
Категориальные данные (метки, цвета)Мода
Импутация числовых столбцов с выбросамиМедиана
Импутация категориальных столбцовМода
Поиск наиболее популярного значенияМода

Связанные темы

Заключение

Среднее, медиана и мода каждая по-своему отражают центр данных. Среднее — наиболее распространённый выбор по умолчанию, но оно неустойчиво при наличии выбросов. Медиана устойчива к выбросам и должна быть первым выбором для асимметричных распределений. Мода незаменима для категориальных данных и запросов на «наиболее распространённое значение». В машинном обучении все три меры регулярно используются при разведочном анализе данных и импутации пропущенных значений — правильный выбор для каждого столбца приводит к более чистым признакам и лучшей производительности модели.

Was this page helpful?