2022-06-16 11:00:04
Валидация данных с помощью пакета 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
636 viewsAlexey Seleznev, 08:00