Pandas & NumPy Academy · Урок

Агрегирующие функции

Вычисляйте сумму, среднее, минимум, максимум и стандартное отклонение для всего массива или вдоль определённой оси

Урок 2 из 413 шагов

«Агрегирующие функции» — бесплатный урок 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())     # 9

sum() и 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.0

np.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 — локальная установка не требуется.

Все уроки этого курса

  1. Универсальные функции (ufuncs)
  2. Агрегирующие функции
  3. Правила broadcasting
  4. Булева маска и расширенная индексация
← Назад к Pandas & NumPy Academy