Шаг 48.
Однострочники Python. Наука о данных. Создание расширенных фильтров массивов с помощью статистических показателей, ... . Код и принцип работы

    На этом шаге мы закончим изучение этого вопроса.

Код

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


Пример 3.28. Однострочное решение, использующее функции для математического ожидания, стандартного отклонения и булевы операторы с транслированием
## Зависимости
import numpy as np

## Данные анализа сайта
## (строка = день), (столбцы = пользователи, отказы, длительность)
a = np.array([[815, 70, 115],
              [767, 80, 50],               
              [912, 74, 77],
              [554, 88, 70],
              [1008, 65, 128]])
mean, stdev = np.mean(a, axis=0), np.std(a, axis=0)
# [811.2 76.4 88. ], [152.97764543 6.85857128 29.04479299]

## Однострочник
outliers = ((np.abs(a[:, 0] - mean[0]) > stdev[0])
            * (np.abs(a[:, 1] - mean[1]) > stdev[1])
            * (np.abs(a[:, 2] - mean[2]) > stdev[2]))

## Результат
print(a[outliers])
Архив с файлом можно взять здесь.

    Сможете догадаться, какие результаты выведет этот фрагмент кода?

Принцип работы

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

    Для каждого столбца мы вычисляем среднее значение и стандартное отклонение. Например, среднее значение столбца "Активных пользователей за день" равно 811,2, а его стандартное отклонение равно 152,97. Обратите внимание, что аргумент axis используется аналогично изложенному в разделе "Очистка каждого i-го элемента массива с помощью транслирования, присваивания срезу и изменения формы" на 42 шаге.

    Наша задача - выявить аномальные по всем трем столбцам сайты. Что касается столбца "Активных пользователей за день", то любое наблюдаемое значение меньше 811,2 - 152,97 = 658,23 или больше 811,2 + 152,23 = 963,43 считается аномальным.

    Однако целый день мы считаем аномальным только в том случае, если значения во всех трех наблюдаемых столбцах являются аномальными. Для этого мы объединяем три булевых массива с помощью оператора логического И. Результат представляет собой единственную строку, в которой все три столбца - аномальные значения:

[[1008	65	128]]

    Резюмируя: вы научились использовать оператор логического И библиотеки NumPy в целях простейшего обнаружения аномальных значений с помощью простых статических средств из библиотеки NumPy. Далее вы узнаете о секретном ингредиенте успеха Amazon: адекватные рекомендации продуктов для покупки.

    На следующем шаге мы рассмотрим простейший анализ ассоциаций.




Предыдущий шаг Содержание Следующий шаг