Подготовка данных для аналитики контекстной рекламы с помощью R

Привет!

Ранее я писал как сделать простую выгрузку данных из Яндекс.Директа с помощью ryandexdirect и нарисовать график изменения трафика. Теперь давайте выгрузим статистику по ключевым словам для последующего анализа.

Запустим RStudio и проверим установлены ли необходимые библиотеки ryandexdirect и tidyverse. Если нет, то устанавливаем. Следующий код проверяет, устанавливает и загружает библиотеки:

if(!'ryandexdirect' %in% rownames(installed.packages())){
  install.packages('ryandexdirect')
}
if(!'tidyverse' %in% rownames(installed.packages())){
  install.packages('tidyverse')
}

library("ryandexdirect")
library("tidyverse")

Теперь создаем таблицу report, в которую выгружаем данные из Директа:

report <- yadirGetReport(ReportType = "CUSTOM_REPORT",
                          DateFrom = Sys.Date() - 30,
                          DateTo = Sys.Date(),
                          FieldNames = c(
                                         "Criteria",
                                         "CampaignName",
                                         "Impressions",
                                         "Clicks",
                                         "Cost",
                                         "Conversions",
                                         "AvgImpressionPosition"),
                          Goals = c(ID_ЦЕЛИ_В_МЕТРИКЕ),
                          IncludeVAT = "YES",
                          Login = "ВАШ_ЛОГИН_В_ДИРЕКТЕ",
                          FilterList = ("Impressions GREATER_THAN 0"))

В FieldNames мы добавили конверсии (Conversions), поэтому в параметре Goals надо указать какие именно конверсии нас интересуют.

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

Это происходит из-за того, что в этих столбцах данные со строковым типом. Давайте проверим тип данных в наших столбцах:

lapply(report, class)

Все верно, два последних столбца — это не числа, а текст.

С текстом работать не получится. Будем делать преобразование типа данных:

report$AvgImpressionPosition <- as.numeric(report$AvgImpressionPosition)
report$Conversions_ID_ЦЕЛИ_В_МЕТРИКЕ_LSC <- as.numeric(report$Conversions_ID_ЦЕЛИ_В_МЕТРИКЕ_LSC)

в обоих случаях мы скорее всего получим предупреждения:
NAs introduced by coercion

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

При преобразовании в числовой формат мы получаем такое предупреждение. Давайте заменим эти Na на 0:

report[is.na(report)] <- 0

Было

Стало

Получили таблицу с нормальными данными. Ее можно быстро отсортировать, кликнув на название столбца.
Но таблице явно чего-то не хватает. Давайте добавим столбцы со средней стоимостью клика, CTR, конверсией и стоимостью конверсии.

Создадим новую таблицу report_2 и добавим туда новые столбцы:

report_2 <- report %>% 
  mutate(CTR = round((Clicks/Impressions)*100,2),
         CPC = round(Cost/Clicks,2),
         CR = round((Conversions_ID_ЦЕЛИ_В_МЕТРИКЕ_LSC/Clicks)*100,2),
         CPA = round(Cost/Conversions_ID_ЦЕЛИ_В_МЕТРИКЕ_LSC,0))

Наши показатели добавлены в новую таблицу.

Кажется, снова нужно их поправить. Теперь еще и Inf добавился — из-за деления на ноль.
Следующий код поможет нам зачистить эти значения:

is.na(report_2)<-sapply(report_2, is.infinite)
report_2[is.na(report_2)]<-0

Вместо ошибок — нули. Может, и не очень правильно, но гораздо красивее. Можно пользоваться этой таблицей для аналитики и принятия решений по корректировке ставок.