Подготовка данных для аналитики контекстной рекламы с помощью 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
Вместо ошибок — нули. Может, и не очень правильно, но гораздо красивее. Можно пользоваться этой таблицей для аналитики и принятия решений по корректировке ставок.
