Агрегация и группировка данных в NumPy

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

Агрегация данных

Агрегация данных подразумевает вычисление сводных показателей (например, суммы, среднего значения, минимума, максимума и т.д.) для массива данных. NumPy предоставляет множество функций для этого.

Основные функции агрегации в NumPy:

  • np.sum(): Сумма всех элементов массива или вдоль указанной оси.

  • np.mean(): Среднее арифметическое всех элементов массива или вдоль указанной оси.

  • np.min(): Минимальное значение среди всех элементов массива или вдоль указанной оси.

  • np.max(): Максимальное значение среди всех элементов массива или вдоль указанной оси.

  • np.std(): Стандартное отклонение элементов массива.

  • np.var(): Дисперсия элементов массива.

  • np.prod(): Произведение всех элементов массива.

  • np.cumsum(): Накопленная сумма элементов вдоль указанной оси.

  • np.cumprod(): Накопленное произведение элементов вдоль указанной оси.

Пример:

import numpy as np

data = np.array([1, 2, 3, 4, 5])

# Сумма элементов
total = np.sum(data)  # 15

# Среднее значение
mean_value = np.mean(data)  # 3.0

# Минимальное значение
min_value = np.min(data)  # 1

# Максимальное значение
max_value = np.max(data)  # 5

Группировка данных

Группировка данных часто используется для того, чтобы применять агрегирующие функции к данным, разделенным на группы. Однако в чистом виде в NumPy нет прямых инструментов для группировки данных, как это сделано, например, в pandas (groupby).

Тем не менее, группировку можно выполнять вручную с использованием комбинаций NumPy-функций, таких как np.unique, np.bincount, np.split, и других.

Пример группировки данных:

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

import numpy as np

# Массив данных
data = np.array([10, 20, 30, 40, 50])

# Соответствующие метки
labels = np.array(['a', 'b', 'a', 'b', 'a'])

# Находим уникальные метки
unique_labels = np.unique(labels)

# Суммируем значения для каждой метки
sums = np.array([np.sum(data[labels == label]) for label in unique_labels])

print(dict(zip(unique_labels, sums)))

Результат:

{'a': 90, 'b': 60}

Использование функции np.bincount для группировки

Функция np.bincount может быть использована для группировки и суммирования числовых данных по категориям. Она работает только с неотрицательными целыми числами.

Пример:

import numpy as np

# Массив данных
data = np.array([5, 6, 7, 8, 9])

# Метки в виде целых чисел
labels = np.array([0, 1, 0, 1, 0])

# Суммируем значения для каждой метки
sums = np.bincount(labels, weights=data)

print(sums)

Результат:

[21. 14.]

Здесь значение 21 — это сумма всех элементов, где метка равна 0 (5+7+9), а значение 14 — сумма элементов, где метка равна 1 (6+8).

Маскирование и фильтрация

NumPy позволяет эффективно фильтровать данные с использованием масок (булевых массивов).

Пример:

import numpy as np

data = np.array([10, 20, 30, 40, 50])
mask = data > 25  # Создаем маску, где элементы больше 25

filtered_data = data[mask]  # Применяем маску

print(filtered_data)  # [30 40 50]

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

Итоги

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

  • Группировка: В NumPy не имеет встроенного метода, но может быть реализована с помощью комбинации методов, таких как np.unique, np.bincount, и булевых индексаций.

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

Last updated