Як знайти середнє значення, медіану та моду в Python?

Середнє значення, медіана та мода є основними темами статистики. Ви можете легко обчислити їх на Python, з використанням зовнішніх бібліотек і без них.

Ці три основні заходи Центральна тенденція. Центральна тенденція дозволяє нам знати «нормальні» або «середні» значення набору даних. Якщо ви тільки починаєте займатися наукою про дані, це підручник для вас.

До кінця цього підручника ви:

  • Зрозумійте поняття середнього значення, медіани та моди
  • Уміти створювати власні функції середнього значення, медіани та моди в Python
  • Скористайтеся модулем статистики Python, щоб швидко почати використовувати ці вимірювання

Якщо вам потрібна версія наведених нижче вправ для завантаження, сміливо перегляньте Репозиторій GitHub.

Розглянемо різні способи обчислення середнього значення, медіани та моди.

Обчислення середнього значення в Python

The означає або середнє арифметичне є найбільш використовуваною мірою центральної тенденції.

Пам’ятайте, що центральна тенденція є типовим значенням набору даних.

Набір даних — це набір даних, тому набір даних у 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

The медіана це середнє значення відсортованого набору даних. Він використовується — знову ж таки — для надання «типового» значення детермінованого населення.

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

Щоб обчислити медіану, спочатку нам потрібно відсортувати набір даних. Ми могли б зробити це за допомогою алгоритмів сортування або за допомогою вбудованої функції 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

Зверніть увагу, як ми створюємо змінну даних, яка вказує на відсортовану базу даних на початку функції. Незважаючи на те, що наведені вище списки відсортовано, ми хочемо створити функцію для багаторазового використання, тому сортувати набір даних кожного разу, коли функція викликається.

  Хочете створити стартап Femtech? Ось як

Індекс зберігає середнє значення — або верхнє середнє значення — набору даних за допомогою оператора цілочисельного ділення. Наприклад, якби ми передавали список «pythonic_machine_heights», він мав би значення 4.

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

Потім ми перевіряємо, чи є довжина набору даних непарною, порівнюючи результат операції за модулем із будь-яким значенням, яке не дорівнює нулю. Якщо умова виконується, ми повертаємо середній елемент, наприклад, зі списком “pythonic_machine_heights”:

>>> pythonic_machine_heights[4]
# 198

З іншого боку, якщо набір даних парний, ми повертаємо суму середніх значень, поділену на два. Зауважте, що дані[index -1] дає нам нижню середину набору даних, а data[index] дає нам верхню середню точку.

Використання median() із статистичного модуля Python

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

Особисто, якщо для мене щось уже визначено, я б використав це через принцип DRY —Don’t repeat yourself — (у цьому випадку не повторюйте чужий код).

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

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

The режим є найбільш частим значенням у наборі даних. Ми можемо розглядати це як «популярну» групу школи, яка може представляти стандарт для всіх учнів.

Прикладом режиму можуть бути щоденні розпродажі в магазині техніки. Режим цього набору даних буде найбільш продаваним продуктом певного дня.

['laptop', 'desktop', 'smartphone', 'laptop', 'laptop', 'headphones']

Як ви розумієте, режим вищенаведеного набору даних — «ноутбук», оскільки це було найпоширеніше значення в списку.

Цікава особливість режиму полягає в тому, що набір даних не має бути числовим. Наприклад, ми можемо працювати з рядками.

Проаналізуємо розпродажі іншого дня:

['mouse', 'camera', 'headphones', 'usb', 'headphones', 'mouse']

Набір даних вище має два режими: «миша» та «навушники», оскільки обидва мають дві частоти. Це означає, що це а мультимодальний набір даних.

Що робити, якщо ми не можемо знайти режим у наборі даних, як показано нижче?

['usb', 'camera', 'smartphone', 'laptop', 'TV']

Це називається a рівномірний розподілпо суті, це означає, що в наборі даних немає режиму.

  Як зробити прозорий фон в MS Paint

Тепер ви швидко зрозуміли концепцію режиму, давайте обчислимо його на 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']

Як бачите, перший оператор print дав нам один режим, тоді як другий повернув декілька режимів.

Пояснення коду вище:

  • Оголошуємо частотний словник
  • Ми повторюємо набір даних, щоб створити a гістограма — статистичний термін для набору лічильників (або частот) —
    • Якщо ключ знайдено у словнику, він додає одиницю до значення
    • Якщо його не знайдено, ми створюємо пару ключ-значення зі значенням одиниці
  • Змінна most_frequent зберігає — за іронією долі — найбільше значення (не ключ) частотного словника
  • Ми повертаємо змінну modes, яка складається з усіх ключів у частотному словнику з найбільшою частотою.

Зверніть увагу, наскільки важливим є іменування змінних для написання читабельного коду.

Використання mode() і multimode() із статистичного модуля Python

Знову модуль статистики надає нам швидкий спосіб виконувати основні статистичні операції.

Ми можемо використовувати дві функції: режим() і багаторежимний().

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() повертає список із найбільш частими значеннями в наборі даних.

Отже, ми можемо сказати, що призначена нами функція насправді є функцією multimode().

print(mode(points_per_game))
print(mode(sponsorship))

Вихід:

10
nike

Примітка. У Python 3.8 або новіших версіях функція mode() повертає перший знайдений режим. Якщо у вас є старіша версія, ви отримаєте a StatisticsError.

Використання функції multimode():

print(multimode(points_per_game))
print(multimode(sponsorship))

Вихід:

[10]
['nike', 'adidas', 'jordan']

Підсумовуючи

Щиро вітаю! Якщо ви дотримувалися цього, ви навчилися обчислювати середнє значення, медіану та моду, основні вимірювання центральної тенденції.

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

Далі прочитайте дружній вступ до аналізу даних у Python.