R4marketing | канал Алексея Селезнёва | Язык R
Автор канала Алексей Селезнёв, украинский аналитик, автор ряда курсов по языку R и пакетов расширяющих его возможности. В канале публикуются статьи, доклады, новости, уроки и заметки по языку R. Для связи: @AlexeySeleznev Реклама: http://bit.ly/39MwJCY
Mostrar más- Suscriptores
- Cobertura postal
- ER - ratio de compromiso
Carga de datos en curso...
Carga de datos en curso...
@notxxx1 - админ Вопросы с собеседований по Machine Learning, Data Science, Deep Learning и Нейроннным сетям @data_analysis_ml - анализ данных @ai_machinelearning_big_data @itchannels_telegram - важное для программиста
split()
из базового R.
Для начала построим тестовую таблицу:
# к-во строк в тестовой таблице
rows_in_table <- 570
# тестовая таблица
df <- data.frame(
row_num = 1:rows_in_table,
numbers = sample(1:9000, size = rows_in_table, replace = T),
letters = sample(letters, size = rows_in_table, replace = T)
)
Теперь разобьём таблицу на части по значению поля letters
:
# Разбивка по значению какого либо поля
df_split_by_column <- split(df, df$letters)
$a # A tibble: 28 x 3 row_num numbers letters <int> <int> <chr> 1 3 8 a 2 11 2217 a 3 19 1948 a 4 34 338 a 5 54 604 a 6 64 754 a 7 68 3479 a 8 92 3942 a 9 160 7475 a 10 169 2507 a # i 18 more rows # i Use `print(n = ...)` to see more rows $b # A tibble: 20 x 3 row_num numbers letters <int> <int> <chr> 1 9 4438 b 2 14 56 b 3 109 6039 b 4 159 1749 b 5 175 8068 b 6 200 7444 b 7 220 1101 b 8 234 2396 b 9 260 3112 b 10 296 7411 b 11 302 4639 b 12 354 7716 b 13 396 4090 b 14 398 1540 b 15 424 6738 b 16 426 728 b 17 441 333 b 18 503 3346 b 19 548 3347 b 20 564 651 b $c # A tibble: 17 x 3 row_num numbers letters <int> <int> <chr> 1 47 1900 c 2 89 8522 c 3 130 6156 c 4 131 246 c 5 148 8591 c 6 151 640 c 7 154 8428 c 8 209 4218 c 9 216 7774 c 10 298 753 c 11 307 8839 c 12 355 5903 c 13 421 5147 c 14 433 2422 c 15 442 3224 c 16 557 4346 c 17 562 8635 c ...Так же мы можем разбить таблицу на части по заданному количеству строк:
# Разбивка по заданному количеству строк
chunk <- 100 # размер одной части в к-ве строк
n <- nrow(df) # вычисляем к-во строк исходной таблицы
r <- rep(1:ceiling(n/chunk),each=chunk)[1:n] # определяем каждую строку в определённую часть таблицы
df_split_by_100_rows <- split(df,r) # Разбиваем таблицу
$`1` row_num numbers letters 1 1 1210 h 2 2 5087 y 3 3 81 y 4 4 5459 a 5 5 5665 j 6 6 3735 v 7 7 4309 p 8 8 3858 i 9 9 847 x 10 10 91 e 11 11 3859 k ...#заметки_по_R
library(rjira)
library(dplyr)
library(tidyr)
library(snakecase)
library(purrr)
library(stringr)
library(bigrquery)
library(googlesheets4)
library(glue)
Это реальный пример загрузки пакетов в одном из моих скриптов. Пакет annotater
добавляет в RStudio Addon, который позволяет добавить описание вызовам пакетов, на данный момент доступно 5 типов аннотаций:
1. Annotate package calls in active file
Добавляет тайтлы пакетов к команде их вызовов. т.е. превратит пример выше в следующий:
library(rjira) # Work with Jira API
library(dplyr) # A Grammar of Data Manipulation
library(tidyr) # Tidy Messy Data
library(snakecase) # Convert Strings into any Case
library(purrr) # Functional Programming Tools
library(stringr) # Simple, Consistent Wrappers for Common String Operations
library(bigrquery) # An Interface to Google's 'BigQuery' 'API'
library(googlesheets4) # Access Google Sheets using the Sheets API V4
library(glue) # Interpreted String Literals
2. Annotate package repository source in active file
Добавляет информацию о репозитории и версии пакета:
library(rjira) # [github::selesnow/rjira] v0.0.0.9000
library(dplyr) # CRAN v1.1.2
library(tidyr) # CRAN v1.2.1
library(snakecase) # CRAN v0.11.0
library(purrr) # CRAN v0.3.4
library(stringr) # CRAN v1.4.1
library(bigrquery) # CRAN v1.5.0
library(googlesheets4) # CRAN v1.0.1
library(glue) # CRAN v1.6.2
3. Annotate tittles and repository sources in active file
Эта опция добавит одновременно и описание пакета и описание репозитория и его версии
4. Annotate each package's function calls
Пропишет возле вызова пакета список функций. который в текущем скрипте из этого пакета используется.
library(rjira) # jr_get_fields jr_issue_search
library(dplyr) # %>% filter mutate left_join group_by row_number ungroup pull select all_of coalesce any_of where rename_with matches across
library(tidyr) # %>% all_of any_of unnest_wider matches hoist
library(snakecase) # to_snake_case
library(purrr) # %>% map_dfc map
library(stringr) # %>% str_remove
library(bigrquery) # bq_auth bq_dataset bq_dataset_query bq_table bq_table_upload
library(googlesheets4) # gs4_auth range_read %>%
library(glue) # glue_sql
5. Expand metapackages
Разворачивает вызов метапакета, в отдельные вызовы для каждого пакета, который в него входит.
Например вызов library(tidyverse)
будет преобразован в:
####
library(ggplot2)
library(tibble)
library(tidyr)
library(readr)
library(purrr)
library(dplyr)
library(stringr)
library(forcats)
library(lubridate)
####
Функционал довольно полезный, особенно если вы планируете разбирать чужой скрипт, в котором используются неизвестные вам пакеты.
Пример работы на изображении к посту.
Ссылка на GitHub пакета annotater
.
#заметки_по_Rbigrquery
. Пару дней назад был достаточно важный релиз bigrquery 1.5.0,
Что нового:
Основные изменения:
* Из пакета были исключены все устаревшие функции, т.е. те, названия которых начинаются НЕ с префикса bq_
.
* bq_table_download()
теперь возвращает в текстовом формате поля, которые в BigQuery хранятся в неизвестном для R типе. Ранее вы получали ошибку при попытке загрузить таблицы с полями которые имели тип BIGNUMERIC или JSON.
* Теперь bigrquery
анализирует даты с помощью пакета clock
. Это приводит к значительному повышению производительности и гарантирует корректный анализ дат до 1970-01-01.
Изменение в DBI интерфейсе:
* Наборы данных и таблицы bigquery теперь будут отображаться на панели подключений при использовании dbConnect()
.
* Добавлена поддержка функций dbAppendTable()
, dbCreateTable()
и dbExecute()
* В dbGetQuery()
и dbSendQuery()
поддерживают передачу параметров запросов с помощью аргумента params
.
Так же ряд менее значительных изменений получил и dbplyr
интерфейс, например tbl()
теперь работает не только с физическими таблицами, но и с представлениями (View).
Более подробно обо всех изменениях можно почитать на GitHub.
#новости_и_релизы_по_Rrfacebookstat
- пакет для запроса статистики из рекламных кабинетов Facebook и Instagram
Пакет был переведён на работу с Facebook Marketing API v18.
Пользователям пакета необходимо только установить его новую версию, все скрипты будут работать без каких либо дополнительных изменений.
2. rlinkedinads
- пакет для запроса статистики из рекламных кабинетов Linkedon
В rlinkedinads
была исправлена ошибка обновления токена. Кроме обновления никаких дополнительных действий не требуется.
#новости_и_релизы_по_Rhttr2
и gargle
.
В целом, я считаю, что курс получился полезным, и надеюсь, что вы также оцените его.
Программа курса:
1. Обзор рабочего процесса разработки пакета
2. Настройка системы и интеграция с GitHub
3. Рекомендации по организации R кода
4. Добавление данных в пакет
5. DESCRIPTION - Метаданные пакета
6. NAMESPACE - Зависимости пакета
7. Разработка юнит-тестов к функциям пакета (пакет testthat)
8. Написание документации к функциям пакета
9. Виньетки и прочая опциональная документация пакета
10. Разработка сайта пакета (пакет pkgdown)
11. Публикация в CRAN
12. Разработка пакета обёртки над API (пакет httr2)
13. Разработка пакета обёртки для Google API (пакет gargle)
14. Как создать коллекцию пакетов
Буду признателен за репосты!
Ссылки:
- Курс на bookdown
- Сайт курса
- Плейлист на YouTube
- Благодарности автору
#курсы_по_RНесколько вводных слов о курсе "Разработка пакетов на R". |===========================================| Ссылка на курс:
https://selesnow.github.io/r_package_course/|===========================================| Поддержать канал: Вы можете поддержать канал любой произвольной суммой , собранные средства пойдут на закупку оборудования, которое поможет повысить качество контента.
https://secure.wayforpay.com/payment/R4marketing|===========================================| Автор: Алексей Селезнёв Telegram канал:
https://t.me/R4marketingВоркшоп по работе с Google Ads API с помощью языка R и пакета rgoogleads. В ходе которого мы с нуля разберёмся как пройти авторизацию, запрашивать отчёты из Google Ads, и проанализируем показатель качества ключевых слов рекламного аккаунта. |===========================================| Тайм коды: 00:00:00 Приветвие 00:01:12 О спикере 00:03:43 Программа воркшопа 00:04:14 Что такое контекстная реклама и сервис Google Ads 00:06:34 Варианты авторизации в пакете rgoogleads 00:07:24 Авторизация в Google Ads с помощью дефолтных параметров пакета rgoogleads 00:10:00 Создание собственных учётных данных для авторизации 00:21:12 Авторизация в Google Ads с помощью собственных учётных данных 00:23:00 Иерархия аккаунтов в Google Ads API 00:24:53 Ограничения при использовании собственных учётных данных 00:25:54 Автоматизация процесса авторизации с помощью переменных среды 00:26:43 Опции пакеа rgoogleads 00:27:34 Запрос отчётов из Google Ads API 00:30:49 GAQL QueryBuilder 00:34:52 Пример запроса отчётов из Google Ads API 00:39:54 Аргументы функции gads_get_report() 00:41:13 Загрузка отчётов из Google Ads API в многопоточном режиме 00:44:34 Запрос объектов рекламного кабинета Google Ads 00:45:49 Что такое показатель качества ключевых слов и как проходит аукцион среди рекламодателей в Google Ads 00:47:47 Что влияет на показатель качества ключевых слов Google Ads 00:48:29 На что влияет показатель качества Google Ads 00:49:16 Пример анализа качества ключевых слов 01:03:36 Ответы на вопросы |===========================================| Поддержать канал: Вы можете поддержать канал любой произвольной суммой, собранные средства пойдут на закупку оборудования, которое поможет повысить качество контента.
https://secure.wayforpay.com/payment/R4marketing|===========================================| Автор: Алексей Селезнёв Telegram канал:
https://t.me/R4marketinghttr
на протяжении последних двух лет, и вчера был официальный релиз стабильной версии httr2
.
httr2 является преемником httr.Основное его отличие состоит в том, что у него есть явный объект запроса, который можно создать с помощью нескольких вызовов функций. Это делает интерфейс более естественным для работы в пайпах и в целом упрощает жизнь, поскольку вы можете итеративно создавать сложный запрос. httr2 также основан на 10-летнем опыте разработки пакетов, который мы накопили с момента создания httr, поэтому его использование должно быть более удобным. Если вы в настоящее время являетесь пользователем httr, вам не нужно переходить на него, поскольку мы продолжим поддерживать пакет в течение многих лет, но если вы начинаете новый проект, я бы рекомендовал вам попробовать httr2.
От себя добавлю, что с момента выхода httr2
все свои новые пакеты я уже писал на его основе.
————————————————
Что нового в httr2 1.0.0
В этом выпуске представлены улучшенные инструменты для выполнения нескольких запросов, а также множество исправлений ошибок и незначительных улучшений для OAuth.
Для управления политикой отправки набора запросов в данном релизе добавлены следующие 3 функции:
● req_perform_sequential()
- берет список запросов и выполняет их по одному.
● req_perform_parallel()
- берет список запросов и выполняет их параллельно (до 6 одновременно по умолчанию). По смыслу похоже на req_perform_sequential()
, но, очевидно, быстрее за счет потенциальной нагрузки на сервер. У него также есть некоторые ограничения: самое главное, он не может обновить токен OAuth с истекшим сроком действия и игнорирует политику обработки ошибок настроенную через`req_retry()`
и ограничение скорости отправки запросов через `req_throttle()
.
● req_perform_iterative() - принимает один запрос и функцию обратного вызова для генерации следующего запроса из предыдущего ответа. Это будет продолжаться до тех пор, пока функция обратного вызова не вернется NULL или max_reqs не будут выполнены запросы. Это очень полезно для API с поддержкой пагинации, которые сообщают только URL-адрес следующей страницы.
Небольшой пример кода для работы с набором запросов:
# формируем URL для запроса
urls <- paste0("https://swapi.dev/api/people/", 1:10)
# генерируем список объектов запроса
reqs <- lapply(urls, request)
# последовательно отправляем каждый запрос из списка
resps <- req_perform_sequential(reqs)
# функция для парсинга результатов
sw_data <- function(resp) {
tibble::as_tibble(resp_body_json(resp)[1:9])
}
# парсинг результата
resps |> resps_data(sw_data)
Так же у пакета теперь появился официальный логотип, который вы видите на изображении к посту.
Ссылки:
- Прочитать о выпуске httr2 1.0.0 можно по ссылке
Полезные материалы по httr2:
- Начало работы с httr2
- Оборачиваем API с помощью httr2
- Видео урок по созданию пакета обёртки над API с помощью httr2
#новости_и_релизы_по_Rinstall.packages('rlinkedinads')
pak::pak('selesnow/rlinkedinads')
Пример кода:
library(rlinkedinads)
lkd_set_login('ВАШ ЛОГИН')
lkd_set_account_id(ID ВАШЕГО РЕКЛАМНОГО АККАУНТА)
# Иерархия рекламного аккаунта
accounts <- lkd_get_accounts()
user_accounts <- lkd_get_accounts_by_authenticated_user()
account_users <- lkd_get_ad_account_users_by_accounts(account_urn_id = 'urn:li:sponsoredAccount:511009658')
campaign_groups <- lkd_get_campaign_groups()
campaigns <- lkd_get_campaigns()
creatives <- lkd_get_creatives()
# Запрос аналитики
report <- lkd_get_ads_analytics(
pivot = 'CAMPAIGN',
date_from = '2023-01-01,
date_to = '2023-06-30,
time_granularity = 'DAILY',
fields = c(
'pivotValues',
'dateRange',
'clicks',
'impressions',
'dateRange',
'costInUsd',
'oneClickLeads',
'externalWebsiteConversions'
),
facets = list(
accounts = 'urn:li:sponsoredAccount:511009658',
campaigns = "urn:li:sponsoredCampaign:253102116",
campaigns = "urn:li:sponsoredCampaign:229686963"
)
)
В ближайшее время запишу видео урок по работе с пакетом.
#новости_и_релизы_по_R