Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.
tidymodels . Я разбираю как простые, так и более сложными модели. Сегодняшняя заметка подойдет тем, кто только начинает свое знакомство с пакетом tidymodels.
Содержание:
● Знакомимся с данными
● Построение модели
● Оцениваем модель
#статьи_по_Rprint() для отладки кода далеко от "лучших практик". Тем не менее используем этот приём, не смотря на то, что есть более продвинутые инструменты отладки, такие как browser() и debug(), потому, что он не требует каких то временных затрат.
Ниже пример отладки с print():
other_function <- function(x) x * 5 - 7
more_calculations <- function() NULL
some_advanced_function <- function(x) {
print("Я тут")
y <- other_function(x)
print(y)
more_calculations()
print("Надеюсь дойти сюда!!!!")
}
В лучшем случае такая отладка выдаст следующую информацию в консоль:
some_advanced_function(4) [1] "Я тут" [1] 13 [1] "Надеюсь дойти сюда!!!!"Какие недостатки в print(): ● Всё, что он вам выведет в консоль - это значение переменной, или заданный текст, но мы не понимаем какое выражение дало этот результат, ● Также мы не увидим к какой строке кода в файле относится кокнетное сообщение. Т.к. мы не смотря ни на что используем этот приём, за то, что он не требует от нас дополнительных усилий, то есть смысл найти аналогичный по трудозатратам способ отладки, но при этом немного более функциональный. И такой способ нам предоставляет пакет
icecream, который был разработан под вдохновением от одноимённого Python модуля.
Какие преимущества даёт icecream():
● Его основная функция - ic(), что уже само по себе является преимуществом, поскольку набрать ic() быстрее и проще чем print();3
● ic() автоматически печатает выражение вместе со своим значением;
● ic() включает максимально точную информацию о файле и позиции в файле, если вы вызываете его без аргументов
Давайте перепишем приведённый выше пример с помощью ic():
library(icecream)
other_function <- function(x) x * 5 - 7
more_calculations <- function() NULL
some_advanced_function <- function(x) {
ic()
y <- other_function(x)
ic(y)
more_calculations()
ic()
}
some_advanced_function(4)
Что мы изменили:
1. Функцию print() заменили на ic()
2. Вместо вызова print() с бесполезным текстом "HERE" и "I HOPE IT GETS THERE!!!!" мы вызываем ic() без дополнительных аргументов.
Сохраним его в файле external.R и запустим командой source("~/external.R"):
> source("~/33.R")
ℹ️ ic| `some_advanced_function()` in ~/33.R:8:2
ℹ️ ic| `y`: num 13
ℹ️ ic| `some_advanced_function()` in ~/33.R:12:2
Что изменилось в результате работы кода:
1. Теперь в консоли мы видим вместо "HERE" и "I HOPE IT GETS THERE!!!!" подробную информацию о том, в каком файле, на какой строке и какой функцией были выполнены эти вычисления.
2. При печати переменной y, помимо её значения мы видим имя самой переменной, и тип данных, которые она хранит.
Отключаем вывод ic()
Ещё одной проблемой при отладке через print() является то, что нам после процесса отладки необходимо убрать из кода все эти выводы сообщений, если процесс отладки был долгим, то наши принты могут в эмоциональном порыве покрыться нецензурными выражениями, и если вы потом такой код предоставите клиенту, который увидит в это а интерфейсе Shiny приложения или просто в выводе консоли, то может быть неловкая ситуация.
В пакете icecream предусмотрен механизм подавления вывода команды ic(), и возобновления её вывода в консоль.
- ic_disable() - отключает вывод функции ic()
- ic_enable() - возобновляет работу ic()
Какие преимущества мы получили:
1. Пишем меньше кода
2. Получаем больше информации для отладки
3. Можем отключать вывод доп информации в консоль, не удаляя из кода ic()
Ссылки:
- Данный пост является кратким пересказом статьи "Ice Cream for R Programmers"
#заметки_по_R..., в связке с другими именованными аргументами. Это специальный аргумент, который позволяет передавать функции произвольный набор аргументов. Это может быть полезно в следующих случаях:
● Когда точное количество аргументов заранее неизвестно, например при использовании функций lapply(), sum() и т.д..
● Когда вы используете под капотом самописной функции какую то другую функцию, и хотите "прокинуть" в неё произвольный набор аргументов.
Пример 1:
i01 <- function(y, z) {
list(y = y, z = z)
}
i02 <- function(x, ...) {
i01(...)
}
str(i02(x = 1, y = 2, z = 3))
#> List of 2
#> $ y: num 2
#> $ z: num 3
Есть ещё одна, специальная форма обращения к аргументам, переданным в функцию через ..., обращение по номеру аргумента ..N.
Пример 2:
i03 <- function(...) {
list(first = ..1, third = ..3)
}
str(i03(1, 2, 3))
#> List of 2
#> $ first: num 1
#> $ third: num 3
На практике такая форма использования троеточия встречается крайне редко.
Также вы можете использовать list(...), для конвертации набора аргументов в список:
Пример 3:
i04 <- function(...) {
list(...)
}
str(i04(a = 1, b = 2))
#> List of 2
#> $ a: num 1
#> $ b: num 2
Ссылки:
- Информация для поста заимствована из главы 6.6. "... (dot-dot-dot)" книги "Advanced R".
#заметки_по_Rtidymodels активно развивается в направлении задач машинного обучения.
Несколько лет назад Мак Кун разработал пакет caret, целью которого было создать единую платформу для моделей машинного обучения, существующих в R. Caret был прекрасен во многих отношениях, но далек от идеала. Но это был прекрасный старт. В связи с этим RStudio пригласила Макса Куна для разработки “аккуратной” версии данного пакета. В итоге, мы получили tidymodels.
#статьи_по_Rcomment() из базового R, о которой ранее я не знал. Данная функция позволяет добавлять и считывать специальный атрибут объекта - comment.
Пример:
x <- matrix(1:12, 3, 4)
# добавляем атрибут комментария
comment(x) <- c("This is my very important data from experiment #0234",
"Jun 5, 1998")
# читаем комментарий
comment(x)
# смотрим список атрибутов
attributes(x)
#заметки_по_Rregexec() , gregexpr() и grep()
● sub() и gsub()
● Регулярные выражения (REGEX)
● Метасимволы
● Квантификаторы
● Метасимволы начала и завершения
● Плейсхолдер
● Последовательности
● Символьные классы
● Группировка и оператор ИЛИ
● Экранирование
#статьи_по_Rserpstatr.
Содержание:
1. Как использовать R-пакет Serpstat?
2. R оболочка для вашего дашборда
3. Как работать с полученными результатами? Графики и диаграммы
4. Заключение
#статьи_по_RfindInFiles.
Понадобиться такой поиск может при разработке telegram бота, который будет искать по заданным паттернам файлы на сервере.
Итак, единственной функцией, которая вам понадобится будет findInFiles(). В данной функции доступны следующие аргументы:
● ext - расширение файла, по которым будет проходить поиск, например "R" или "js".
● pattern - паттерн для поиска, т.е. поисковое выражение, по наличию которого будут найдены файлы.
● depth - глубина поиска по папкам, отрицательное число или NULL означает полный рекурсивный поиск, по всем вложенным в корневую папку папкам, 0 означает поиск только в корневой папке, 1 значит поиск в корневой папке и подпапках
● wholeWord - полное соответствие заданному шаблону
● ignoreCase - игнорировать регистр текста при поиске
● perl - является ли шаблон регулярным выражением Perl
● excludePattern - исключить из поиска файлы и папки, соответствующие этому шаблону
● excludeFoldersPattern - исключить из поиска папки, соответствующие этому шаблону
● root - путь к корневой папке поиска
● output - тип вывода информации, "viewer", "tibble" or "viewer+tibble".
Пример:
library(findInFiles)
res <-findInFiles("R", "gs4_auth", output = "tibble")
res
# A tibble: 11 × 3
file line code
<chr> <int> <vctrs_vc>
1 R/blaze_archive_proj_2020_2021.R 25 gs4_auth('[email protected]')
2 R/EDC_ppc.R 12 gs4_auth('[email protected]')
3 R/EDC_ppc_kazakhstan.R 12 gs4_auth('[email protected]')
4 R/EDC_seo.R 12 gs4_auth('[email protected]')
5 R/Efr_active_proj.R 12 gs4_auth('[email protected]')
6 R/Efr_Churn.R 12 gs4_auth('[email protected]')
7 R/facebook_expenses_2020_2021.R 12 gs4_auth('[email protected]')
8 R/netpeak_analysts.R 13 gs4_auth('[email protected]')
9 R/nlo_active_proj.R 11 gs4_auth('[email protected]')
10 R/Rose - Beauty proj.R 12 gs4_auth('[email protected]')
11 R/user_info_cities.R 12 gs4_auth('[email protected]')
#заметки_по_Rggside является расширением для ggplot2, и добавляет в него дополнительные геомы. Имена этих геомон начинаются с geom_xside* или geom_yside*.
Список доступных геомов в версии 0.2.0:
● geom_*freqpoly - Боковые частотные полигоны
● geom_*sidebar - Боковые столбчатые диаграммы
● geom_*sidedensity - Боковые графики распределения плотности
● geom_*sideboxplot - Боковые ящики с усами
● geom_*sidehistogram - Боковые гистограммы
● geom_*sideline - Боковые линейные графики
● geom_*sidepoint - Боковые точечные диаграммы
● geom_*sidesegment - Боковые сегменты
● geom_*sideviolin - Боковые виолончельные диаграммы
Все функции идут в двух вариантах, замените * на x или y, для отрисовки бокового графика рядом с соответствующей осью.
Пример:
ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point(size = 2) + geom_xsideboxplot(aes(y =class), orientation = "y") + scale_xsidey_discrete() + #In order to use xsideboxplot with a main panel that uses #continuous data, force y axis in xside panel to be discrete geom_ysidedensity(aes(x = after_stat(density)), position = "stack") + scale_ysidex_continuous(guide = guide_axis(angle = 90), minor_breaks = NULL) + theme(ggside.panel.scale = .3)Результат этого кода отображен на изображении к посту. Ссылки: - Пример кода взят из README. - Больше примеров можно найти в виньетке "ggside walkthrough" Смотрите также: - Видео урок Грамматика графики в R. Пакет ggplot2 - Обращаемся к ggplot2 на естественном языке #заметки_по_R
waldo изначально был разработан для улучшения сообщений об ошибках в testthat::expect_equal(), но как оказалось функционал пакета оказался полезен сам по себе.
Основная функция пакета waldo::compare() построена поверх базовой all.equal(), но имеет следующие преимущества:
● Сортирует найденные между объектами различия от наиболее важных, к наименее важным;
● Отображение значений атомарных векторов, которые на самом деле различаются;
● Имеет более продвинутый формат выводимых сообщений, выделяя цветом найденное различие.
● waldo выводит в сообщениях образец кода, с помощью которого вы можете получить найденные различия из сравниваемых объектов.
К сожалению telegram не позволяет менять цвет текста, но пример вывода сообщений вы можете увидеть на изображении к этому посту.
Ниже приведу пару примеров из README waldo.
# сравнение векторов
## добавление нового элемента
compare(c("a", "b", "c"), c("a", "b"))
`old`: "a" "b" "c"
`new`: "a" "b"
## удаление элемента
compare(c("a", "b"), c("a", "b", "c"))
`old`: "a" "b"
`new`: "a" "b" "c"
## изменение элемента
compare(c("a", "b", "c"), c("a", "B", "c"))
`old`: "a" "b" "c"
`new`: "a" "B" "c"
# сравнение фреймов
df1 <- data.frame(x = 1:3, y = 3:1)
df2 <- tibble::tibble(rev(df1))
compare(df1, df2)
`class(old)`: "data.frame"
`class(new)`: "tbl_df" "tbl" "data.frame"
`names(old)`: "x" "y"
`names(new)`: "y" "x"
#заметки_по_Rosmdata для загрузки географических данных с OpenStreetMap и последующей визуализации на примерах, связанных со статистикой пожаров.
Содержание:
● Исходные данные по пожарам
● Предварительная подготовка картографических данных
● Отрисовка карт и нанесение информации по пожарам
● Нанесение на карту данных по пожарам
● Плотность пожаров
● Нанесение на карту данных по времени прибытия
● Визуализация пожаров по площадям
● Заключение
Смотрите также:
- Видео урок "Работа с пространственными объектами с помощью пакета sp"
- Курс "Введение в пространственный анализ и моделирование в R"
#статьи_по_Rrytstat.
Данный урок посвящён наиболее сложному YouTube Reporting API. Данный API, также как и YouTube Analytics API, позволяет запрашивать статистику по эффективности вашего канала и контента, но не для интерактивного анализа, а для реализации ежедневного сбора этих данных в собственное хранилище данных.
Тайм коды:
00:00 Вступление
00:57 Назначение YouTube Reporting API
02:04 Как реализован процесс работы с YouTube Reporting API
03:25 Функции пакета rytstat для работы с YouTube Reporting API
04:20 Как запросить список доступных вам типов отчётов из YouTube Reporting API
05:23 Где искать информацию о том, какой набор полей содержат различные отчёты.
06:56 Как создать задание на генерацию отчётов
07:29 Как запросить список созданных заданий на генерацию отчётов
08:06 Как получить список сгенерированных заданием отчётов
08:30 Метаданные отчётов
09:01 Как получить данные конкретного отчёта
10:46 Лучшие практики использования YouTube Reporting API
14:43 Пример кода для отправки данных из YouTube Reporting API в базу данных
20:13 Постобработка данных отчётов, конвертация даты, и добавление метаданных о ресурсах
22:19 Визуализация отчётов из YouTube Reporting API
22:57 Скрипт ежедневного обновления данных в базу данных
26:44 Отличия YouTube Analytics API и YouTube Reporting API
27:37 Пороговые значения в отчётах YouTube Reporting API
28:58 Заключение
Ссылки:
- Видео урок
- Код рассмотренный в уроке
- Плейлист со всеми уроками по работе с rytstat
#видео_уроки_по_R