Агрегирующие функции
Вычисляйте сумму, среднее, минимум, максимум и стандартное отклонение для всего массива или вдоль определённой оси
«Агрегирующие функции» — бесплатный урок Pandas & NumPy Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Pandas & NumPy Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Pandas & NumPy Academy содержит 4 уроков всего.
Что такое агрегация?
Агрегация сводит массив к нескольким итоговым значениям, например сумме или среднему. Встроенные функции NumPy выполняют это на быстром C-коде, без циклов.
import numpy as np
a = np.array([3, 7, 2, 9, 1, 6])
print('sum:', a.sum()) # 28
print('mean:', a.mean()) # 4.666...
print('max:', a.max()) # 9sum() и cumsum()
Используйте a.sum() для получения суммы всех элементов, а np.cumsum — для нарастающей суммы: в каждой позиции хранится сумма всех элементов до неё включительно.
import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(a.sum()) # 15
print(np.cumsum(a)) # [ 1 3 6 10 15]mean() и std()
a.mean() возвращает среднее значение, а a.std() — стандартное отклонение. По умолчанию std делит на N; передайте ddof=1, если Ваши данные являются выборкой.
import numpy as np
a = np.array([2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0])
print('mean:', a.mean()) # 5.0
print('std (pop):', a.std()) # 2.0
print('std (sample):', a.std(ddof=1)) # 2.138...min() и max() с argmin/argmax
a.min() и a.max() возвращают наименьшее и наибольшее значения. Нужны не сами значения, а их позиции? argmin и argmax возвращают индекс каждого из них.
import numpy as np
a = np.array([3, 7, 2, 9, 1, 6])
print('min:', a.min(), 'at index', a.argmin()) # 1 at 4
print('max:', a.max(), 'at index', a.argmax()) # 9 at 3Агрегация вдоль оси
Аргумент axis определяет, какое измерение свернуть: axis=0 возвращает по одному значению на столбец, axis=1 — по одному на строку. Если не указывать axis, сворачивается весь массив.
import numpy as np
m = np.array([[1, 2, 3],
[4, 5, 6]])
print(m.sum(axis=0)) # [5 7 9] -- column sums
print(m.sum(axis=1)) # [ 6 15] -- row sums
print(m.mean(axis=0)) # [2.5 3.5 4.5]keepdims=True для сохранения формы
Агрегация вдоль оси удаляет это измерение. Добавьте keepdims=True, чтобы сохранить его с размером 1. Это необходимо, если позже результат должен участвовать в broadcasting.
import numpy as np
m = np.array([[1, 2, 3],
[4, 5, 6]])
row_sums = m.sum(axis=1, keepdims=True)
print(row_sums.shape) # (2, 1)
normed = m / row_sums
print(normed.round(3))
# [[0.167 0.333 0.5 ]
# [0.267 0.333 0.4 ]]Агрегация с обработкой NaN
Одно значение NaN заставляет обычные sum или mean вернуть NaN. Версии с обработкой NaN — np.nansum, np.nanmean и другие — просто пропускают отсутствующие значения.
import numpy as np
a = np.array([1.0, np.nan, 3.0, np.nan, 5.0])
print(a.sum()) # nan
print(np.nansum(a)) # 9.0
print(np.nanmean(a)) # 3.0
print(np.nanmax(a)) # 5.0np.median и np.percentile
np.median возвращает срединное значение и гораздо лучше среднего арифметического противостоит выбросам. np.percentile находит значение, ниже которого находится заданный процент данных.
import numpy as np
a = np.array([1, 2, 3, 4, 100]) # outlier at 100
print('mean:', a.mean()) # 22.0 -- skewed
print('median:', np.median(a)) # 3.0 -- robust
print(np.percentile(a, [25, 50, 75])) # [ 2. 3. 4.]np.any() и np.all()
np.any возвращает True, если хотя бы один элемент удовлетворяет условию; np.all возвращает True, только если условию удовлетворяют все элементы. Обе функции можно применять отдельно к строкам или столбцам.
import numpy as np
a = np.array([1, -2, 3, -4])
print(np.any(a < 0)) # True (some are negative)
print(np.all(a > 0)) # False (not all are positive)
# Row-wise check on 2D
m = np.array([[1, 2], [-1, 3]])
print(np.all(m > 0, axis=1)) # [ True False]np.count_nonzero()
np.count_nonzero подсчитывает количество ненулевых элементов или количество значений True. Передайте условие, например a > 5, чтобы удобно подсчитать совпадения.
import numpy as np
a = np.array([3, 0, 7, 0, 2, 0])
print(np.count_nonzero(a)) # 3
print(np.count_nonzero(a > 2)) # 2 (elements 3 and 7)
m = np.array([[0, 1], [1, 1]])
print(np.count_nonzero(m, axis=0)) # [1 2]np.unique() для получения уникальных значений
np.unique возвращает отсортированные уникальные значения. Добавьте return_counts=True, и Вы также получите количество вхождений каждого значения — готовую таблицу частот.
import numpy as np
a = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3])
uniq, counts = np.unique(a, return_counts=True)
print(uniq) # [1 2 3 4 5 6 9]
print(counts) # [2 1 2 1 2 1 1]Быстрая проверка
Проверьте, насколько хорошо Вы поняли функции агрегации NumPy из этого урока.
Итоги урока
Отличная работа! Агрегации NumPy быстро обобщают массивы на C-коде, аргумент axis определяет, что свернуть, а версии с обработкой NaN пропускают отсутствующие значения. Далее: broadcasting.
Изучай Python с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Агрегирующие функции» бесплатный?
Да — полный текст урока «Агрегирующие функции» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Pandas & NumPy Academy, подпишись на CoddyKit PRO. Курс Pandas & NumPy Academy содержит 4 уроков всего.
Чему я научусь в уроке «Агрегирующие функции»?
Вычисляйте сумму, среднее, минимум, максимум и стандартное отклонение для всего массива или вдоль определённой оси Ты практикуешь Pandas & NumPy Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Pandas & NumPy Academy?
Предыдущий опыт не требуется. Pandas & NumPy Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Агрегирующие функции»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Pandas & NumPy Academy?
Да. Каждый урок Pandas & NumPy Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Универсальные функции (ufuncs)
- Агрегирующие функции
- Правила broadcasting
- Булева маска и расширенная индексация