R4marketing | канал Алексея Селезнёва | Язык R

Description
Автор канала Алексей Селезнёв, украинский аналитик, автор ряда курсов по языку R и пакетов расширяющих его возможности.

В канале публикуются статьи, доклады, новости, уроки и заметки по языку R.

Для связи: @AlexeySeleznev
Реклама: http://bit.ly/39MwJCY
Advertising
We recommend to visit

Бизнес блог #1
Выжимаю книги до самой сути.

? Реклама - @jaMasha

? Хотите свою книгу? Мы напишем её за вас и сделаем книгу бестселлером. Подробности в боте @Summary_library_bot

? Оставьте след в истории с помощью книги
https://expert-book.pro

Фильмы и сериалы со всей планеты. Мы знаем, что посмотреть, где посмотреть и на что сходить в кино.

Last updated 1 month, 4 weeks ago

Все материалы размещены по партнёрской програме ivi.ru | All materials are posted on the partner program ivi.ru

По рекламе писать: @kuzr103

Основной канал: https://t.me/kino_hd2

Last updated 3 days, 2 hours ago

2 months, 4 weeks ago

Новое видео на YouTube: Как настроить запуск R скриптов по расписанию с помощью GitHub Action

В новом видеоуроке я погружаюсь в мир непрерывной интеграции и развёртывания (CI/CD), а также расскажу, как автоматизировать запуск скриптов с помощью GitHub Actions. Я покажу способ, который позволяет настроить расписание запуска ваших скриптов без необходимости аренды серверов.

Что вы узнаете из видео:

● Основы CI/CD и их роль в автоматизации.
● Настройка рабочего процесса с GitHub Actions.
● Конфигурация YAML файлов для управления рабочими процессами.
● Настройка автоматического запуска скриптов по расписанию.

Тайм-коды:
00:00 Вступление
00:49 CI/CD: Непрерывная интеграция и непрерывное развёртывание
01:45 Что такое GitHub Actions
02:30 Обзор рабочего процесса
03:05 Создание репозитория на GitHub
05:11 Добавляем в репозиторий R-скрипт
08:03 Настройка GitHub Actions
09:47 Конфигурация YAML файла, описывающего рабочий процесс
10:10 Настройка расписания запуска в YAML файле
12:17 Разбираем все команды в YAML файле рабочего процесса
19:01 Создание переменных среды в GitHub репозитории
20:26 Отправляем проект на GitHub
20:52 Запускаем GitHub Action
22:46 Заключение

Если видео окажется полезным и наберёт много откликов то в будущем запишу такое же видео про GitLab.

Ссылки:
Видео урок
Статья с конспектом к уроку

#видео_уроки_по_R

YouTube

Запуск R скриптов по расписанию с помощью GitHub Actions

В этом видео уроке мы подробно рассмотрим концепцию CI/CD, то есть непрерывной интеграции и непрерывного развёртывания. Мы узнаем, как настроить автоматический запуск ваших скриптов по расписанию с помощью сервиса GitHub Actions, что позволяет обходиться…

3 months ago

Видео:Личные кейсы использования ChatGPT в рутинных рабочих задачах

Друзья, я выпустил новый видеоурок, где делюсь своим опытом использования ChatGPT 4 в работе аналитика данных. В этом видео вы узнаете о моих успешных и не очень успешных кейсах применения ChatGPT для генерации кода на R и M, а также какие сложности возникли при переводе Python кода в R.

Что вас ждет в видео:
● Обзор пользовательских GPT для аналитиков данных
● Успешные примеры генерации R и M кода для различных задач
● Опыт автоматизации задач с помощью ChatGPT
● Пример неудачной попытки перевода кода с Python на R

Тайм-коды:
00:00 Вступление
01:08 Пользовательские GTP для аналитика данных
07:31 Успешный кейс №1: Генерация R кода для запроса курсов валют
13:33 Успешный кейс №2: Генерация кода на языке M для генерации справочников в Power Query
20:05 Успешный кейс №3: Генерация R кода для отправки HTTP запроса по скриншоту из Postman
24:56 Неуспешный кейс: Перевод Python кода в R
28:33 Заключение

В комментариях делитесь своими кейсами использования в работе ChatGPT.

Ссылки:
Статья с конспектом к видео уроку
Видео на YouTube

#видео_уроки_по_R

YouTube

ChatGPT для аналитика данных. Успешные и не успешные кейсы использования в работе.

В этом видео я делюсь своим опытом использования ChatGPT 4 в работе аналитика данных. С мая 2024 года ChatGPT 4 стал доступен бесплатно, хоть и с ограниченным доступом, что позволяет нам исследовать его потенциал без дополнительных затрат. Я расскажу о нескольких…

3 months, 1 week ago

ggplot3.5.0.

Привет, друзья! Давно я тут ничего не публиковал, но думаю пора возвращаться из творческого отпуска.

Хедли со своей командой в феврале этого года анонсировали выход новой версии ggplot2 3.5.0. А в конце апреля вышел к ней патч 3.5.1. Этот релиз включает множество улучшений и новых возможностей, которые делают работу с графиками еще более удобной и мощной. Давайте разберемся, что нового появилось в этой версии.

1. Обновления в темах графиков:

В новой версии ggplot2 добавлены улучшения в настройках тем. Теперь стало проще задавать стили для текста, фона и сетки графиков. Это делает ваши визуализации еще более настраиваемыми и привлекательными.

2. Усовершенствованные функции для координатных систем:

Введены улучшения в работе с координатными системами. Новые функции позволяют гибче настраивать масштабирование и пропорции графиков, что особенно полезно при работе с данными, требующими специфического отображения.

3. Новые геометрические объекты:

Добавлены новые геометрические объекты, такие как geom_density2d_filled, которые позволяют создавать двухмерные плотностные графики с заполненными областями. Это значительно расширяет возможности для анализа данных.

4. Оптимизация производительности:

Разработчики внесли изменения, которые улучшают производительность пакета. Графики теперь строятся быстрее, что особенно заметно при работе с большими наборами данных.

Примеры использования

Вот пример использования новой функции geom_density2d_filled для создания двухмерного плотностного графика:

```
library(ggplot2)

# Создаем примерный набор данных
data <- data.frame(x = rnorm(1000), y = rnorm(1000))

# Строим график с использованием новой функции
ggplot(data, aes(x = x, y = y)) +
geom_density2d_filled() +
theme_minimal() +
labs(title = "2D Density Plot with geom_density2d_filled",
x = "X Axis",
y = "Y Axis")
```

Пробуйте новые функции, делитесь своими впечатлениями и находками в комментариях.

Ссылки:
Статья "ggplot2 3.5.0" в блоге Tidyverse

#новости_и_релизы_по_R

**ggplot****3.5.0.**
8 months ago

Какразбить таблицу на части по заданному количеству строк

Иногда вам может потребоваться разбить таблицу на части, либо по количеству строк, либо по значениям какого то поля, в этом вам поможет функция 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 Useprint(n = ...)` to see more rows

$b
# A tibble: 20 x 3
row_num numbers letters

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

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

**Как****разбить таблицу на части по заданному количеству строк**
8 months, 2 weeks ago

Добавляемполезные аннотации к части вызова пакетв в своих скриптах

Принято прописывать команды загрузки пакетов в начале вашего скрипта, обычно это выглядит как-то так:

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.

#заметки_по_R

8 months, 3 weeks ago

Релизbigrquery 1.5.0

Я довольно плотно работаю с BigQuery, соответственно не редко использую для этого пакет bigrquery. Пару дней назад был достаточно важный релиз 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.

#новости_и_релизы_по_R

**Релиз****bigrquery 1.5.0**
8 months, 3 weeks ago

Времяобновить пакеты rfacebookstat и rlinkedinads

  1. rfacebookstat - пакет для запроса статистики из рекламных кабинетов Facebook и Instagram

Пакет был переведён на работу с Facebook Marketing API v18.

Пользователям пакета необходимо только установить его новую версию, все скрипты будут работать без каких либо дополнительных изменений.

  1. rlinkedinads - пакет для запроса статистики из рекламных кабинетов Linkedon

В rlinkedinads была исправлена ошибка обновления токена. Кроме обновления никаких дополнительных действий не требуется.

#новости_и_релизы_по_R

**Время****обновить пакеты rfacebookstat и rlinkedinads**
10 months, 3 weeks ago

Курс "Разработка пакетов на языке R" опубликован на bookdown.org

В начале месяца я упоминал о завершении разработки последнего, 14-го урока курса и о планах опубликовать его на bookdown. Итак, рад сообщить, что курс теперь доступен на указанной платформе.

О курсе:
Что касается содержания курса, он был создан под впечатлением от книги Хедли Викхема и Дженни Брайан "R Packages (2e)". Мой опыт в разработке R-пакетов начался в 2016 году, и, как выяснилось, мои первые шаги были далеко не самыми эффективными. Книга Хедли предоставила современный и эффективный подход к разработке пакетов, что я внедрил в этот курс.

Курс объединяет мой семилетний опыт в создании пакетов с тем, что было представлено Викхемом и Брайан в их книге. У этих авторов есть чему поучиться.

Этот курс будет полезен как тем, кто только начинает свой путь в создании пакетов, так и тем, кто уже обладает опытом, поскольку в нем рассматриваются передовые практики в разработке пакетов. Так, что если вы не пробовали ещё себя в разработке пакета, то самое время попробовать.

Хотя некоторые теоретические главы книги были опущены, вместо них были добавлены уроки по созданию пакетов-обёрток над API с использованием httr2 и 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

YouTube

Разработка пакетов на R: Вводное слово

Несколько вводных слов о курсе "Разработка пакетов на R". |===========================================| Ссылка на курс: https://selesnow.github.io/r\_package\_course/ |===========================================| Поддержать канал: Вы можете поддержать канал…

10 months, 3 weeks ago

Опубликовал видео воркшопа по анализу показателя качества ключевых слов в Google Ads с помощью пакета rgoogleads

Воркшоп прошел ещё 14 сентября, но у меня только недавно добрались руки до его записи.

Описание:
Воркшоп по работе с 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 Ответы на вопросы

Организаторы:
- Дмитрий Серебренников
- Kazakhstan Sociology Lab (сайт, инстаграм, LinkedIn, группа в тг)

Ссылки:
- Видео на YouTube
- Страница с материалами воркшопа

#видео_уроки_по_R

YouTube

Воркшоп: Анализ показателя качества ключевых слов в Google Ads с помощью пакета rgoogleads

Воркшоп по работе с Google Ads API с помощью языка R и пакета rgoogleads. В ходе которого мы с нуля разберёмся как пройти авторизацию, запрашивать отчёты из Google Ads, и проанализируем показатель качества ключевых слов рекламного аккаунта. |===========…

11 months ago

Вышелhttr2 1.0.0

Команда Хедли работала над вторым поколением httr на протяжении последних двух лет, и вчера был официальный релиз стабильной версии 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)
```

● В функцию req_url_query() добавлен аргумент .multi, который позволяет управлять поведением параметра, если вы передаёте в него набор значений в виде вектора:
- .multi = "comma" - разделение значений через запятую
- .multi = "pipe" - разделение значений через |
- .multi = "explode" - создание одного параметра для каждого значения (например a = c(1, 2) конвертируется в ?a=1&a=2)

● Так же у пакета теперь появился официальный логотип, который вы видите на изображении к посту.

Ссылки:
- Прочитать о выпуске httr2 1.0.0 можно по ссылке

Полезные материалы по httr2:
- Начало работы с httr2
- Оборачиваем API с помощью httr2
- Видео урок по созданию пакета обёртки над API с помощью httr2

#новости_и_релизы_по_R

**Вышел****httr2 1.0.0**
We recommend to visit

Бизнес блог #1
Выжимаю книги до самой сути.

? Реклама - @jaMasha

? Хотите свою книгу? Мы напишем её за вас и сделаем книгу бестселлером. Подробности в боте @Summary_library_bot

? Оставьте след в истории с помощью книги
https://expert-book.pro

Фильмы и сериалы со всей планеты. Мы знаем, что посмотреть, где посмотреть и на что сходить в кино.

Last updated 1 month, 4 weeks ago

Все материалы размещены по партнёрской програме ivi.ru | All materials are posted on the partner program ivi.ru

По рекламе писать: @kuzr103

Основной канал: https://t.me/kino_hd2

Last updated 3 days, 2 hours ago