Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

R4marketing | канал Алексея Селезнёва | Язык R

4 года назад
Открыть в
​​Валидация данных с помощью пакета assertr Пакет assertr так же предназначен для валидации данных, перед их анализом. В качестве примера проверим встроенный набор данных mtcars на удовлетворение следующим условиям: ● что у него есть столбцы mpg, vs и am; ● что набор данных содержит более 10 наблюдений; ● что столбец mpg (миль на галлон) состоит только из положительных чисел; ● что столбец mpg (миль на галлон) не содержит данных, выходящих за пределы 4 стандартных отклонений от его среднего значения, и ● что столбцы am и vs (автоматический/ручной и v/прямой двигатель соответственно) содержат только 0 и 1; ● каждая строка содержит не более 2 NA; ● каждая строка уникальна совместно между столбцами mpg, am и wt; ● расстояние Махаланобиса каждой строки находится в пределах 10 медианных абсолютных отклонений всех расстояний (для обнаружения выбросов). Пример кода реализующий эту проверку:
library(assertr)

mtcars %>%
      verify(has_all_names("mpg", "vs", "am", "wt")) %>%
      verify(nrow(.) > 10) %>%
      verify(mpg > 0) %>%
      insist(within_n_sds(4), mpg) %>%
      assert(in_set(0,1), am, vs) %>%
      assert_rows(num_row_NAs, within_bounds(0,2), everything()) %>%
      assert_rows(col_concat, is_uniq, mpg, am, wt) %>%
      insist_rows(maha_dist, within_n_mads(10), everything()) %>%
      group_by(cyl) %>%
      summarise(avg.mpg=mean(mpg))


Функционал пакета assertr: ● verify() - Принимает дата фрейм и логическое выражение. Если указанное логическое выражение возвращает FALSE, функция останавливается с ошибкой. ● assert() - Принимает дата фрейм, функцию реализующую валидацию, и список столбцов, к которым будет применяться функция. ● insist() - Принимает дата фрейм, функцию генерации предикатов и произвольное количество столбцов. Данный приём рекомендуется использовать в случаях, когда границы предельных значений заранее неизвестны, и генерируются динамически. ● assert_rows()- Принимает дата фрейм, функцию расчёта значение в рамках текущей строки, и функцию предиката, ограничивающую диапазон допустимых значений, и список столбцов, на основе которых будут проходить вычисления и проверка. ● insist_rows() - Принимает дата фрейм, функцию расчёта значения для каждой строки, функцию предиката, генерирующую динамически допустимые пределы диапазона проверки (например функция maha_dist(), которая определяет наличие явных выбросов), и список столбцов. Далее в связке с перечисленными выше функциями используются функции - предикаты: В связке с assert() и assert_rows(): ● not_na()- проверяет, не является ли элемент NA; ● within_bounds()- возвращает функцию предиката, которая проверяет, попадает ли числовое значение в предоставленные границы; ● in_set() - возвращает функцию предиката, которая проверяет, является ли элемент членом предоставленного набора. (также допускает инверсию для «не в наборе»); ● is_uniq() - проверяет уникальность элементов. В связке с insist() и insist_rows(): ● within_n_sds() - используется для динамического создания границ для проверки векторных элементов на основе стандартных z-показателей; ● within_n_mads() - лучший метод динамического создания границ для проверки векторных элементов на основе «надежных» z-показателей (с использованием медианного абсолютного отклонения). В связке с assert_rows() и insist_rows(): ● num_row_NAs() - подсчитывает количество пропущенных значений в каждой строке; ● maha_dist() - вычисляет расстояние Махаланобиса для каждой строки (для обнаружения выбросов). При необходимости он преобразует категориальные переменные в числовые; ● col_concat() - склеивает значение всех строк в одну строку; ● duplicated_across_cols() - проверяет, содержит ли строка дубликаты в рамках указанных столбцов. В связке с verify(): ● has_all_names() - проверьте, есть ли в таблице или списке все предоставленные имена; ● has_only_names() - проверьте, что таблица или список имеют только запрошенные имена; ● has_class() - проверяет, имеют ли переданные данные определенный класс. #заметки_по_R