Как найти среднее, медиану и моду в Python?
Опубликовано: 2021-06-22Среднее значение, медиана и мода - фундаментальные темы статистики. Вы можете легко вычислить их на Python с использованием внешних библиотек и без них.
Эти три основных показателя центральной тенденции. Центральная тенденция позволяет нам узнать «нормальные» или «средние» значения набора данных. Если вы только начинаете заниматься наукой о данных, это руководство для вас.

К концу этого урока вы:
- Понять концепции среднего, медианы и режима
- Уметь создавать свои собственные функции среднего, медианного и режима на Python.
- Используйте модуль статистики Python, чтобы быстро начать использование этих измерений.
Если вам нужна загружаемая версия следующих упражнений, загляните в репозиторий GitHub.
Давайте рассмотрим различные способы вычисления среднего, медианы и моды.
Вычисление среднего в Python
Среднее или среднее арифметическое - наиболее часто используемый показатель центральной тенденции.
Помните, что центральная тенденция - это типичное значение набора данных.
Набор данных - это набор данных, поэтому набор данных в Python может быть любой из следующих встроенных структур данных:
- Списки, кортежи и наборы: набор объектов
- Строки: набор символов
- Словарь: набор пар ключ-значение
Примечание: хотя в Python есть другие структуры данных, такие как очереди или стеки, мы будем использовать только встроенные.
Мы можем вычислить среднее значение, сложив все значения набора данных и разделив результат на количество значений. Например, если у нас есть следующий список чисел:
[1, 2, 3, 4, 5, 6]Среднее или среднее значение будет 3,5, потому что сумма списка равна 21, а его длина равна 6 . Двадцать один разделить на шесть равно 3,5 . Вы можете выполнить этот расчет с помощью следующего расчета:
(1 + 2 + 3 + 4 + 5 + 6) / 6 = 21В этом руководстве мы будем использовать игроков баскетбольной команды в качестве выборки данных.
Создание пользовательской средней функции
Начнем с расчета среднего (среднего) возраста игроков баскетбольной команды. Название команды будет «Pythonic Machines».
pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24] def mean(dataset): return sum(dataset) / len(dataset) print(mean(pythonic_machine_ages))Нарушение этого кода:
- «Pythonic_machine_ages» - это список возрастов баскетболистов.
- Мы определяем функцию mean (), которая возвращает сумму заданного набора данных, деленную на его длину.
- Функция sum () возвращает общую сумму (по иронии судьбы) значений итерируемого, в данном случае списка. Попробуйте передать набор данных в качестве аргумента, он вернет 211
- Функция len () возвращает длину итерации, если вы передадите ей набор данных, вы получите 8
- Мы передаем возраст баскетбольной команды в функцию mean () и выводим результат.
Если вы проверите вывод, вы получите:
26.375 # Because 211 / 8 = 26.375Эти выходные данные представляют средний возраст игроков баскетбольной команды. Обратите внимание, что число не появляется в наборе данных, но точно описывает возраст большинства игроков.
Использование mean () из статистического модуля Python
Расчет показателей центральной тенденции - обычная операция для большинства разработчиков. Это потому, что модуль статистики Python предоставляет различные функции для их вычисления, а также другие основные темы статистики.
Поскольку это часть стандартной библиотеки Python, вам не нужно устанавливать какие-либо внешние пакеты с PIP.
Вот как вы используете этот модуль:
from statistics import mean pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24] print(mean(pythonic_machine_ages))В приведенном выше коде вам просто нужно импортировать функцию mean () из модуля статистики и передать ей набор данных в качестве аргумента. Это вернет тот же результат, что и пользовательская функция, которую мы определили в предыдущем разделе:
26.375Теперь у вас есть кристально ясная концепция среднего, давайте продолжим измерение медианы .
Нахождение медианы в Python
Медиана - это среднее значение отсортированного набора данных. Он снова используется для получения «типичного» значения определенной совокупности.
В программировании мы можем определить медиану как значение, которое разделяет последовательность на две части - нижнюю половину и верхнюю половину -.
Чтобы вычислить медиану, сначала нам нужно отсортировать набор данных. Мы могли бы сделать это с помощью алгоритмов сортировки или с помощью встроенной функции sorted () . Второй шаг - определить, четная или нечетная длина набора данных. В зависимости от этого некоторые из следующих процессов:
- Нечетный: медиана - это среднее значение набора данных.
- Четный: медиана - это сумма двух средних значений, деленная на два.
Продолжая наш набор данных о баскетбольной команде, давайте посчитаем средний рост игроков в сантиметрах:
[181, 187, 196, 196, 198, 203, 207, 211, 215] # Since the dataset is odd, we select the middle value median = 198Как видите, поскольку длина набора данных нечетная, мы можем принять среднее значение в качестве медианы. Однако что произойдет, если игрок просто уйдет на пенсию?
Нам нужно будет вычислить медиану, взяв два средних значения набора данных.
[181, 187, 196, 198, 203, 207, 211, 215] # We select the two middle values, and divide them by 2 median = (198 + 203) / 2 median = 200.5Создание настраиваемой медианной функции
Давайте реализуем вышеуказанную концепцию в функции Python.
Помните три шага, которые нам нужно выполнить, чтобы получить медианное значение набора данных:
- Сортировка набора данных: мы можем сделать это с помощью функции sorted ()
- Определите, четно это или нечетно: мы можем сделать это, получив длину набора данных и используя оператор по модулю (%)
- Возвратите медианное значение для каждого случая:
- Нечетный: вернуть среднее значение.
- Четный: возврат среднего двух средних значений.
Это приведет к следующей функции:
pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215] after_retirement = [181, 187, 196, 198, 203, 207, 211, 215] def median(dataset): data = sorted(dataset) index = len(data) // 2 # If the dataset is odd if len(dataset) % 2 != 0: return data[index] # If the dataset is even return (data[index - 1] + data[index]) / 2Печать результата наших наборов данных:
print(median(pythonic_machines_heights)) print(median(after_retirement))Вывод:
198 200.5Обратите внимание, как мы создаем переменную данных, которая указывает на отсортированную базу данных в начале функции. Хотя приведенные выше списки отсортированы, мы хотим создать функцию многократного использования, поэтому мы будем сортировать набор данных при каждом вызове функции.

Индекс хранит среднее значение - или верхнее среднее значение - набора данных с помощью оператора целочисленного деления . Например, если бы мы передавали список «pythonic_machine_heights», он имел бы значение 4 .
Помните, что в Python индексы последовательности начинаются с нуля, потому что мы можем вернуть средний индекс списка с целочисленным делением.
Затем мы проверяем, является ли длина набора данных нечетной, сравнивая результат операции по модулю с любым значением, отличным от нуля. Если условие истинно, мы возвращаем средний элемент, например, со списком «pythonic_machine_heights»:
>>> pythonic_machine_heights[4] # 198С другой стороны, если набор данных четный, мы возвращаем сумму средних значений, деленную на два. Обратите внимание, что data [index -1] дает нам нижнюю среднюю точку набора данных, а data [index] предоставляет нам верхнюю среднюю точку.
Использование median () из статистического модуля Python
Этот способ намного проще, потому что мы используем уже существующую функцию из модуля статистики.
Лично, если для меня что-то уже определено, я бы использовал это из-за принципа DRY - не повторяйтесь (в этом случае не повторяйте чужой код).
Вы можете рассчитать медианное значение предыдущих наборов данных с помощью следующего кода:
from statistics import median pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215] after_retirement = [181, 187, 196, 198, 203, 207, 211, 215] print(median(pythonic_machines_heights)) print(median(after_retirement))Вывод:
198 200.5Вычисление режима в Python
Режим - это наиболее частое значение в наборе данных. Мы можем думать об этом как о «популярной» группе школы, которая может представлять собой стандарт для всех учеников.
Примером режима могут быть ежедневные распродажи в техническом магазине. Режим этого набора данных будет самым продаваемым продуктом за определенный день.
['laptop', 'desktop', 'smartphone', 'laptop', 'laptop', 'headphones']Как вы понимаете, режим приведенного выше набора данных - «портативный компьютер», потому что это наиболее частое значение в списке.
Самое интересное в режиме - то, что набор данных не должен быть числовым. Например, мы можем работать со строками.
Разберем продажи другого дня:
['mouse', 'camera', 'headphones', 'usb', 'headphones', 'mouse']В приведенном выше наборе данных есть два режима: «мышь» и «наушники», потому что оба имеют частоту два. Это означает, что это мультимодальный набор данных.
Что делать, если мы не можем найти режим в наборе данных, как показано ниже?
['usb', 'camera', 'smartphone', 'laptop', 'TV']Это называется равномерным распределением, в основном это означает, что в наборе данных нет режима.
Теперь у вас есть быстрое представление о концепции режима, давайте рассчитаем его на Python.
Создание функции пользовательского режима
Мы можем рассматривать частоту значения как пару «ключ-значение», другими словами, как словарь Python.
Резюмируя аналогию с баскетболом, мы можем использовать два набора данных для работы: очки за игру и спонсорство кроссовок некоторыми игроками.
Чтобы сначала найти режим, нам нужно создать частотный словарь с каждым из значений, присутствующих в наборе данных, затем получить максимальную частоту и вернуть все элементы с этой частотой.
Давайте переведем это в код:
points_per_game = [3, 15, 23, 42, 30, 10, 10, 12] sponsorship = ['nike', 'adidas', 'nike', 'jordan', 'jordan', 'rebook', 'under-armour', 'adidas'] def mode(dataset): frequency = {} for value in dataset: frequency[value] = frequency.get(value, 0) + 1 most_frequent = max(frequency.values()) modes = [key for key, value in frequency.items() if value == most_frequent] return modesПроверка результата с передачей двух списков в качестве аргументов:
print(mode(points_per_game)) print(mode(sponsorship))Вывод:
[10] ['nike', 'adidas', 'jordan']Как видите, первый оператор печати дал нам один режим, а второй вернул несколько режимов.
Более подробное объяснение приведенного выше кода:
- Объявляем частотный словарь
- Мы перебираем набор данных, чтобы создать гистограмму - статистический термин для набора счетчиков (или частот) -
- Если ключ найден в словаре, он добавляет единицу к значению
- Если он не найден, мы создаем пару ключ-значение со значением один.
- По иронии судьбы, в переменной most_frequent хранится самое большое значение (не ключ) частотного словаря.
- Мы возвращаем переменную режимов, которая состоит из всех ключей в частотном словаре с наибольшей частотой.
Обратите внимание на важность именования переменных для написания читабельного кода.
Использование mode () и multimode () из статистического модуля Python
И снова модуль статистики предоставляет нам быстрый способ выполнять базовые статистические операции.
Мы можем использовать две функции: mode () и multimode ().
from statistics import mode, multimode points_per_game = [3, 15, 23, 42, 30, 10, 10, 12] sponsorship = ['nike', 'adidas', 'nike', 'jordan', 'jordan', 'rebook', 'under-armour', 'adidas']Приведенный выше код импортирует обе функции и определяет наборы данных, с которыми мы работали.
Вот небольшая разница: функция mode () возвращает первый обнаруженный режим, а multimode () возвращает список с наиболее частыми значениями в наборе данных.
print(mode(points_per_game)) print(mode(sponsorship))Вывод:
10 nikeПримечание. В Python 3.8 или выше функция mode () возвращает первый найденный режим. Если у вас более старая версия, вы получите ошибку StatisticsError.
Используя функцию multimode () :
print(multimode(points_per_game)) print(multimode(sponsorship))Вывод:
[10] ['nike', 'adidas', 'jordan']Подводить итоги
Поздравляю ! Если вы проследили это до сих пор, вы узнали, как вычислять среднее, медианное значение и моду, основные измерения центральной тенденции.
Хотя вы можете определить свои собственные функции для поиска среднего, медианного значения и режима, рекомендуется использовать модуль статистики, поскольку он является частью стандартной библиотеки и вам не нужно ничего устанавливать, чтобы начать его использовать.
Затем прочтите дружеское введение в анализ данных в Python.
