R4marketing | канал Алексея Селезнёва | Язык R
4.28K subscribers
59 photos
11 files
1.21K links
Автор канала Алексей Селезнёв, украинский аналитик, автор ряда курсов по языку R и пакетов расширяющих его возможности.

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

Для связи: @AlexeySeleznev
Реклама: http://bit.ly/39MwJCY
Download Telegram
​​Работа с YouTube API на языке R

Друзья, этот год у меня выдался очень плодотворным на разработку новых пакетов. Рад представить вам rytstat, интерфейс для взаимодействия со всеми доступными в YouTube API.


Основные функции пакета rytstat

ryt_auth_configure() - конфигурация авторизации (для продвинутых пользователей);
ryt_auth() - авторизация;
ryt_get_channels() - получить информацию о вашем канале (YouTube Data API);
ryt_get_channel_activities() - получить список активностей связанных с вашим каналом (YouTube Data API);
ryt_get_videos() - получить список видео вашего канала (YouTube Data API);
ryt_get_video_details() - получить детальную информацию по видео (YouTube Data API);
ryt_get_playlists() - получить список плейлистов вашего канала (YouTube Data API);
ryt_get_comments() - получить цепочку комментариев к видео (YouTube Data API);
ryt_get_analytics() - получить аналитику (YouTube Analytics API);
ryt_get_report_types() - получить доступные типы отчётов (YouTube Reporting API);
ryt_create_job() - создать задание на генерацию отчётов (YouTube Reporting API);
ryt_get_report_list() - получить список отчётов сгенерированных конкретным заданием (YouTube Reporting API);
ryt_get_report_metadata() - получить метаданные отчёта (YouTube Reporting API)
ryt_get_report() - загрузить данные конкретного отчёта (YouTube Reporting API);
ryt_delete_job() - удалить задание на генерацию отчётов (YouTube Reporting API);


Преимущества пакета rytstat

Если ранее вы уже задавались вопросом сбора данных из YouTube, то наверняка находили пакеты tuber и youtubeAnalyticsR. И вполне логично вы можете спросить зачем понадобился rytstat, ниже я перечислю его преимущества.

● Проблема tuber заключается в том, что он работает только с YouTube Data API, и не позволяет запрашивать отчёты.
● Проблема youtubeAnalyticsR в том, что он работает только с YouTube Analytics API, и не позволяет запрашивать список объектов для фильтрации данных.
rytstat работает со всеми YouTube API, включая YouTube Reporting API, с которым не работают другие пакеты в принципе.
● Для авторизации и работы с YouTube API rytstat использует под капотом gargle, т.е. процесс авторизации будет вам знаком, если вы использовали пакеты: googlesheets4, googledrive, rgoogleads и т.д..
● OAuth клиент, который в rytstat используется по умолчанию уже прошел проверку Google и был одобрен, т.е. вы можете использовать встроенный OAuth клиент, не тратя время на создание собственного.


Установка пакета

Установить rytstat можно с CRAN и GitHub.

 
install.packages("rytstat")
devtools::install_github("selesnow/rytstat")


Ссылки:
- пока нет русскоязычной документации, но примеры кода можно посмотреть на сайте пакета
​​Быстрое преобразование разноформатного описания дат в тип даты

Новый пакет datefixR состоит всего из двух функций: fix_date() и fix_dates(), и позволяет быстро преобразовать введённые пользователями даты в разном формате, в объекты типа даты в R.

fix_date() - работает со скалярами:
 
library(datefixR)

fix_date("01 02 2014")
#> [1] "2014-02-01"


А fix_dates() предназначена для обработки столбцов таблицы:
 
df <- data.frame(
some.dates = c('02/05/92', '01-04-2020', '1996/05/01', '2020-05-01', '02-04-96'),
some.more.dates = c('01 03 2015', '02/05/00' ,'01/05/1990', '03-Dec-2012', '02 April 2020')
)

df

some.dates some.more.dates
1 02/05/92 01 03 2015
2 01-04-2020 02/05/00
3 1996/05/01 01/05/1990
4 2020-05-01 03-Dec-2012
5 02-04-96 02 April 2020

# корректируем дату
fix_dates(
df = df,
col.names = c("some.dates", "some.more.dates")
)

some.dates some.more.dates
1 1992-05-02 2015-03-01
2 2020-04-01 2000-05-02
3 1996-05-01 1990-05-01
4 2020-05-01 2012-12-03
5 1996-04-02 2020-04-02


Ссылки:
- пакет попал в топ 40 опубликованных на CRAN в ноябре 2021
- примеры кода взяты из виньетки "datefixR"

#заметки_по_R
​​Реализация ООП для работы с базами данных в R

В R не особо распространена Объектно-Ориентированная Парадигма программирования, и работа с базами данных не исключение. Классический подход для работы с базами данных в R предоставляет пакет DBI (DataBase Interface), я о нём подробно рассказывал в статье "Взаимодействие R с базами данных на примере Microsoft SQL Server и других СУБД".

Тем не менее, для работы с базой данных ООП бывает очень удобным, новый пакет rocker реализует взаимодействие с СУБД через R6 классы.

Ниже пример работы с БД с помощью DBI:
 
library(DBI)
library(RSQLite)
# DBI
## Загрузка драйвера
drv <- SQLite()
## Тест соединения
dbCanConnect(
drv = drv,
dbname = ":memory:"
)
#> [1] TRUE

## Открываем соединение
con <- dbConnect(
drv = drv,
dbname = ":memory:"
)

## Создаём таблицу
dbWriteTable(con, "mtcars", mtcars)
## Получить результат запроса
res <- dbGetQuery(con, "SELECT * FROM mtcars;")
## Закрыть соединение
dbDisconnect(con)
## Отключить драйвер
dbUnloadDriver(drv)

А теперь перепишем его на ООП с помощью rocker:
 
library(rocker)
# R6 классы
## Создание объекты базы данных
db <- rocker::newDB(verbose = FALSE)
## Настройка параметров соединения
db$setupDriver(
drv = RSQLite::SQLite(),
dbname = ":memory:"
)
## Тест соединения
db$canConnect()
#> [1] TRUE

## Открыть соединение
db$connect()
## Создаём таблицу
db$writeTable("mtcars", mtcars)
## Получить результат запроса
db$getQuery("SELECT * FROM mtcars;")
## Закрыть соединение
db$disconnect()
## Отключить драйвер
db$unloadDriver()

Ссылки:
- Пакет rocker попал в топ 40 опубликованных на CRAN в ноябре 2020
- README пакета
- статья "Взаимодействие R с базами данных на примере Microsoft SQL Server и других СУБД", в статью уже добавил информаций про rocker.

#заметки_по_R
👍1
​​Прощай 2021, следующая станция 2022

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

Опубликовал у себя в блоге итоги уходящего 2021 и поделился ближайшими планами на 2022.

Содержание:

● Новые пакеты
● Обновление старых пакетов
● rvkstat
● rmytarget
● rfacebookstat
● Пакеты ставшие официальными клиентами к API
● Книга «Язык R для интернет маркетинга»
● Курс «Циклы и функционалы в языке R»
● Заключение
​​Итоги года по R4marketing по версии TGStat
​​Друзья, до нового 2022 года остаются считанные часы, а у кого-то он уже наступил (привет моей исторической родине Дальнему Востоку).

2021 год для многих был годом надежд, по большей степени связанных с завершением пандемии. Мы постепенно привыкаем к изменившемуся миру, и он оказался не таким уж и ужасным как по началу казалось.

Коротко о том, что было сделано мной в 2021:

- Написал и опубликовал в CRAN 7 новых пакетов;
- Наконец разобрался с некоторыми API Google (rgoogleads и rytstat являются тому подтверждением);
- Начал работу над полноценным бумажным изданием книги “Язык R для интернета маркетинга”, на данный момент готово порядка 70% книги, следите за анонсами;
- Опубликовал 9 новых статей;
- Записал и опубликовал 11 видео уроков на своём YouTube канале;
- Телеграм канал показал рекордный за всё время рост по количеству новых подписчиков, за год +1379, т.е. вырос почти на половину относительно 1 января 2021 года. Спасибо вам!


В ближайших планах:

- Публикация нескольких очень полезных переводов на Хабре (январь, февраль);
- Публикация бесплатного курса “Циклы и функционалы в языке R”, сам курс будет опубликован 10 марта 2022, но видео будут появляться последовательно в январе - марте;
- Завершение работы над книгой “Язык R для интернет маркетинга”, надеюсь до лета справлюсь.

———————
Друзья, здоровья, вдохновения, наконец путешествий, в Новом 2022 году!

———————
И небольшой праздничный график (результат его работы на изображении к посту):

library(dplyr)
library(ggplot2)
ornaments = data.frame(
row = rep(1:8, (8:1)*seq(3, 2, length.out = 8))
) %>%
mutate(x = row + runif(nrow(.), -.5, 0),
size = runif(nrow(.), 3, 8),
color = sample(c("red2", "gold", "skyblue1"), nrow(.), T)) %>%
mutate(y = runif(nrow(.), -9+row, 9-row))
ggplot() +
geom_rect(aes(xmin = 0, ymin = -1, xmax = 8, ymax = 1), fill = "tan4") +
geom_col(aes(1:8, 8:1), fill = "darkgreen") +
geom_col(aes(1:8, -8:-1), fill = "darkgreen") +
geom_point(aes(9, 0), color = "gold", size = 10, shape = 8, stroke = 3) +geom_point(aes(x, y, color = I(color), size = I(size)), ornaments) +
coord_flip() +
theme_void()

Ссылки:
- код подсмотрел тут.
😁3🔥2👍1🎉1
​​Утиные истории со стрелами на паркете

Начинаем год шикарной статьёй про arrow и duck db.

В этой статье сошлись 3 технологии обработки/хранения данных и каждая по своему примечательна, но обо всем по порядку.

Содержание:
● Утверждение 1. Паркет это хорошо (особенно в сравнении с ламинатом)
● Утверждение 2. Arrow - прекрасен, а pandas - не очень.
● А при чём тут вообще утки?

#статьи_по_R
👍6
​​Пакет для добавления глосс в rmarkdown

Глосси́рование (англ. Interlinear gloss) — это способ оформления текста, предполагающий наличие кратких пояснений к нему, которые помещаются в строчке между оригинальным текстом (или его транслитерацией) и переводом. Глоссы используются для того, чтобы читателю было ясно, как именно соотносится текст и его перевод с точки зрения грамматики и семантики. (из википедии)

Теперь передаю слово автору пакета lingglosses @aGricolaMZ.

Мой пакет позволяет делать лингвистические глоссы в html rmarkdown документе, а потом автоматически собирает их в список глосс. При этом значения глосс не придется писать руками: пакет сам их расшифрует.

Установка:
 
install.packages("remotes")
remotes::install_github("agricolamz/lingglosses")

# или из CRAN
install.packages('lingglosses')

Ссылки:
- документация пакета здесь
- предложения, благодарности и пожелания направлять автору

#новости_и_релизы_R
👍1
​​Основы программирования на R. Курс для новичков в разработке

Не смотря на название статьи, это совсем не курс, но вводная статья, в то, что такое R с планом его изучения.

Для того чтобы правильно изучить язык программирования R, у вас должен быть четкий структурированный план действий, что и за чем вы должны делать. У нас есть такой план действий и мы им делимся, чтобы вы смогли спокойно постичь основы программирования на R.

Содержание:
- Основы программирования на R
- R и его конкуренты
- Преимущества R
- Заключения

#статьи_по_R
​​Субботнее!

У каждого шедевра есть своя дешёвая копия
😁9👍4
​​Видео курс "Введение в dplyr 1.0.0"

Ещё весной 2020 года я записал серию видео уроков по статьям Хедли Викхема, которые предшествовали релизу dplyr 1.0.0, но в тот момент оформление этого материала закончилось на том, что я просто собрал все видео в один плейлист на YouTube.

Наконец у меня добрались руки собрать эти уроки в единый мини курс, который будет полезен тем, кто уже имеет базовые навыки работы в dplyr, но релиз версии 1.0.0 по какой-то причине пропустил, а в нём было много полезного.

Содержание:
- Функции select(), rename_with() и relocate()
- Функция across()
- Перебор строк функцией rowwise()
- Обновлённая функция summarise()
- Добавление, изменение и удаление строк дата фрейма через rows_*()

#курсы_по_R
👍8
Добро пожаловать в мир продвинутого Python программирования: @pro_python_code

В канале вы найдет :
📃Статьи ,
📚Книги
👨‍💻 Код
🔗Ссылки
и много другой полезной информации

#Python #Django
#Machine Learning #DataScience
#Django #Advancedresearch

1 канал вместо тысячи учебников и курсов, подписывайтесь: 👇👇👇

🐍 @pythonl
👍1
​​релиз getProxy 1.13

getProxy - пакет, который помогает обойти блокировку, например при работе с API заблокированных в вашей стране сервисов, для Украины это Вконтакте, Яндекс и так далее.

getProxy состоит всего из одной, одноимённой функции, запрашивает из API нескольких сервисов бесплатный прокси и перенаправляет через него ваше интернет соединение.

Что нового:

● С сентября многие столкнулись с проблемой SSL сертификатов, ранее getProxy под капотом использовал RCurl, версия 1.13 была полностью переписана на httr, и проблем с SSL сертификатом больше нет.
● Ранее пакет искал прокси только в двух сервисах, теперь добавлен третий proxy-list.download.
● Была полностью переписана логика подбора сервиса для запроса прокси, ранее по очереди использовались лимиты каждого сервера, теперь пакет делает 10 попыток рандомно опрашивая сервисы.

Ссылки:
- видео урок по работе с getPtoxy
- статья "Как обойти блокировку API запрещенных сервисов с помощью скриптов R"

#новости_и_релизы_R
🔥2
Как не использовать циклы в R: Разбираем пакет purrr

В прошлом видео мы начали разбор темы "Как не использовать циклы в R", и рассмотрели функции семейства apply(). Но есть и более продвинутый их аналог, который предоставляет вам пакет purrr. В этом видео уроке мы рассмотрим большую часть функционала purrr.

Тайм коды:
00:00 Вступление
00:57 Какие преимущества даёт пакет purrr
02:15 Какие семейства функций есть в purrr
03:29 Семейство функций map
04:26 Основные аргументы функций пакета purrr
05:20 Работа с функциями семейства map
08:23 Пример сравнения map() с циклом for
08:56 Функции mapdfr(), mapdfc()
13:01 Итерирование сразу по нескольким объектам, семейства функций map2 и pmap
15:01 Синтаксис формул в purrr
20:05 Функции семейства walk
22:31 Функции keep() и discard()
26:27 Итерация по функциям с помощью функций семейства invoke
29:12 Функции reduce() и accumulate()
34:23 Заключение

Ссылки:
- видео
- пример кода

#видео_уроки_по_R
👍5
​​Как добавить ещё одну панель кода в RStudio

Начиная с версии RStudio 2021.09.1 у нас появилась возможность полностью перенастроить интерфейс, добавив дополнительные столбцы с окнами, например для дополнительного окна Source. Пример того, как это выглядит можно посмотреть на изображении к посту.

Как добавить или удалить новый столбец с окнами

Tools > Global Options > Pane Layout > Add Columns / Remove Column

Посмотреть скрин можно тут.

Ссылки:
- узнал об этом обновлении из статьи "R Studio with great new feature – multiple code panes"

#заметки_по_R
​​Небольшой, но довольно полезный плейлист от Александра Королёва.

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


Содержание:

1. Начало работы с R на RStudio. Проект на языке R или пакет на языке R.
2. Создание проекта R package вместе с Unit tests и documentation.
3. Запуск и отладка R кода для проекта R Package

#видео_уроки_по_R
👍3
​​Вебинар введение в Язык R

Автор: Alexanyan Andron (SF Education)

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

Тезисы:
● Назначение языка R
● Почему стоит использовать язык R для анализа данных
● Преимущества языка R
● Знакомство с Rmarkdown
● Обзор базового функционала R
● Манипуляция данными с помощью dplyr
● Создание HTML таблиц с помощью пакета gt
● Построение графиков с помощью ggplot2

#вебинары_по_R
​​​​Есть ли зависимость между религиозными предпочтениями и количеством часов работы в месяц?

Пример анализа данных с использованием R.

Целью проекта является обобщение зарубежной и отечественной литературы влияния религиозных предпочтений на социально-экономические предпочтения людей, разработка методов исследования религиозной идентичности человека и взаимосвязи между ними и количеством рабочих часов человека в месяц.

Содержание:

● Вступление
● Обзор литературы и выдвижение гипотезы
● Описание данных
● Методы исследования
● Результаты

#статьи_по_R
👍4
​​Кеширование вызовов функций в R

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

Это может быть полезно например при обращении к справочникам по API, если данные в этих справочниках меняются не особо часто. Вряд ли вы каждые 3 минуты запускаете новые рекламные кампании.

В R кеширование функций в удобном виде позволяет реализовать пакет memoise, построенный на основе пакета cachem.


Простейший пример кеширования функции

Что бы кешировать любую функцию, используйте memoise().
 
library(memoise)

f <- function(x) {
Sys.sleep(1)
mean(x)
}

mf <- memoise(f)

Используем кешированную функцию:

 
# первый запуск проводит расчёты и запоминает результат
system.time(mf(1:10))
#> user system elapsed
#> 0.002 0.000 1.003
# далее мы читаем результат из кеша
system.time(mf(1:10))
#> user system elapsed
#> 0.000 0.000 0.001

Конфигурация кеширования

Вы можете управлять такими параметрами кеширования как:
● место физического хранения кеша
● длительность хранение кеша
● максимально допустимый размер кеша

По умолчанию кеш сохраняется в оперативной памяти функцией cachem::cache_mem(), и хранится только в течении текущей R сессии. Но вы можете использовать функцию cachem::cache_disk(), и хранить кеш на жестком диске.

Дополнительные аргументы функций cachem::cache_mem() и cachem::cache_disk() позволяют управлять размером кеша, директорией хранения кеша и некоторыми другими параметрами.
 
# Ограничиваем длительность хранения кеша 15 минутами
cm <- cachem::cache_mem(max_age = 15 * 60)
mf <- memoise(f, cache = cm)

# Хранить кеш внутри каталога "R-myapp" на уровне пользователя
# папка "C:/Users/Username/AppData/Local/R-myapp/R-myapp/Cache"
cd <- cachem::cache_disk(rappdirs::user_cache_dir("R-myapp"))
mf <- memoise(f, cache = cd)

Ссылки:
- Примеры кода взяты из README пакета memoise

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