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

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

Для связи: @AlexeySeleznev
Реклама: http://bit.ly/39MwJCY
Download Telegram
​​​​Алексадр Гинько (@alexan805) продолжает работу над переводом Mastering Shiny, на данный момент готово 55% перевода.

Ознакомиться с фрагментом перевода и записаться на предзаказ можно в facebook.

#книги_по_R
🔥1
​​Построение круговой диаграммы в ggplot2.

Не смотря на то, что круговая диаграмма один из самых неудачных способов визуализации данных, она является одним из наиболее популярных типов диаграмм.

Но если вы попробуете поискать geom_pie() среди прочих, доступных в ggplot2 геомов, то ваши поиски не увенчаются успехом. Стандартной отдельной функции под построение круговой диаграммы в ggplot2 нет.

Но, построить круговую диаграму в ggplot2 тем не менее можно. По умолчанию графики в ggplot2 строятся в декартовой системе координат. Если вы построите нормированную столбчатую диаграмму, и переведёте её из декартовой в полярную систему координат то получите круговую диаграмму.

Для перевода в полярную систему координат используйте функцию coord_polar.

Ниже пример построения круговой диаграммы.

 

library(ggplot2)

# генерируем тестовые данные
d <- data.frame(
Slices = c("Writing code", "Staring at plot", "Fixing code", "Enjoying plot") |> rep(2),
Time = c(1, 5, 4, 2, 1, 1, 1, 2),
When = c("Before reading this post", "After reading this post") |> rep(each = 4)
) |>
transform(
# Make time relative
Time_relative = Time / ave(Time, When, FUN = sum),
Slices = factor(Slices, levels = unique(Slices)),
When = factor(When, levels = unique(When))
)

# строим круговую диаграмму
ggplot(d, aes(x = 1, y = Time_relative, fill = Slices)) +
facet_grid(cols = vars(When)) +
# преобразуем систему координат в полярную
# для построения круговой диаграммы
coord_polar(theta = "y") +
# создаём столбчатую диаграмму с позицией stacked
geom_col(position = position_stack(reverse = TRUE),
color = "tan3", size = 3, show.legend = FALSE) +
# Добавляем описание секторов
geom_text(aes(label = Slices),
position = position_stack(vjust = 0.5, reverse = TRUE)) +
# очищаем тему
theme_void() +
labs(title = "Relative time spent building piecharts with ggplot2")


Ссылки
- Пример кода взял в этой статье

#заметки_по_R
🔥1
​​Иван Поздняков (@pozdniakovivan) рассказал про facet в ggplot2 о котором я ранее никогда не слышал.

———————————————————

Я только что нашел самую необычную фишку в {ggplot2} (точнее, в {ggforce}, который был разработан одним из ключевых создателей {ggplot2}, Томасом Педерсеном): facet_stereo().

Это фасетка, добавляющая на график глубину. О, нет, это не какое-то псевдо-3D и даже не анимация. Это самое настоящее третье измерение: ggforce::facet_stereo() создает стереограмму из двух картинок!

Стереограммы раньше изображали на задней обложке тетради: такие картинки, которые при определенной фокусировке глаз создавали ощущение рельефного изображения.

Я делаю так: смотрю на нос, чтобы изображение начало двоиться. Затем фокусирую глаза так, чтобы изображения соединились. В случае двух картинок четыре картинки (два сдвоенных изображения) должны превратиться в три (не в две!)

Синтаксис этого чудачества очень простой, нужно просто к геому добавить дополнительную эстетику depth =, это и будет отражено как «третье измерение». Результат можете увидеть на картинке.

https://ggforce.data-imaginist.com/reference/facet_stereo.html

Ссылка на оригинал сообщения Ивана в чате.

#заметки_по_R
​​tcsinvest - это неофициальная библиотека R для работы с API Тинькофф Инвестиции.

Библиотека использует в своей основе data.table как один из наиболее производительных способов работы с большими объемами данных в R. Взаимодействией с Rest API реализовано с использованием библиотеки httr, а стриминг данных через websocket.

Подробный русскоязычный мануал доступен на CRAN по ссылке.
​​Очередная статья Ильи Шутова (@iMissile) - "ETL в анализе данных без перерывов на кофе и курилку".

В статье Илья перечислил некоторые приёмы и примеры кода, которые помогут привести входящие данные к нужному для анализа формату.

В первую очередь, материал ориентирован на аналитиков, которые манипулируют разумными объемами данных, необходимых для решения практических задач. ETL из Бигдаты в котором перекачиваются сотни Тб ежесуточно живет своей отдельной жизнью.


Содержание:

- Разделение задач
- Предварительный препроцессинг входных файлов
- Бинарный Excel (.xslb)
- PDF
- XML
- JSON
- CSV
- ВременнАя метка. Немного трюков
- Числовые показатели. Немного трюков
- Утилиты командной строки
- Еще быстрее. GNU parallel
- Заключение

#статьи_по_R
👍1
​​bookdown v0.23: пару слов об основных изменениях.

bookdown - пакет, который позволяет создавать из R книги, виньетки, и так далее. Большинство найденных вами книг по R в интернете, верстались именно на bookdown.


Что нового:

● Новый, адаптированный под разные устройства HTML формат книг - Bootstrap 4. Разработан данный формат был Хедли Викхемом и Мэллом Сельманом. Посмотреть пример можно по ссылке, книга "Mastering Shiny".

● Новые шаблоны проектов. Ранее пользователям bookdown необходимо было сначала скачать шаблон проекта, теперь после установки пакета вам доступны функции create_gitbook() и create_bs4_book().

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

● Внедрён новый поисковый движок fuse.js, который обеспечивает лучший пользовательский интерфейс и более тонкие возможности поиска чем прежний lunr.


Ссылки:
- Информацию о релизе взята из статьи


#новости_и_релизы_R
​​На данный момент переведено уже три четверти книги "Mastering Shiny".

Подробности и очередной фрагмент перевода можно найти по ссылке у Александа Гинько (@alexan805) в facebook или в вконтакте.

Там же можете оставлять адреса для получения промокодов на предзаказ!

#книги_по_R
​​Анализ распределения интервалов между покупками на R

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

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

#статьи
​​Ранее никогда не встречал и не слышал про семейство функций cut_*() в ggplot2, случайно увидел в курсе R для Data Science.

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


Функции семейства cut_*():

- cut_interval() - создает n групп с равным диапазоном

- cut_number() - создает n групп с (приблизительно) равным количеством записей

- cut_width() - создает группы заданной ширины


Пример кода:
 
library(ggplot2)

# тестовые данные
df <- data.frame(
age = round(runif(50, 18, 55), 0),
val = round(runif(50, 1, 10), 0)
)

# создает n групп с равным диапазоном
ggplot(df, aes(x = cut_interval(age, 4), y = val)) +
geom_col()

# создает n групп с (приблизительно) равным количеством записей
ggplot(df, aes(x = cut_number(age, 4), y = val)) +
geom_col()

# создает группы заданной ширины
ggplot(df, aes(x = cut_width(age, 6), y = val)) +
geom_col()


#заметки_по_R
​​Наткнулся в одном из чатов на отличное объяснение того, как и для чего используется знак тильда ~ в R. Мне и самому этот вопрос неоднократно задавали, ниже привожу оригинал сообщения.

————————————

- Если знак ~ встречается в формуле, то он подразумевает знак равенства (модельного равенства) целевой переменной к предикторам ( lm(y ~ x + z) ) - означает моделирование линейной регрессии с целевой переменной y и двумя предикторами x и z

- Если знак ~ встречается в функциях tidyverse, то он означает короткое объявление функции, например, выражение purrr::map(1:10, ~.x^2) означает - примени к каждому элементу вектора функцию возведения в квадрат

- Конкретно в ggplot2::facet_grid() знак используется для описание способа разбиения фасет

- Еще знак ~ встречается в data.table::dcast, где он используется для описания способа разложения таблицы в широкий формат

- Существуют и другие способы использования этого знака

Резюме: знак ~ используется различными способами в зависимости от используемых функций, поэтому нужно читать документацию и смотреть как такой знак применяется.

Ссылки:
- Оригинал сообщения

#заметки_по_R
​​Интересную мысль описал автор статьи "Do write positive code".

Ранее я не задумывался о том, что надо стремится к тому, что бы не использовать в коде отрицания, если это возможно. Тем более не использовать двойные и тройные отрицания.

Дело в том, что наш мозг гораздо сложнее воспринимается отрицания, чем обычные условия.

Цитата из статьи:
Как только вы говорите мозгу "Не думай о слоне", первое о чём он начинает думать - это конечно слон!

Соответственно, читать код переполненный составными отрицаниями довольно сложно. Автор приводит в статье множество примеров кодов с, и без отрицаний. Ниже приведу основной пример из статьи:

 
# bad
if (!file.exists(some_file_name))
{
# do something
}
else
{
# do some other thing
}

#------------------------------------
# good
if (file.exists(some_file_name))
{
# do something
}
else
{
# do some other thing
}


#заметки_по_R
​​Актуализировал одну старенькую статью "Как визуализировать показатель качества ключевых слов — рецепт скрипта на языке R".

Полезна она будет интернет маркетологам работающим в Google Ads.

В статье приведён пример запроса данных о показателе качества ключевых слов, и всех его составляющих из Google Ads API с помощью пакета rgoogleads. И визуализации полученных результатов с помощью ggplot2.

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

#статьи_по_R
​​Собрал из всех своих пакетов коллекцию для интернет маркетинга galigor.

На самом деле galigor был создан пару лет назад, но на CRAN я его тогда не опубликовал.

На данный момент galigor состоит из 8ми пакетов:

- rgoogleads - пакет для работы с Google Ads API
- ryandexdirect - пакет для работы с API Яндекс.Директ
- rym - пакет для работы с Яндекс.Метрикой
- rfacebookstat - пакет для работы с Facebook MArketing API
- rmytarget - пакет для работы с API MyTarget
- rvkstat - пакет для работы с API Вконтакте
- rappsflyer -пакет для работы с AppsFlyer Pull API
- getProxy - пакет позволяющий обходить блокировку заблокированных в вашей стране сервисов.

Пакет timeperiodsR я в эту коллекцию не включил т.к. прямого отношения к интернет маркетингу он не имеет.

Установить коллекцию можно стандартной командой install.packages('galigor').

#новости_и_релизы_R
​​Первой моей публикацией на Хабре была "Обзор пакетов для интернет маркетинга, часть 1".

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

В связи с чем сегодня, спустя три года после первой публикации, я опубликовал продолжение "Обзор R пакетов для интернет маркетинга, часть 2".

#статьи_по_R
​​ Какой объем текста на странице увеличит видимость в Google и Яндекс?
Сколько фотографий товара должно быть на карточке?
Какие позиции занимают сайты конкурентов по вашей семантике?
Как влияют на ранжирование обновления алгоритмов поисковых систем?
Какие работы над сайтом показывают эффективность, а какие нет?

Представляем обновленную версию SEOWORKплатформу аналитики и контроля SEO, где вы можете получить ответы на эти вопросы буквально в 2 клика.

За последнее время мы полностью обновили основные модули платформы и внедрили новые инструменты. Теперь вы можете:
- отследить динамику по своему сайту в сравнении с сайтами конкурентов по вашему семантическому ядру, по группе страниц или запросов,
- оценить эффективность проводимых работ, провести a/b тесты, рассчитать сколько фото товара и какой объем SEO текста должен быть на странице за счет аналитики сегментов (групп страниц или запросов),
- построить BI отчеты по любым сегментам в разрезе видимости, спроса или трафика, нажав одну кнопку,
- всегда иметь под рукой наглядную картину в динамике по трафику и видимости проекта.

Работать с платформой стало значительно проще, такой функционал будет актуален не только для SEO-специалистов, но и для руководителя проекта, product менеджера и маркетолога.

И это лишь малая часть функционала платформы!

Зарегистрируйтесь на сайте и получите тестовый доступ
​​4 пайплайна в magrittr

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

Многие используют базовый пайплан %>%, но на самом деле в magrittr помимо базового есть ещё 3 дополнительных пайплайна.

Ниже приведу описание этих пайпланов.


● Базовый оператор %>%

Самый распространённый пайплан оператор, который известен всем пользователям tidyverse.

mtcars %>%
filter(mpg > 30) %>%
select(mpg:wt)



● Tee Pipe %T>%

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

iris %T>%
plot %>%
group_by(Species) %>%
summarize(
MaxSepalLength = max(Sepal.Length),
MinSepalLength = min(Sepal.Length)
)



● Exposition Pipe %$%

Данный оператор позволяет избежать дублирования имени объекта по примеру того, как это реализовано в tidyverse. Например, работая с базовым data.frame, для фильтрации данных внутри квадратных скобок вам необходимо дублировать имя data.frame.

iris[iris$Sepal.Length < 5.0, ]


Оператор %$% позволяет избегать этого дублирования:

iris %$% iris[Sepal.Length < 5.0, ]

Ещё один пример использования:

iris %$% plot(Sepal.Length, Sepal.Width)



● Оператор присваивания %<>%

Данный оператор переопределяет значение первого объекта цепочки.

x <- c(1,2,3,4)
x %<>% sum



Ссылки:
- Примеры кода заимствованы из этой статьи

#заметки_по_R
​​Завтра в 12:30 буду вести в Yagla вебинар "Как работать с API Google Analytics 4 на языке R".

По уровню рассчитан даже на тех кто вообще про язык R не слышал:

- Что такое язык R и в чём его преимущества;
- Установка языка R и среды установки RStudio на Windows;
- Настраиваем проект в Google Cloud Console, для работы с Google Analytics API;
- Установка дополнительных пакетов расширяющих возможности языка R;
- Пример работа с API Google Analytics 4 на языке R.

Ссылки:
- Регистрация

#вебинары
​​Как добавить ярлыки данных в ggplot2

Добавить на график подписи можно с помощью слоя geom_text(). Агрумент vjust позволяет вам менять положение подписи выше или ниже самого столбца.

В свою очередь geom_text() поддерживает следующие эстетики:

● label - текст подписей
● alpha - прозрачность
● angle - угол наклона
● colour - цвет текста
● family - шрифт
● fontface - тип шрифта, жирный, курсив и т.д.
● group - группировка
● hjust - горизонтальное смещение текста относительно визуализации
● lineheight - межстрочный интервал
● size - размер шрифта
● vjust - вертикальное смещение текста относительно визуализации

Пример кода для построения графика с подписями данных:
 
library(ggplot2)

# счётчик случайных чисел
set.seed(123)

# тестовый набор данных
data <- data.frame(x = sample(LETTERS[1:6], 300, replace = TRUE))

# Способ 1: используем переменную ..count..
ggplot(data, aes(x = factor(x), fill = factor(x))) +
geom_bar() +
geom_text(
aes(label = ..count..),
stat = "count",
vjust = 1.5,
colour = "white"
)

# Способ 2: Предварительная агрегация данных
data %>%
dplyr::count(x, name = 'Freq') %>%
ggplot(aes(x = x, y = Freq, fill = x)) +
geom_bar(stat = "identity") +
geom_text(
aes(label = Freq),
vjust = -1,
colour = "gray32",
fontface = 'bold'
)


Ссылки:
- на создание поста подтолкнула статья "Adding text labels to ggplot2 Bar Chart"

#заметки_по_R
​​5 крутых приемов, которые улучшат работу на R

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

Содержание:

- Запуск кода Python на R
- Чтение/импорт и преобразование файлов
- Нахождение структуры объектов
- Просмотр первой или последней части табличной структуры
- Чтение/экспорт данных в Google Sheets

#статьи_по_R
​​Отличная новость, Александр Гинько (@alexan805) завершил перевод "Mastering Shiny". В течении следующих нескольких недель будет происходить ее редактура, верстка и предпечатная подготовка. После этого всем, кто прислал автору перевода свою почту, будет отправлено письмо с промокодом на скидку 22-25% для предзаказа книги (доступны бумажная и электронная версии)!

Если вы еще не успели прислать электронный адрес для получения промокода на максимальную скидку от переводчика, сейчас самое время это сделать написав Александру в telegram или facebook. Спешите, время предзаказа – это время лучших скидок! Но промокод придет не сразу, а только после верстки и ценообразования книги.

По ссылке можно ознакомиться с фрагментом перевода. А именно с главой 19 "Модули Shiny".

Ссылки:
- telegram автора перевода, Александра Гинько
- facebook автора перевода
- фрагмент перевода, 19 глава
- фрагмент перевода "Динамическая фильтрация"

#книги_по_R