Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.
ggplot2.
#видео_уроки_по_Rassertr так же предназначен для валидации данных, перед их анализом.
В качестве примера проверим встроенный набор данных 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() - проверяет, имеют ли переданные данные определенный класс.
#заметки_по_RsessionInfo() R version 4.2.0 (2022-04-22) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Ubuntu 20.04.4 LTS#заметки_по_R
rgoogleads переведён на работу с Google Ads API v 10.1.0 (не самая последняя версия, но более актуальная, чем та которая была в предыдущей версии пакета)
● rfacebookstat переведён на работу с Facebook Marketing API v14.0
Обновление пакетов:
install.packages('rgoogleads')
install.packages('rfacebookstat')
Полезные ссылки:
- Плейлист с уроками по работе с rgoogleads
- Плейлист с уроками по работе с rfacebookstat
#новости_и_релизы_R
streamHistory <- fromJSON("MyData/StreamingHistory0.json", flatten = TRUE)
#Форматируем дату и добовляем время, день недели
mySpotify <- streamHistory %>%
as_tibble() %>%
mutate_at("endTime", ymd_hm) %>%
mutate_at("endTime", format, tz = "Asia/Yekaterinburg") %>%
mutate_at("endTime", as_datetime) %>%
mutate(date = floor_date(endTime, "day") %>% as_date,
seconds = msPlayed / 1000,
minutes = seconds / 60,
weekday = weekdays(date, abbreviate = TRUE),
hour = hour(endTime))
mySpotify %>%
mutate(weekday = factor(weekday, levels = rev(c("Пн","Вт","Ср","Чт","Пт","Сб","Вс")))) %>%
group_by(weekday, hour) %>%
summarize(minutesListened = sum(minutes)) %>%
ggplot(aes(x = hour, weekday, fill = minutesListened)) +
geom_tile(color = "white", width = 0.98, height = 0.98) +
scale_y_discrete(expand = c(0,0)) +
scale_x_continuous(breaks = seq(0,24,1), expand = c(0,0)) +
scale_fill_gradient("Минут прослушивания", low = "yellow", high = "red") +
labs(x = "Время дня", y = "", caption = "Данные: Spotify Визуализация: Юрий Тукачев") +
ggtitle("Когда я чаще всего слушал музыку на Spotify за последний год?",
"Еженедельная активность прослушивания по часам дня недели") +
guides(fill = guide_colorbar(title.position = 'top', title.hjust = .5,
barwidth = unit(15, 'lines'), barheight = unit(.5, 'lines'))) +
theme(plot.title.position = "plot", text = element_text(size = 14, family = "Roboto Mono"),
plot.caption.position = "plot",
plot.caption = element_text(color = "gray"),
plot.subtitle = element_text(color = "gray"),
legend.position = "top",
panel.background = element_blank(),
plot.margin = margin(25, 25, 10, 25),
axis.ticks = element_blank())
#заметки_по_Rdata.validator.
Функции реализующие валидацию данных:
● validate_if()
● validate_cols()
● validate_rows()
Цикл проверки:
1. Создаёте объект отчёта функцией data_validation_report()
2. Загрузите набор данных, который необходимо валидировать.
3. Инициируйте процесс валидации:
3.1. Запустите конвейер проверки, начиная с функции validate().
3.2. Используйте функции validate_*() и предикаты для проверки данных. Вы можете создавать собственные предикаты. См. пример в примере ниже функцию between().
3.3. Добавьте результаты проверки в отчет с помощью add_results().
4. Выведите результат проверки в консоль через print(), или создайте отчет в формате HTML используя save_report().
Пример:
library(assertr)
library(magrittr)
library(data.validator)
report <- data_validation_report()
validate(mtcars, name = "Проверяем таблицу mtcars") %>%
validate_if(drat < 0, description = "Столбец drat содержит только положительные значения") %>%
validate_cols(in_set(c(0, 2)), vs, am, description = "Значения столбцов vs и am равны только 0 или 2") %>%
validate_cols(within_n_sds(1), mpg, description = "Столбец mpg в прделах 1го стандартного отклонения") %>%
validate_rows(num_row_NAs, within_bounds(0, 2), vs, am, mpg, description = "Количество пропущенных значений в строках не превышает 2") %>%
validate_rows(maha_dist, within_n_mads(10), everything(), description = "Расстояние Махаланобиса не превышает 10 медианных абсолютных отклонений") %>%
add_results(report)
between <- function(a, b) {
function(x) { a <= x && x <= b }
}
validate(iris, name = "Проверяем набор данных iris") %>%
validate_if(Sepal.Length > 0, description = "Значения столбца Sepal length положительные") %>%
validate_cols(between(0, 4), Sepal.Width, description = "Значения столбца Sepal находятся в диапазоне от 0 до 4") %>%
add_results(report)
# выводим результат в консоль
print(report)
# Создаём HTML отчёт
save_report(report, success = FALSE)
browseURL("validation_report.html")
Большинство проверок в приведённом примере реализованы на базе пакета assertr, о котором мы тоже поговорим более подробно немного позже.
Смотрите также:
- Пакет framecleaner является обёрткой над dplyr::mutate(), и предоставляет несколько функций для краткого решения общих проблем, возникающих при приведении в порядок небольших и средних наборов данных
#заметки_по_Rspdep, spatialreg, rgeoda.
Это финальная лекция данного курса.
Смотрите так же:
- Анонс и программа курса "Введение в пространственный анализ и моделирование в R"
- Конспект и видео первой лекции
- Конспект и видео второй лекции
- Конспект и видео третей лекции
#курсы_по_Rsp - сокращение от Spatial Poligons (пространственные полигоны), данный пакет предоставляет методы для манипулирования пространственными данными.
Автор: Артём Голубничий
Ссылки:
- видео лекция
- практика
Смотрите так же:
- Работа с картами с помощью пакета tmap
- Учебник "Пространственная статистика и моделирование на языке R"
#видео_уроки_по_R
library(calendR)
library(tidyverse)
# Data
data <- c(55:154)
weekdays_lbls <- c("Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс")
calendR(year = 2022, title = "100 days of war", text.size = 10,
day.size = 3, weeknames = weekdays_lbls,
lty = 0, papersize = "A5", font.family = "Open Sans",
days.col = "gray90",
title.size = 28, title.col = "red",
text.col = "gray90",
special.days = data,
special.col = "black",
orientation = "portrait")
ggsave("100days.png", dpi = 150, width = 7, height = 9)
#заметки_по_Rspdep, spatialreg, rgeoda.
Митап будет только онлайн!
4 июня в 18:00
Ссылка на трансляции: us02web.zoom.us/j/81529…29793127
Смотрите так же:
- Анонс и программа курса "Введение в пространственный анализ и моделирование в R"
- Конспект и видео первой лекции
- Конспект и видео второй лекции
- Ссылка на трансляцию четвёртой лекции
#курсы_по_R