cookie

Utilizamos cookies para mejorar tu experiencia de navegación. Al hacer clic en "Aceptar todo", aceptas el uso de cookies.

avatar

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

Автор канала Алексей Селезнёв, украинский аналитик, автор ряда курсов по языку R и пакетов расширяющих его возможности. В канале публикуются статьи, доклады, новости, уроки и заметки по языку R. Для связи: @AlexeySeleznev Реклама: http://bit.ly/39MwJCY

Mostrar más
Publicaciones publicitarias
4 477
Suscriptores
-324 horas
-57 días
-930 días

Carga de datos en curso...

Tasa de crecimiento de suscriptores

Carga de datos en curso...

🔥 Крутая находка - 1900 вопросов с собеседований по аналитике данных, R машинному обучению. Фишка в том, что вопросы разбирают Сеньоры, которые сами проводят собесы и дают примеры правильных ответов. Вы легко получите оффер, изучив популярные вопросы 💼
Mostrar todo...
Machine learning Interview

@notxxx1 - админ Вопросы с собеседований по Machine Learning, Data Science, Deep Learning и Нейроннным сетям @data_analysis_ml - анализ данных @ai_machinelearning_big_data @itchannels_telegram - важное для программиста

👍 19 3🔥 3
Как разбить таблицу на части по заданному количеству строк Иногда вам может потребоваться разбить таблицу на части, либо по количеству строк, либо по значениям какого то поля, в этом вам поможет функция 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
Mostrar todo...

🔥 20👍 6 2
Добавляем полезные аннотации к части вызова пакетв в своих скриптах Принято прописывать команды загрузки пакетов в начале вашего скрипта, обычно это выглядит как-то так:
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
Mostrar todo...

👍 22🔥 3 1
Релиз 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
Mostrar todo...

👍 19
Время обновить пакеты rfacebookstat и rlinkedinads 1. rfacebookstat - пакет для запроса статистики из рекламных кабинетов Facebook и Instagram Пакет был переведён на работу с Facebook Marketing API v18. Пользователям пакета необходимо только установить его новую версию, все скрипты будут работать без каких либо дополнительных изменений. 2. rlinkedinads - пакет для запроса статистики из рекламных кабинетов Linkedon В rlinkedinads была исправлена ошибка обновления токена. Кроме обновления никаких дополнительных действий не требуется. #новости_и_релизы_по_R
Mostrar todo...

👍 10 1
Курс "Разработка пакетов на языке 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
Mostrar todo...
Разработка пакетов на R: Вводное слово

Несколько вводных слов о курсе "Разработка пакетов на R". |===========================================| Ссылка на курс:

https://selesnow.github.io/r_package_course/

|===========================================| Поддержать канал: Вы можете поддержать канал любой произвольной суммой , собранные средства пойдут на закупку оборудования, которое поможет повысить качество контента.

https://secure.wayforpay.com/payment/R4marketing

|===========================================| Автор: Алексей Селезнёв Telegram канал:

https://t.me/R4marketing

👍 36🔥 9 1🤔 1
Опубликовал видео воркшопа по анализу показателя качества ключевых слов в 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
Mostrar todo...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads с помощью пакета rgoogleads

Воркшоп по работе с 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/R4marketing

🔥 13 4👍 3
Вышел 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)
Так же у пакета теперь появился официальный логотип, который вы видите на изображении к посту. Ссылки: - Прочитать о выпуске httr2 1.0.0 можно по ссылке Полезные материалы по httr2: - Начало работы с httr2 - Оборачиваем API с помощью httr2 - Видео урок по созданию пакета обёртки над API с помощью httr2 #новости_и_релизы_по_R
Mostrar todo...

👍 17🔥 1
rlinkedinads - Пакет для работы с Linkedin Advertising API Ранее никогда не приходилось работать с Linkedin API, но в этом месяце была задача написать скрипт, который бы запрашивал статистику их рекламного кабинета Linkedin, соответственно в ходе её решения появился пакет для работы с Linkedin Advertising API. На данный момент в пакете реализован следующий функционал: ● Интерфейс авторизации ● Запрос всех объектов рекламного кабинета ● Запрос статистики из рекламного кабинета Установить пакет можно из CRAN или Github:
install.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
Mostrar todo...

🔥 13👍 4 2 2
Уес МакКинни присоединился к Posit (ex. RStudio) Несомненно это пожалуй самая громкая новость в мире R как минимум за этот год. Ниже приведу перевод сообщения из рассылки Posit. в котором они поделились этой новостью. Мы рады сообщить, что Уэс МакКинни присоединился к Posit! ————————————— Уэс МакКинни — предприниматель и разработчик ПО с открытым исходным кодом, который за последние 15 лет внес значительный вклад в развитие сообществ науки о данных и аналитики. Его пакет pandas стал стандартом для анализа и обработки данных Python. Его книга «Python для анализа данных» научила целое поколение ученых, занимающихся данными, как продуктивно работать с новой платформой pandas, NumPy, matplotlib и Jupyter. С момента создания pandas Уэс неустанно работал над тем, чтобы сделать основные системы, которые мы используем для обработки и анализа данных, масштабируемыми, совместимыми и компонуемыми с помощью таких проектов, как Ibis , Apache Arrow и Feather . И теперь мы очень рады сотрудничать с Уэсом и внести свой вклад в экосистему PyData. Когда мы сменили название на Posit, нашей целью было объединить усилия для создания отличных инструментов для анализа данных, независимо от языка, и сотрудничество с Уэсом — огромный шаг вперед в реализации этой мечты. Прочтите сообщение в блоге Уэса, чтобы узнать больше о том, над чем он планирует работать в Posit. Нам не терпится увидеть, что он создаст в ближайшие годы! ————————————— Пожелаем Уэсу успехов! #новости_и_релизы_по_R
Mostrar todo...

👍 19🔥 6 1😢 1