Как найти моду в python
Перейти к содержимому

Как найти моду в python

  • автор:

Mean, mode, median, deviation and quantiles in Python

Denys Golotiuk

Quick explanation and Python examples on how to calculate most popular statistical metrics for data analysis. We’re going to use awesome Numpy package for our examples.

Mean is an average of all values in the dataset:

Median

Median, on the contrary, is the value which divides the whole dataset into 2 sets of values:

To calculate median, we should first sort our dataset, then divide it into 2 sets, and then pick value which is in the center of 2 sets:

  1. If we have odd number of values in original set, we just sort the set and pick central value.
  2. If we have even number of values, we should calculate average of 2 central values after sorting.

Median is better than average, as “strange” values (like 40 in our case) will have less impact on the resulting value:

At the same time, median value better describes point, which most values are distributed around.

Mode shows the most popular value in the dataset:

Unfortunately Numpy lacks mode calculation, but it can be done using scipy package.

Quantiles

Quantile is a way to say how many values in original dataset is less than certain level:

So 0.75 quantile (the same as 75% percentile) is a smallest value which is bigger than 75% of the smallest values from dataset. Most popular quantiles are 0.25, .50 and .75:

As you can see, 0.50 quantile (or 50% percentile) is the same as median.

Deviation

Deviation allows to evaluate how values are far from each other. In other words — how big values spread is. Most popular method for calculating deviation is based on values distance from average:

If we calculate all distances, then sum their squares (in order to make all values positive) and divide by number of values in dataset, we get square of standard deviation:

Rukovodstvo

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

Вычисление среднего, медианы и моды в Python

Введение Когда мы пытаемся описать и обобщить выборку данных, мы, вероятно, начинаем с нахождения среднего [https://en.wikipedia.org/wiki/Mean] (или среднего), медианы [https: // en .wikipedia.org / wiki / Median] и режим [https://en.wikipedia.org/wiki/Mode_(statistics)] данных. Это центральная тенденция [https://en.wikipedia.org/wiki/Central_tendency] меры и часто первый взгляд на набор данных. В этом руководстве мы узнаем, как найти или вычислить среднее значение, медиану,

Время чтения: 9 мин.

Вступление

Когда мы пытаемся описать и обобщить выборку данных, мы, вероятно, начинаем с нахождения среднего (или среднего), медианы и режима данных. Это основные меры тенденций, которые часто являются нашим первым взглядом на набор данных.

В этом руководстве мы узнаем, как найти или вычислить среднее значение, медиану и режим в Python. Сначала мы закодируем функцию Python для каждой меры, а затем воспользуемся statistics Python для выполнения той же задачи.

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

Оглавление

Расчет среднего значения выборки

Если у нас есть выборка числовых значений, то ее среднее или среднее

  • это общая сумма значений (или наблюдений), деленная на количество значений.

Допустим, у нас есть образец [4, 8, 6, 5, 3, 2, 8, 9, 2, 5] . Мы можем вычислить его среднее значение, выполнив операцию:

(4 + 8 + 6 + 5 + 3 + 2 + 8 + 9 + 2 + 5) / 10 = 5,2

Среднее арифметическое — это общее описание наших данных. Предположим, вы купили 10 фунтов помидоров. Если пересчитать дома помидоры, получится 25 помидоров. В этом случае вы можете сказать, что средний вес помидора составляет 0,4 фунта. Это было бы хорошее описание ваших помидоров.

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

Насколько хорошо или плохо среднее значение описывает выборку, зависит от того, насколько разбросаны данные. В случае помидоров, они почти одинакового веса, и среднее значение является хорошим их описанием. В случае с собаками нет актуальных собак. Они могут варьироваться от крошечного чихуахуа до гигантского немецкого мастифа. Итак, среднее само по себе в данном случае не очень хорошее описание.

Теперь пора приступить к делу и узнать, как вычислить среднее значение с помощью Python.

Расчет среднего с помощью Python

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

Первая функция — это sum() . Эта встроенная функция принимает итерацию числовых значений и возвращает их общую сумму.

Вторая функция — len() . Эта встроенная функция возвращает длину объекта. len() может принимать в качестве аргумента последовательности (строка, байты, кортеж, список или диапазон) или коллекции (словарь, набор или замороженный набор).

Вот как мы можем вычислить среднее значение:

Сначала мы суммируем значения в sample используя sum() . Затем мы делим эту сумму на длину sample , которая является результирующим значением len(sample) .

Использование Python mean ()

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

Вот как работает функция mean() Python:

Нам просто нужно импортировать statistics а затем вызвать mean() с нашим образцом в качестве аргумента. Это вернет среднее значение выборки. Это быстрый способ найти среднее значение с помощью Python.

Нахождение медианы выборки

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

Чтобы найти медиану, нам необходимо:

    образец
  1. Найдите значение в середине отсортированного образца

При нахождении числа в центре отсортированной выборки мы можем столкнуться с двумя типами ситуаций:

  1. Если в выборке есть нечетное количество наблюдений , то среднее значение в отсортированной выборке — это медиана.
  2. Если в выборке есть четное количество наблюдений , нам нужно вычислить среднее из двух средних значений в отсортированной выборке.

Если у нас есть выборка [3, 5, 1, 4, 2] и мы хотим найти ее медиану, то сначала мы сортируем выборку по [1, 2, 3, 4, 5] . Медиана будет равна 3 поскольку это значение посередине.

С другой стороны, если у нас есть выборка [1, 2, 3, 4, 5, 6] , то ее медиана будет (3 + 4) / 2 = 3.5 .

Давайте посмотрим, как мы можем использовать Python для вычисления медианы.

Поиск медианы с помощью Python

Чтобы найти медиану, нам сначала нужно отсортировать значения в нашей выборке . Этого можно добиться с помощью встроенной функции sorted() sorted() принимает итерацию и возвращает отсортированный list содержащий те же значения, что и исходная итерация.

Второй шаг — найти значение, которое находится в середине отсортированной выборки. Чтобы найти это значение в выборке с нечетным количеством наблюдений, мы можем разделить количество наблюдений на 2. Результатом будет индекс значения в середине отсортированной выборки.

Поскольку оператор деления ( / ) возвращает число с плавающей запятой, нам нужно использовать оператор деления этажа ( // ), чтобы получить целое число. Итак, мы можем использовать его как индекс в операции индексации ( [] ).

Если в выборке есть четное количество наблюдений, нам нужно найти два средних значения. Скажем, у нас есть образец [1, 2, 3, 4, 5, 6] . Если мы разделим его длину ( 6 ) на 2 с помощью деления пола, то получим 3 . Это индекс нашего верхнего среднего значения ( 4 ). Чтобы найти индекс нашего нижнего среднего значения ( 3 ), мы можем уменьшить индекс верхнего среднего значения на 1 .

Давайте объединим все это в функцию, которая вычисляет медиану выборки. Вот возможная реализация:

Эта функция берет образец числовых значений и возвращает их медиану. Сначала мы находим длину образца n . Затем мы вычисляем индекс среднего значения (или верхнего среднего значения) путем деления n на 2 .

Оператор if проверяет, есть ли в имеющейся выборке нечетное количество наблюдений. Если да, то медиана — это значение index .

Окончательный return выполняется, если в выборке есть четное количество наблюдений. В этом случае мы находим медиану, вычисляя среднее из двух средних значений.

Обратите внимание, что операция нарезки [index — 1:index + 1] получает два значения. Значение в index — 1 и значение в index поскольку операции нарезки исключают значение в конечном индексе ( index + 1 ).

Использование медианы Python ()

Функция Python statistics.median() берет выборку данных и возвращает ее медиану. Вот как работает метод:

Обратите внимание, что median() автоматически обрабатывает вычисление медианы для выборок с нечетным или четным числом наблюдений.

Поиск режима образца

Режим — это наиболее частое наблюдение (или наблюдения) в выборке. Если у нас есть образец [4, 1, 2, 2, 3, 5] , то его режим равен 2 потому что 2 появляется в образце два раза, тогда как другие элементы появляются только один раз.

Режим не обязательно должен быть уникальным. Некоторые образцы имеют более одного режима. Скажем, у нас есть образец [4, 1, 2, 2, 3, 5, 4] . В этом примере есть два режима — 2 и 4 потому что эти значения появляются чаще и оба появляются одинаковое количество раз.

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

  • логическое значение — может принимать только два значения, например true или false , male или female
  • номинальный — может принимать более двух значений, например, American — European — Asian — African
  • порядковый — может принимать более двух значений, но значения имеют логический порядок, например, few — some — many

Когда мы анализируем набор категориальных данных, мы можем использовать этот режим, чтобы узнать, какая категория является наиболее распространенной в наших данных.

Мы можем найти образцы, у которых нет режима. Если все наблюдения уникальны (нет повторяющихся наблюдений), то в вашей выборке не будет режима.

Теперь, когда мы знаем основы режима, давайте посмотрим, как его найти с помощью Python.

Поиск режима с помощью Python

Чтобы найти режим с помощью Python, мы начнем с подсчета количества вхождений каждого значения в рассматриваемом примере. Затем мы получим значения с большим количеством вхождений.

Поскольку подсчет объектов — обычная операция, Python предоставляет класс collections.Counter Этот класс специально разработан для подсчета предметов.

Класс Counter предоставляет метод, определенный как .most_common([n]) . Этот метод возвращает list кортежей из двух элементов с n более общими элементами и их соответствующими счетчиками. Если n опущено или None , то .most_common() возвращает все элементы.

Давайте воспользуемся Counter и .most_common() чтобы закодировать функцию, которая берет образец данных и возвращает свой режим.

Вот возможная реализация:

Сначала мы подсчитываем наблюдения в sample с помощью объекта Counter c ). Затем мы используем составление списка, чтобы создать list содержащий наблюдения, которые встречаются в выборке одинаковое количество раз.

Поскольку .most_common(1) возвращает list с одним tuple формы (observation, count) , нам нужно получить наблюдение с индексом 0 в list а затем элемент с индексом 1 во вложенном tuple . Это можно сделать с помощью выражения c.most_common(1)[0][1] . Это значение является первым режимом нашего образца.

Обратите внимание, что условие понимания сравнивает счетчик каждого наблюдения ( v ) со счетчиком наиболее распространенного наблюдения ( c.most_common(1)[0][1] ). Это позволит нам получить несколько наблюдений ( k ) с одним и тем же подсчетом в случае многомодовой выборки.

Использование режима Python ()

Python statistics.mode() принимает некоторые data и возвращает свой (первый) режим. Посмотрим, как это можно использовать:

В одномодовом примере функция Python mode() возвращает наиболее распространенное значение 2 . Однако в следующих двух примерах он вернул 4 и few . В этих образцах были другие элементы, встречающиеся такое же количество раз, но они не были включены.

Начиная с Python 3.8 мы также можем использовать statistics.multimode() который принимает итерацию и возвращает list режимов.

Вот пример использования multimode() :

Примечание . Функция всегда возвращает list , даже если вы передаете одномодовый образец.

Заключение

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

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

Как найти среднее значение, медиану и моду в Python?

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

Эти три меры являются основными Главная тенденция. Центральная тенденция позволяет нам узнать «нормальные» или «средние» значения набора данных. Если вы только начинаете заниматься наукой о данных, это руководство для вас.

К концу этого урока вы:

  • Понимание понятия среднего, медианы и моды
  • Уметь создавать свои собственные функции среднего, медианы и режима в Python.
  • Используйте модуль статистики Python, чтобы быстро начать использовать эти измерения.

Если вам нужна загружаемая версия следующих упражнений, не стесняйтесь проверить Репозиторий GitHub.

Давайте рассмотрим различные способы вычисления среднего значения, медианы и моды.

Вычисление среднего значения в Python

иметь в виду или среднее арифметическое является наиболее часто используемой мерой центральной тенденции.

Помните, что центральная тенденция является типичным значением набора данных.

Набор данных — это набор данных, поэтому набор данных в Python может быть любой из следующих встроенных структур данных:

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8
  • Списки, кортежи и наборы: коллекция объектов
  • Строки: набор символов
  • Словарь: набор пар ключ-значение

Примечание. Хотя в Python есть и другие структуры данных, такие как очереди или стеки, мы будем использовать только встроенные.

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

Среднее значение будет 3,5, потому что сумма списка равна 21, а его длина равна 6. Двадцать один разделить на шесть равно 3,5. Вы можете выполнить этот расчет с помощью следующего расчета:

В этом уроке мы будем использовать игроков баскетбольной команды в качестве примера данных.

Создание пользовательской функции среднего

Начнем с расчета среднего (среднего) возраста игроков баскетбольной команды. Название команды будет «Pythonic Machines».

Разбираем этот код:

  • «pythonic_machine_ages» — это список возрастов баскетболистов.
  • Мы определяем функцию mean(), которая возвращает сумму данного набора данных, деленную на его длину.
    • Функция sum() возвращает общую сумму (по иронии судьбы) значений итерируемого объекта, в данном случае списка. Попробуйте передать набор данных в качестве аргумента, он вернет 211
    • Функция len() возвращает длину итерации, если вы передадите ей набор данных, вы получите 8

    Если вы проверите вывод, вы получите:

    Этот результат представляет собой средний возраст игроков баскетбольной команды. Обратите внимание, что число не появляется в наборе данных, но точно описывает возраст большинства игроков.

    Использование mean() из статистического модуля Python

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

    Поскольку это часть Стандартная библиотека Python вам не нужно будет устанавливать какой-либо внешний пакет с PIP.

    Вот как вы используете этот модуль:

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

    Теперь у вас есть кристально ясное понятие среднего, давайте продолжим измерение медианы.

    Нахождение медианы в Python

    медиана является средним значением отсортированного набора данных. Он используется — опять же — для предоставления «типичного» значения определенного Население.

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

    Чтобы вычислить медиану, сначала нам нужно отсортировать набор данных. Мы могли бы сделать это с помощью алгоритмов сортировки или с помощью встроенной функции sorted(). Второй шаг — определить, является ли длина набора данных четной или нечетной. В зависимости от этого некоторые из следующих процессов:

    • Нечетный: медиана — это среднее значение набора данных.
    • Четное: медиана представляет собой сумму двух средних значений, деленную на два.

    Продолжая работу с набором данных нашей баскетбольной команды, давайте рассчитаем средний рост игроков в сантиметрах:

    Как видите, поскольку длина набора данных нечетная, мы можем взять среднее значение в качестве медианы. Однако что произойдет, если игрок только что вышел на пенсию?

    Нам нужно будет вычислить медиану, взяв два средних значения набора данных.

    Создание пользовательской медианной функции

    Давайте реализуем описанную выше концепцию в функции Python.

    Помните три шага, которые нам нужно выполнить, чтобы получить медиану набора данных:

    • Сортировка набора данных: мы можем сделать это с помощью функции sorted()
    • Определите, является ли он нечетным или четным: мы можем сделать это, получив длину набора данных и используя оператор по модулю (%)
    • Верните медиану на основе каждого случая:
      • Нечетный: вернуть среднее значение
      • Даже: возвращает среднее значение двух средних значений.

      Это приведет к следующей функции:

      Печать результата наших наборов данных:

      Обратите внимание, как мы создаем переменную данных, которая указывает на отсортированную базу данных в начале функции. Хотя приведенные выше списки отсортированы, мы хотим создать повторно используемую функцию, поэтому набор данных будет сортироваться при каждом вызове функции.

      Индекс сохраняет среднее значение — или верхне-среднее значение — набора данных с помощью оператора целочисленного деления. Например, если бы мы передавали список «pythonic_machine_heights», он имел бы значение 4.

      Помните, что в Python индексы последовательности начинаются с нуля, потому что мы можем вернуть средний индекс списка с целочисленным делением.

      Затем мы проверяем, является ли длина набора данных нечетной, сравнивая результат операции по модулю с любым значением, отличным от нуля. Если условие истинно, мы возвращаем средний элемент, например, со списком «pythonic_machine_heights»:

      С другой стороны, если набор данных четный, мы возвращаем сумму средних значений, деленную на два. Обратите внимание, что данные[index -1] дает нам нижнюю среднюю точку набора данных, а данные[index] дает нам верхнюю среднюю точку.

      Использование median() из статистического модуля Python

      Этот способ намного проще, потому что мы используем уже существующую функцию из модуля статистики.

      Лично для меня, если бы что-то уже было определено, я бы использовал это из-за принципа DRY — Don’t Repeat Yourself (в данном случае — не повторять чужой код).

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

      Вычисление режима в Python

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

      Примером режима могут быть ежедневные продажи в магазине техники. Режим этого набора данных будет самым продаваемым продуктом за определенный день.

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

      Преимущество режима в том, что набор данных не должен быть числовым. Например, мы можем работать со строками.

      Проанализируем продажи другого дня:

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

      Что, если мы не сможем найти моду в наборе данных, как показано ниже?

      Это называется равномерное распределениепо сути, это означает, что в наборе данных нет моды.

      Теперь, когда вы быстро разобрались с концепцией режима, давайте посчитаем его в Python.

      Создание функции пользовательского режима

      Мы можем думать о частоте значения как о паре ключ-значение, другими словами, как о словаре Python.

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

      Чтобы сначала найти моду, нам нужно создать словарь частот с каждым из значений, присутствующих в наборе данных, затем получить максимальную частоту и вернуть все элементы с этой частотой.

      Переведем это в код:

      Проверка результата с передачей двух списков в качестве аргументов:

      Как видите, первый оператор печати дал нам один режим, а второй вернул несколько режимов.

      Объяснение более глубокого кода выше:

      • Объявляем частотный словарь
      • Мы перебираем набор данных, чтобы создать гистограмма — статистический термин для набора счетчиков (или частот) —
        • Если ключ найден в словаре, то он добавляет единицу к значению
        • Если он не найден, мы создаем пару ключ-значение со значением один

        Обратите внимание, как важно именовать переменные для написания читаемого кода.

        Использование режима() и мультимода() из статистического модуля Python

        И снова модуль статистики предоставляет нам быстрый способ выполнения основных операций со статистикой.

        Мы можем использовать две функции: Режим() а также многомодовый().

        Приведенный выше код импортирует обе функции и определяет наборы данных, с которыми мы работали.

        Вот небольшое отличие: функция mode() возвращает первый обнаруженный режим, а multimode() возвращает список с наиболее часто встречающимися значениями в наборе данных.

        Следовательно, мы можем сказать, что пользовательская функция, которую мы определили, на самом деле является функцией multimode().

        Примечание. В Python 3.8 и более поздних версиях функция mode() возвращает первый найденный режим. Если у вас более старая версия, вы получите СтатистикаОшибка.

        Использование функции multimode():

        Подводить итоги

        Поздравляем! Если вы дочитали до этого момента, вы научились вычислять среднее значение, медиану и моду, основные измерения центральной тенденции.

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

        Finding the mode of a list

        Given a list of items, recall that the mode of the list is the item that occurs most often.

        I would like to know how to create a function that can find the mode of a list but that displays a message if the list does not have a mode (e.g., all the items in the list only appear once). I want to make this function without importing any functions. I’m trying to make my own function from scratch.

        27 Answers 27

        You can use the max function and a key. Have a look at python max function using ‘key’ and lambda expression.

        vvvvv's user avatar

        You can use the Counter supplied in the collections package which has a mode -esque function

        Note: Counter is new in python 2.7 and is not available in earlier versions.

        Christian Witts's user avatar

        Python 3.4 includes the method statistics.mode , so it is straightforward:

        You can have any type of elements in the list, not just numeric:

        jabaldonedo's user avatar

        Taking a leaf from some statistics software, namely SciPy and MATLAB, these just return the smallest most common value, so if two values occur equally often, the smallest of these are returned. Hopefully an example will help:

        Is there any reason why you can ‘t follow this convention?

        There are many simple ways to find the mode of a list in Python such as:

        Or, you could find the max by its count

        The problem with those two methods are that they don’t work with multiple modes. The first returns an error, while the second returns the first mode.

        In order to find the modes of a set, you could use this function:

        Extending the Community answer that will not work when the list is empty, here is working code for mode:

        In case you are interested in either the smallest, largest or all modes:

        tashuhka's user avatar

        A little longer, but can have multiple modes and can get string with most counts or mix of datatypes.

        Mode of a data set is/are the member(s) that occur(s) most frequently in the set. If there are two members that appear most often with same number of times, then the data has two modes. This is called bimodal.

        If there are more than 2 modes, then the data would be called multimodal. If all the members in the data set appear the same number of times, then the data set has no mode at all.

        Following function modes() can work to find mode(s) in a given list of data:

        If we do not want to import numpy or pandas to call any function from these packages, then to get this same output, modes() function can be written as:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *