Агрегирование данных в NumPy

Основные функции для агрегирования данных в NumPy

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

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

Сумма значений

Используйте np.sum() для вычисления суммы значений в массиве.

import numpy as np

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

Минимальное и максимальное значения

Для определения минимального и максимального значений используйте np.min() и np.max() соответственно.

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

Среднее, медиана и стандартное отклонение

NumPy также предоставляет функции для вычисления среднего значения np.mean(), медианы np.median() и стандартного отклонения np.std().

data = np.array([1, 2, 3, 4, 5])
print(np.mean(data))  # 3.0
print(np.median(data))  # 3.0
print(np.std(data))  # 1.4142135623730951

Агрегация в многомерных массивах

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

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

# Сумма всех значений
print(np.sum(matrix))  # 45

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

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

Операции с условиями в NumPy

NumPy предоставляет мощные инструменты для выполнения условных операций на массивах. Это позволяет агрегировать, модифицировать или выделять данные на основе заданных критериев. Давайте рассмотрим некоторые из них:

Базовые условные операции
Для простых условий вы можете использовать стандартные операторы сравнения.

arr = np.array([1, 2, 3, 4, 5])
print(arr > 3)  # [False False False True True]

np.where()
Функция np.where() — это векторизованный вариант тернарного оператора x if condition else y. Она возвращает индексы элементов, удовлетворяющих условию.

arr = np.array([1, 2, 3, 4, 5])
indices = np.where(arr > 3)
print(indices)  # (array([3, 4], dtype=int64),)

# Используя np.where с 3 аргументами
result = np.where(arr > 3, 'больше 3', 'не больше 3')
print(result)  # ['не больше 3' 'не больше 3' 'не больше 3' 'больше 3' 'больше 3']

Логические операции
Вы можете комбинировать условия с использованием логических операторов & (и), | (или), ^ (исключающее или) и ~ (не).

arr = np.array([1, 2, 3, 4, 5])
condition = (arr > 2) & (arr < 5)
print(condition)  # [False False True True False]

Помните, что при использовании логических операторов с NumPy массивами вы должны использовать & и | вместо and и or и оборачивать каждое условие в круглые скобки.

np.count_nonzero()
Если вы хотите узнать, сколько элементов массива удовлетворяют определенному условию, вы можете использовать np.count_nonzero().

arr = np.array([1, 2, 3, 4, 5])
count = np.count_nonzero(arr > 3)
print(count)  # 2

Также для этой цели можно использовать np.sum(), так как True рассматривается как 1, а False как 0:

count = np.sum(arr > 3)
print(count)  # 2

Маскирование
Маскирование — это процесс выбора подмножества данных на основе условия.

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

Другие агрегирующие функции в NumPy

  • np.prod(): Вычисляет произведение элементов.
arr = np.array([1, 2, 3, 4])
print(np.prod(arr))  # 24
  • np.var(): Вычисляет дисперсию элементов.
arr = np.array([1, 2, 3, 4])
print(np.var(arr))  # 1.25
  • np.any(): Проверяет, есть ли хотя бы один элемент в массиве, который удовлетворяет условию (например, >0).
arr = np.array([-1, 0, 5, 6])
print(np.any(arr > 0))  # True
  • np.all(): Проверяет, все ли элементы в массиве удовлетворяют условию.
arr = np.array([-1, 2, 3, 4])
print(np.all(arr > 0))  # False
  • np.argmax() и np.argmin(): Возвращают индексы максимального и минимального элементов, соответственно.
arr = np.array([1, 2, 3, 4, 0])
print(np.argmax(arr))  # 3
print(np.argmin(arr))  # 4
  • np.unique(): Возвращает уникальные элементы массива и их количество.
arr = np.array([1, 1, 2, 2, 3, 3])
unique, counts = np.unique(arr, return_counts=True)
print(unique)  # [1, 2, 3]
print(counts)  # [2, 2, 2]

Заключение

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

Содержание: