Бизнес блог #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
Новое видео на 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.
Ссылки:
● Видео урок
● Статья с конспектом к уроку
YouTube
Запуск R скриптов по расписанию с помощью GitHub Actions
В этом видео уроке мы подробно рассмотрим концепцию CI/CD, то есть непрерывной интеграции и непрерывного развёртывания. Мы узнаем, как настроить автоматический запуск ваших скриптов по расписанию с помощью сервиса GitHub Actions, что позволяет обходиться…
Видео:Личные кейсы использования 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
YouTube
ChatGPT для аналитика данных. Успешные и не успешные кейсы использования в работе.
В этом видео я делюсь своим опытом использования ChatGPT 4 в работе аналитика данных. С мая 2024 года ChatGPT 4 стал доступен бесплатно, хоть и с ограниченным доступом, что позволяет нам исследовать его потенциал без дополнительных затрат. Я расскажу о нескольких…
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
Какразбить таблицу на части по заданному количеству строк
Иногда вам может потребоваться разбить таблицу на части, либо по количеству строк, либо по значениям какого то поля, в этом вам поможет функция 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
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
...
```
Добавляемполезные аннотации к части вызова пакетв в своих скриптах
Принято прописывать команды загрузки пакетов в начале вашего скрипта, обычно это выглядит как-то так:
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
.
Релизbigrquery 1.5.0
Я довольно плотно работаю с BigQuery, соответственно не редко использую для этого пакет bigrquery
. Пару дней назад был достаточно важный релиз bigrquery 1.5.0,
Что нового:
Основные изменения:
bq_
. bq_table_download()
теперь возвращает в текстовом формате поля, которые в BigQuery хранятся в неизвестном для R типе. Ранее вы получали ошибку при попытке загрузить таблицы с полями которые имели тип BIGNUMERIC или JSON. bigrquery
анализирует даты с помощью пакета clock
. Это приводит к значительному повышению производительности и гарантирует корректный анализ дат до 1970-01-01. Изменение в DBI интерфейсе:
dbConnect()
. dbAppendTable()
, dbCreateTable()
и dbExecute()
dbGetQuery()
и dbSendQuery()
поддерживают передачу параметров запросов с помощью аргумента params
. Так же ряд менее значительных изменений получил и dbplyr
интерфейс, например tbl()
теперь работает не только с физическими таблицами, но и с представлениями (View).
Более подробно обо всех изменениях можно почитать на GitHub.
Времяобновить пакеты rfacebookstat и rlinkedinads
rfacebookstat
- пакет для запроса статистики из рекламных кабинетов Facebook и Instagram Пакет был переведён на работу с Facebook Marketing API v18.
Пользователям пакета необходимо только установить его новую версию, все скрипты будут работать без каких либо дополнительных изменений.
rlinkedinads
- пакет для запроса статистики из рекламных кабинетов Linkedon В rlinkedinads
была исправлена ошибка обновления токена. Кроме обновления никаких дополнительных действий не требуется.
Курс "Разработка пакетов на языке 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
- Благодарности автору
YouTube
Разработка пакетов на R: Вводное слово
Несколько вводных слов о курсе "Разработка пакетов на R". |===========================================| Ссылка на курс: https://selesnow.github.io/r\_package\_course/ |===========================================| Поддержать канал: Вы можете поддержать канал…
Воркшоп прошел ещё 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
- Страница с материалами воркшопа
YouTube
Воркшоп: Анализ показателя качества ключевых слов в Google Ads с помощью пакета rgoogleads
Воркшоп по работе с Google Ads API с помощью языка R и пакета rgoogleads. В ходе которого мы с нуля разберёмся как пройти авторизацию, запрашивать отчёты из Google Ads, и проанализируем показатель качества ключевых слов рекламного аккаунта. |===========…
Вышел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
Бизнес блог #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