Статистики: sum, mean, std, min, max, cumsum

Статистики: sum, mean, std, min, max, cumsum NumPy

Привет! NumPy предоставляет мощный набор статистических функций для работы с массивами. Они позволяют быстро вычислять основные характеристики данных: сумму, среднее, стандартное отклонение, минимум, максимум и накопленные суммы.

В этой статье мы разберём:

  • np.sum() — сумма элементов
  • np.mean() — среднее значение
  • np.std() — стандартное отклонение
  • np.min() / np.max() — минимум и максимум
  • np.cumsum() — накопленная сумма
  • Вычисления по осям (axis)
  • Практические примеры

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный NumPy
  • Базовое понимание массивов и форм

Совет: Статистические функции NumPy работают значительно быстрее, чем вычисления в Python-циклах.

Основная часть

np.sum() — сумма элементов

np.sum() вычисляет сумму всех элементов массива.

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
print(np.sum(arr))   # 15

# Сумма по умолчанию — все элементы
print(arr.sum())     # 15

Совет: arr.sum() — метод массива, np.sum(arr) — функция. Оба работают одинаково.

np.mean() — среднее значение

np.mean() вычисляет среднее арифметическое.

arr = np.array([1, 2, 3, 4, 5])
print(np.mean(arr))   # 3.0

arr2 = np.array([10, 20, 30])
print(np.mean(arr2))  # 20.0

np.std() — стандартное отклонение

np.std() показывает разброс данных относительно среднего.

arr = np.array([1, 2, 3, 4, 5])
print(np.std(arr))   # 1.4142135623730951

arr2 = np.array([1, 2, 100, 200])
print(np.std(arr2))  # 80.302...

Совет: Чем больше стандартное отклонение, тем больше разброс данных.

np.min() и np.max() — минимум и максимум

arr = np.array([3, 1, 4, 1, 5, 9, 2])
print(np.min(arr))   # 1
print(np.max(arr))   # 9

# Индекс минимума/максимума
print(np.argmin(arr))   # 1
print(np.argmax(arr))   # 5

Совет: argmin() и argmax() возвращают индексы первого вхождения.

np.cumsum() — накопленная сумма

np.cumsum() возвращает массив с накопленными суммами.

arr = np.array([1, 2, 3, 4, 5])
print(np.cumsum(arr))   # [ 1  3  6 10 15]

# Накопленная сумма с шагом
arr2 = np.array([5, -2, 3, 1])
print(np.cumsum(arr2))  # [5 3 6 7]

Совет: cumsum() часто используется для вычисления cumulative sums в анализе данных.

Вычисления по осям (axis)

Параметр axis позволяет вычислять статистику по строкам (axis=1) или столбцам (axis=0).

matrix = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

# Сумма всех элементов
print(np.sum(matrix))   # 45

# Сумма по столбцам (axis=0)
print(np.sum(matrix, axis=0))   # [12 15 18]

# Сумма по строкам (axis=1)
print(np.sum(matrix, axis=1))   # [ 6 15 24]

# Среднее по столбцам
print(np.mean(matrix, axis=0))  # [4. 5. 6.]

# Максимум по строкам
print(np.max(matrix, axis=1))   # [3 6 9]

Совет: axis=0 — вдоль строк (сверху вниз), axis=1 — вдоль столбцов (слева направо).

Статистики для многомерных массивов

arr_3d = np.array([
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
])

print("Сумма:", np.sum(arr_3d))              # 36
print("Сумма по axis=0:", np.sum(arr_3d, axis=0))  # [[6 8] [10 12]]
print("Сумма по axis=1:", np.sum(arr_3d, axis=1))  # [[4 6] [12 14]]
print("Сумма по axis=2:", np.sum(arr_3d, axis=2))  # [[3 7] [11 15]]

Практические примеры

Пример 1. Анализ температур:

temperatures = np.array([18, 22, 25, 27, 30, 28, 24, 20, 19, 23])

print(f"Средняя температура: {np.mean(temperatures):.1f}°C")
print(f"Максимальная: {np.max(temperatures)}°C")
print(f"Минимальная: {np.min(temperatures)}°C")
print(f"Разброс: {np.std(temperatures):.1f}°C")
# Средняя температура: 23.6°C
# Максимальная: 30°C
# Минимальная: 18°C
# Разброс: 3.7°C

Пример 2. Накопленная сумма для продаж:

sales = np.array([120, 90, 150, 200, 170])
cumulative = np.cumsum(sales)

print("Продажи:", sales)               # [120  90 150 200 170]
print("Накопленная сумма:", cumulative) # [120 210 360 560 730]

Пример 3. Анализ студентов:

scores = np.array([
    [85, 90, 78],
    [92, 88, 84],
    [70, 65, 72],
    [95, 93, 90]
])

print("Средний балл по предметам:", np.mean(scores, axis=0))
# [85.5  84.   81.  ]

print("Средний балл каждого студента:", np.mean(scores, axis=1))
# [84.33333333 88.         69.         92.66666667]

print("Лучший студент (макс сумма):", np.argmax(np.sum(scores, axis=1)))
# 3 (четвёртый студент)

print("Общий средний балл:", np.mean(scores))
# 82.75

Полный пример

import numpy as np

# Создаём данные
data = np.random.randint(50, 100, size=(5, 4))
print("Исходные данные:\n", data)

print("\nОсновные статистики:")
print(f"Сумма всех элементов: {np.sum(data)}")
print(f"Среднее: {np.mean(data):.2f}")
print(f"Стандартное отклонение: {np.std(data):.2f}")
print(f"Минимум: {np.min(data)}")
print(f"Максимум: {np.max(data)}")

print("\nСтатистики по столбцам (axis=0):")
print(f"Сумма: {np.sum(data, axis=0)}")
print(f"Среднее: {np.mean(data, axis=0)}")
print(f"Максимум: {np.max(data, axis=0)}")

print("\nСтатистики по строкам (axis=1):")
print(f"Сумма: {np.sum(data, axis=1)}")
print(f"Среднее: {np.mean(data, axis=1)}")

print("\nНакопленная сумма по строкам:")
print(np.cumsum(data, axis=1))

Задачи для закрепления

Задача 1. Найди сумму элементов массива [1, 2, 3, 4, 5].

Задача 2. Найди среднее значение массива [10, 20, 30, 40, 50].

Задача 3. Найди минимум и максимум массива [3, 1, 4, 1, 5, 9, 2].

Задача 4. Вычисли стандартное отклонение массива [1, 2, 3, 4, 5].

Задача 5. Вычисли накопленную сумму массива [1, 2, 3, 4, 5].

Ответы:

Задача 1.

arr = np.array([1, 2, 3, 4, 5])
print(np.sum(arr))   # 15

Задача 2.

arr = np.array([10, 20, 30, 40, 50])
print(np.mean(arr))   # 30.0

Задача 3.

arr = np.array([3, 1, 4, 1, 5, 9, 2])
print(np.min(arr))   # 1
print(np.max(arr))   # 9

Задача 4.

arr = np.array([1, 2, 3, 4, 5])
print(np.std(arr))   # 1.4142135623730951

Задача 5.

arr = np.array([1, 2, 3, 4, 5])
print(np.cumsum(arr))   # [ 1  3  6 10 15]

Нюансы и подводные камни

Понимание axis

  • axis=0 — операция выполняется вдоль строк (сверху вниз)
  • axis=1 — операция выполняется вдоль столбцов (слева направо)

Стандартное отклонение

np.std() по умолчанию вычисляет population standard deviation (с делением на N). Для sample standard deviation используй ddof=1.

arr = np.array([1, 2, 3, 4, 5])
print(np.std(arr))         # 1.414...
print(np.std(arr, ddof=1)) # 1.581... (sample)

NaN в данных

Если в массиве есть nan, большинство функций возвращают nan. Используй np.nansum()np.nanmean()np.nanstd() для игнорирования.

Частые ошибки и как их избежать

Ошибка 1: Неправильная размерность

Проверяй shape массива перед использованием axis.

Ошибка 2: Путаница между population и sample std

Используй ddof=1 для sample standard deviation.

Ошибка 3: Игнорирование NaN

Используй np.nan* функции для данных с пропусками.

Шпаргалка

ФункцияОписание
np.sum(arr)Сумма элементов
np.mean(arr)Среднее значение
np.std(arr)Стандартное отклонение
np.min(arr)Минимум
np.max(arr)Максимум
np.argmin(arr)Индекс минимума
np.argmax(arr)Индекс максимума
np.cumsum(arr)Накопленная сумма
np.var(arr)Дисперсия

Заключение

Сегодня мы:

  • Изучили основные статистические функции NumPy
  • Разобрали sum, mean, std, min, max, cumsum
  • Научились работать с параметром axis
  • Практические примеры

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×