Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.
colouR, который позволяет вам проанализировать любое изображение в форматах jpg или png, из локального файла или по ссылке, и получить его палитру. Основной функцией пакета является getTopCol(), которая имеет следующий набор аргументов:
● path - Путь к локальному файлу изображения или URL
● n - Количество цветов, которое необходимо получить в палитре
● exclude - Позволяет исключить из палитры большинство оттенков чёрного и белого
● sig - Целое число, позволяет округлять количество знаков после запятой, в определении какую часть изображения занимает цвет
● avgCols - Логическое TRUE / FALSE, надо ли усреднять цвета в группы
● n_clusters - Количество кластеров, используемых для группировки цветов, имеет смысл только при avgCols = TRUE
1. Пример анализа цветовой палитры изображения, и использования полученной палитры в `ggplot2`
Ниже пример анализа цветовой палитры изображения из интернета. само изображение и результат анализа его палитры вы видите на изображении к посту.
library(colouR)
library(ggplot2)
library(dplyr)
# Анализ палитры изображение с усреднением цветов
top10 <- getTopCol(
path = "https://static.make.ua/catalog/35/city-1491__1557487852__300h.jpg",
n = 5,
avgCols = T,
n_clusters = 10,
exclude = T,
)
# Сортируем цвета
top10$hex <- factor(top10$avg_color, levels = top10$avg_color)
# Выводим график по цветам
ggplot(top10, aes(x = hex, y = freq)) +
geom_bar(stat = 'identity', fill = top10$hex) +
theme_dark() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
xlab('HEX colour code') +
ylab('Frequency')
# Выводим палитру
plotPalette(top10$avg_color)
В данном случае, мы группируем (avgCols = TRUE) все полученные из изображения цвета в 10 групп (n_clusters = 10), говорим исключить все известные пакету оттенки чёрного и белого (
exclude = TRUE), и взять 5 из полученных групп цветов, которые заполняют большую часть изображения (
n = 5). 2. Используем полученную палитру в ggplot2 Пакет
colouR включает две дополнительные функции для удобной совместимости с ggplot2:
● scaleFill()
● scaleColor()
Но, эти функции судя по всему работают только с встроенными в сам пакет палитрами, а собственные палитры вы можете использовать традиционным способом, передав их в аргументы функций scale_*():
# Используем полученную палитру в ggplot2 # подготовка данных manufacturer_counts <- mpg %>% group_by(manufacturer) %>% summarize(count = n()) %>% head(5) mpgsort <- manufacturer_counts[order(manufacturer_counts$count, decreasing = TRUE), ] mpgsort$manufacturer <- factor(mpgsort$manufacturer, levels = mpgsort$manufacturer) # Строим график с использованием полученной палитры ggplot(mpgsort, aes(x = manufacturer, y= count, fill = manufacturer)) + geom_bar(stat = 'identity') + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + scale_fill_manual(values = top10$avg_color)Читайте так же: - NatParksPalettes: Пакет цветовой палитры, вдохновленный национальными парками - Палитры в R - Темы для ggplot2 основанные на телешоу Полезные ссылки: - Сайт пакета colouR #заметки_по_R
qdapRegex.
Каждая из функций пакета имеет приставку, в зависимости от её назначения:
● ex_*() - извлечение части текста
● rm_*() - удаление / замена части текста
Например, в одном из постов канала я показал, как с помощью регулярных выражений удалить часть текста между двумя символами, задача казалось бы простая, но регулярное выражение для её выполнения будет не самым простым, а пакет qdapRegex решает такие задачи очень просто:
library(qdapRegex)
x <- "I like [bots] (not)."
rm_between(x, "(", ")")
ex_between(x, "(", ")")
rm_between(x, c("(", "["), c(")", "]"))
ex_between(x, c("(", "["), c(")", "]"))
Если вам не удалить, а заменить часть текста используйте аргумент replacement:
rm_between(x, "[", "]",replacement = "humans")Ниже приведу набор наиболее полезных функций: ●
(ex|rm)__between() - часть текста между указанными символами
● (ex|rm)_hash() - хештеги
● (ex|rm)_tag() - именные теги (@username)
● (ex|rm)_url() - извлечение ссылок из текста
● (ex|rm)_email() - имейлы
● (ex|rm)_phone() - номера телефонов
● (ex|rm)_emoticon() - смайлы
● (ex|rm)_bracket() - текст внутри квадратных, фигурных или круглых скобок
● (ex|rm)_curly() - текст внутри фигурных скобок
● (ex|rm)_round() - текст внутри круглых скобок
● (ex|rm)_square() - текст внутри квадратных скобок
● (ex|rm)_number() - числа
● (ex|rm)_time() - время
● (ex|rm)_date() - даты
● (ex|rm)_non_words() - не слова
● (ex|rm)_nchar_words() - слова более заданной длинны
● (ex|rm)_repeated_characters() - повторяющиеся символы
И это не полный набор функций, пакет будет крайне полезен для очистки текста. или извлечения нужной информации из неструктурированного текста, например из имейлов, или комментариев.
# пример текста text <- "@alex привет, отправь 12.07.2023 @john информацию о стоимости #iphone на почту [email protected] потом позвони мне (067)123-45-67" ex_date(text) # извлекаем дату ex_email(text) # извлекаем имейл ex_hash(text) # извлекаем хеш ex_tag(text) # извлекаем теги ex_phone(text) # извлекаем номер телефона?Все функции под капотом используют американский словарь регулярных выражений, получить его можно командой
data(regex_usa). Но вы можете создать и использовать собственный словарь регулярных выражений, в примере выше мы не смогли извлечь номер телефона, потому что его описание в тексте не соответствует американскому словарю регулярных выражений, давай создадим свой словарь:
# создаём словарь
regex_dict <- list("rm_phone" = "\\(\\d{3}\\)\\d{1,4}-\\d{1,4}-\\d{1,4}")
# устанавливаем пользовательский словарь по умолчанию
options("regex.library" = regex_dict)
# используем словарь и паттерн из него
ex_phone(text, pattern = "@rm_phone")
Пользуйтесь!
#заметки_по_Rggflowchart является надстройкой над ggplot2, которая позволяет с минимальным объёмом кода рисовать блок схемы, средствами одного чистого ggplot2 сделаьт это не так просто.
Рисование блок схемы проходит в 2 этапа:
1. Сначала создать таблицу с описанием будущей блок схемы:
library(ggflowchart)
data <- tibble::tibble(from = c("A", "A", "A", "B", "C", "F"),
to = c("B", "C", "D", "E", "F", "G"))
2. С помощью функции ggflowchart() нарисовать саму блок-схему
ggflowchart(data)Функция
ggflowchart() так же имеет набор дополнительных аргументов:
● node_data - Необязательный фрейм данных, определяющий атрибуты узла, включая метки, которые должны отображаться в полях.
● fill - Цвет заливки блоков узлов.
● colour - Цвет контура блоков узлов.
● text_colour - Цвет текста в полях узла.
● text_size - Размер текста в полях узла.
● arrow_colour -Цвет стрелок между блоками узлов.
● arrow_size - Размер стрелок между блоками узлов.
● family - Семейство шрифтов текста в полях узла.
● x_nudge - Ширина блоков узлов.
●` y_nudge` - Высота блоков узлов.
● horizontal - Направление блок-схемы
Преобразуем приведённую выше блок схему с помощью аргумента node_data:
node_data <- tibble::tibble(
name = c("A", "B", "C", "D", "E", "F", "G"),
type = c("Type 1", "Type 1", "Type 1", "Type 1",
"Type 2", "Type 2", "Type 2")
)
ggflowchart(data, node_data, fill = type)
Результат можно увидеть на изображении к посту.
Ссылки:
- Примеры кода заимствованы из статьи "Introducing {ggflowchart}"
#заметки_по_Rgads_get_geo_targets(), которая позволяет запросить справочник регионов.
timeperiodsR - пакет для упрощенного определения временных интервалов в R
- Исправлена ошибка в функции`last_n_quarters()`
- Внесён ряд небольших правок для соответвия пакета политике CRAN
#новости_и_рулизы_Rrgoogleads, предназначенный для работы с Google Ads API, переведён на работу с Google Ads API v13.
Сегодня, 31 марта прекращается поддержка Google Ads API v11, с которой пакет работал ранее. Поэтому всем пользователям пакета необходимо сегодня установить новую версию с CRAN или GitHub.
Установка:
# CRAN
install.packages('rgoogleads')
# GitHub
devtools::install_github('selesnow/rgoogleads')
Что нового:
● Из результата возвращаемого функцией gads_get_ad_group_criterions() было удалено поле d_group_criterion.listing_group.case_value.product_bidding_category.country_code;
● В результате возвращаемом функцией gads_get_campaigns() поле campaign.maximize_conversions.target_cpa было переименовано в campaign.maximize_conversions.target_cpa_micros.
Остальные изменения в API имеют обратную совместимость.
Полезные ссылки:
- Видео уроки по работе с пакетом rgoogleads
- Описание изменений в Google Ads API v13
#новости_и_релизы_Rlibrary(httr2)
#' Задать вопрос ChatGPT
#'
#' @param content Текст вашего соощения
#' @param api_key Ваш API Токен
#'
#' @return ответ на ваш вопрос
#' @export
#'
ask_chatgpt <- function(
content,
api_key
) {
# компоновка и отправка запроса
ans <- request("https://api.openai.com/v1/chat/completions") %>%
req_headers(
Authorization = paste("Bearer", api_key)
) %>%
req_body_json(
list(
model = "gpt-3.5-turbo",
messages = list(
list(
role = "user",
content = content)
)
)
) %>%
req_perform()
# парсинг ответа
resp <- resp_body_json(ans)
# вывод ответа в консоль
cat(resp$choices[[1]]$message$content)
}
Функция от вас потребует указать 2 аргумента:
● content - ваш вопрос;
● api_key - ваш API токен, сгенерировать токен можно после регистрации в меню "View API Keys" вашего аккаунта.
Пример использования функции:
# используем функцию
ask_chatgpt(
'Напиши код на языке R для отправки csv по почте с gmail',
'ВАШ API ТОКЕН'
)
Результат, который будет выведен в консоль:
К сожалению, я не могу выполнить эту задачу, так как доступ к сторонним ресурсам не предоставляется в моих возможностях. Однако, я могу предложить вам следующий код на R, который использует библиотеку mailer для отправки электронной почты:
R library(mailer) send_mail( from = "[email protected]", to = "[email protected]", subject = "CSV file", body = "Attached is the CSV file.", attach_files = "data.csv", authenticate = TRUE, smtp_server = "smtp.gmail.com", smtp_port = 465, smtp_username = "[email protected]", smtp_password = "password", use_ssl = TRUE )Пожалуйста, замените
[email protected] на свой адрес электронной почты, [email protected] на адрес получателя, data.csv на имя вашего CSV файла, а также установите свой пароль для smtp_password. Убедитесь, что разрешено использование менее защищенных приложений на вашей учетной записи Gmail.
Попробуйте задать в ChatGPT свой вопрос.
Ссылки:
- документация к ChatGPT API
#заметки_по_R