КПКейсПрактика
Все материалы
Продуктовая аналитикаматериалстарт

NumPy для аналитика: массивы, маски и векторные расчёты

Что нужно знать аналитику о NumPy: массивы, типы, boolean-маски, np.where и векторизация, которая лежит под многими операциями pandas.

КПКейсПрактика5 августа 2026 г.11 мин
Два аналитика исследуют массивы NumPy и превращают числовые значения в понятный расчёт.

Pandas часто скрывает NumPy под привычными операциями над колонками. Но понимание массивов помогает объяснить типы, broadcasting, boolean-маски и причины, по которым векторный расчёт работает быстрее цикла по строкам. Аналитику не нужен весь NumPy: достаточно нескольких идей, которые встречаются каждый день.

Коротко

NumPy хранит однородные числовые массивы и выполняет операции над ними без явного цикла Python. `ndarray`, маски, `np.where`, `np.select` и базовые агрегаты помогают писать расчёты над колонками pandas проще и предсказуемее.

  • Массив обычно содержит значения одного dtype.
  • Операция над массивом применяется к элементам поэлементно.
  • Boolean-маска выбирает нужные значения без цикла.
  • Broadcasting позволяет применять одно число или вектор к массиву совместимой формы.

Массив и dtype

В списке Python числа и строки могут сосуществовать свободно. NumPy старается хранить массив компактно и однородно, поэтому тип влияет на память и результат операции. В аналитике это особенно заметно на больших числовых колонках и при смешении чисел с пропусками.

pythonСоздать массив и выполнить операцию над ним
import numpy as np

revenue = np.array([1200, 800, 450, 1500], dtype='int32')
net_revenue = revenue * 0.9
print(net_revenue)
print(revenue.dtype, revenue.shape)

Маски вместо циклов

Boolean-маска — массив True/False той же длины, что и исходные значения. Она превращает правило фильтрации в объект, который можно проверить и передать дальше. В pandas тот же подход работает для Series и DataFrame.

pythonВыбрать крупные заказы
revenue = np.array([1200, 800, 450, 1500])
large_mask = revenue >= 1000
large_orders = revenue[large_mask]

print(large_mask)       # [ True False False  True ]
print(large_orders)     # [1200 1500]

np.where и np.select для правил

`np.where` подходит для простого выбора из двух вариантов. Для нескольких условий используй `np.select`, чтобы порядок правил был виден в коде. В обоих случаях обязательно задай значение для случая, который не попал в условия.

pythonСоздать признак и сегмент заказа
orders['is_large'] = np.where(
    orders['revenue'].ge(1000), True, False
)

conditions = [orders['revenue'].ge(5000), orders['revenue'].ge(1500)]
orders['segment'] = np.select(
    conditions, ['high', 'medium'], default='low'
)

Агрегаты и broadcasting

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

pythonОтклонение заказа от среднего
revenue = np.array([1200, 800, 450, 1500], dtype='float64')
average = revenue.mean()
deviation = revenue - average

print('mean:', average)
print('p90:', np.quantile(revenue, .9))
print('deviation:', deviation)
NumPy не делает бизнес-правило очевидным автоматически

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

Продолжить чтение
Вся библиотека