Яндекс.Директ собирает много данных, но, к сожалению, в веб-интерфейсе доступно очень мало информации для анализа. В этой статье я подробно опишу, как получить статистику о рекламных кампаниях c помощью языка R для визуализации в Power BI.
1. Установите язык R и необходимые пакеты функций
1.1. Скачайте и установите актуальную версию R, а также интегрированную среду разработки R Studio, в которой вам будет удобнее работать.
1.2. В R Studio откройте все доступные панели с помощью сочетания клавиш Ctrl+Alt+Shift+0. В область Source вставьте код.
if(!"devtools" %in% installed.packages()[,1]){install.packages("devtools")}
library(devtools)
install_github('selesnow/ryandexdirect')
Чтобы запустить процесс установки пакетов, выделите код с помощью мыши и запустите его нажатием Ctrl+Enter.
2. Получите токен доступа к API Яндекс.Директ
2.1. Для получения токена доступа к API Директа воспользуйтесь кодом:
library(ryandexdirect)
ya_token <- ya_token <- yadirGetToken()
Для запуска также необходимо вставить код в область «Source» в R Studio, выделить с помощью мыши и запустить сочетанием клавиш Ctrl+Enter.
2.2. В открывшемся окне браузера предоставьте пакету «ryandexdirect» доступ к данным — нажмите кнопку «Разрешить». После этого откроется страница со сгенерированным токеном доступа к API.
Токен доступа еще понадобится, поэтому скопируйте его в любой текстовый документ и смело можете закрывать R Studio.
3. Загрузите данные в Microsoft Power BI
Чтобы обрабатывать данные из Яндекс.Директ в Power BI, необходимо настроить импорт. Рассмотрим два способа настройки: с помощью сценария на языке R и готового документа Power BI .
3.1. С помощью сценария на языке R
3.1.1. Откройте Power BI, нажмите «Получить данные» и выберите коннектор R-скрипт.
В диалоговое окно «Выполнить сценарий R» вставьте следующий код:
#Подключаем пакет
library(ryandexdirect)
#Получаем список кампаний
campList <- yadirGetCampaignList(logins = "<ВАШ ЛОГИН НА ЯНДЕКСЕ>", token = "<ВАШ ТОКЕН В ВИДЕ СТОКИ>")
#Получаем статистику по кампаниям
Stat <- yadirGetSummaryStat(campaignIDS = campList$Id,
dateStart = Sys.Date() - 90,
dateEnd = Sys.Date(),
token = "<ВАШ ТОКЕН В ВИДЕ СТОКИ>")
В код подставьте ваш логин Яндекс.Директ и токен доступа к API, полученный на втором шаге. Значения необходимо в кавычках.
3.1.2. Нажмите «ОК», и начнется процесс загрузки данных.
В результате получите в Power BI две таблицы:
- campList — со списком рекламных кампаний;
- Stat — со статистикой по кампаниям.
Все денежные данные будут возвращены в условных единицах Яндекса. Текущий курс всегда можете найти в справке.
3.1.3. Связь между таблицами можете настроить непосредственно в Power BI по полям Id из таблицы campList и CampaignID из таблицы Stat.
3.2. С помощью файла Power BI с коннектором к Яндекс.Директ
Второй способ более простой, потому что я уже создал документ Power BI и настроил отправку запроса к Яндекс.Директ через пользовательские параметры.
3.2.1. Скачайте файл с коннектором. В интерфейсе Power BI откройте выпадающее меню «Изменить запросы» и выберите команду «Изменить параметры».
3.2.2. Введите свой логин в Яндексе и API-токен, полученный на втором шаге. Нажмите «ОК».
Выводы
На основе данных, импортированных из Яндекс.Директ в Microsoft Power BI, вы сможете создавать понятные отчеты и обновлять их в режиме реального времени. Подытожим основные шаги:
- Установите актуальную версию языка R и R Studio. Инсталлируйте пакет «devtools» и «ryandexdirect».
- Получите токен доступа к API Яндекс.Директ и сохраните его.
- Загрузите данные в Power BI:
- с помощью сценария на языке R;
- с помощью документа Power BI с коннектором к Яндекс.Директ.
На этом все. Если у вас что-либо не получится — пишите комментарии, постараюсь помочь.
Комментарии (36 )
Алексей, здравствуйте.
Подскажите, как удалять все строчки с нулевыми значениями?
Выгружаю из метрики показатели по целям, пробовал воспользоваться фильтром (filters), все равно куча строк с нулевыми значениями.
Спасибо.
Пример скрипта:
#Подключаем пакет====
library("data.table")
library(ryandexdirect)
library(csv)
#Формируем результирующий data frame
Metrika_Goal <- data.table()
#Собираем данные
Stat1 <- yadirGetMetrikaGAData(start_date = "2018-06-01"
end_date = "2018-06-30",
counter_ids = Мой id,
dimensions = ga:date, ga:source, ga:medium, ga:sourceMedium, ga:deviceCategory, ga:campaign",
metrics = "ga:goal555555Completions",
filters = "ga:goal555555Completions"!=0,
token = "Мой токен")
#Записываем данные в data frame
Stat1 <- data.table(Stat1)
Stat2 <- cbind(Stat1, Мой id)
Metrika_Goal <- rbind(Metrika_Goal, Stat2)
# Удаляем временные таблицы
rm(Stat2, Stat1)
#Записываем данные в таблицу
write.csv(Metrika_Goal, file = "Metrika_Goal.csv")
Алексей, доброго времени суток!
Только начинаю знакомиться с R, и что-то сразу неудачно))
При попытке получить пакет ryandexdirect ловлю ошибку, не знаю что с ней сделать:
> install_github('selesnow/ryandexdirect')
Installation failed: Timeout was reached: Resolving timed out after 10000 milliseconds
Можете подсказать что это такое, и как это лечится, пожалуйста)
Выдает ошибку UNABLE TO CONNECT
Details: "ADO.NET: R script error.
---------------------
Welcome to ryandexdirect version 2.5.1
Author: Alexey Seleznev (Head of analytics dept at Netpeak).
Email: selesnow@gmail.com
Blog: https://alexeyseleznev.wordpress.com
Facebook: https://facebook.com/selesnown
Linkedin: https://www.linkedin.com/in/selesnow
Type ?ryandexdirect for the main documentation.
The github page is: https://github.com/selesnow/ryandexdirect/
Suggestions and bug-reports can be submitted at: https://github.com/selesnow/ryandexdirect/issues
Or contact: <selesnow@gmail.com>
To suppress this message use: suppressPackageStartupMessages(library(ryandexdirect))
---------------------
Ошибка в yadirGetCampaignList(logins = "login", token = "AQAAAAAjvfw********") :
неиспользованные аргументы (logins = "login", token = "AQAAAAAjvfw********") ")
Выполнение остановлено
"
КОД ВЫГЛЯДИТ ТАК:
#Подключаем пакет
library(ryandexdirect)
#Получаем список кампаний
campList <- yadirGetCampaignList(logins = "login", token = "AQAAAAAjvfw********")
#Получаем статистику по кампаниям
Stat <- yadirGetSummaryStat(campaignIDS = campList$Id,
dateStart = Sys.Date() - 90,
dateEnd = Sys.Date(),
token = "AQAAAAAjvfw********")
Алексей, пожалуйста, подскаите, что делать?!
Друзья, привет. Кто работал с коннектором для сбора данных с Яндекс Директа в POWER BI - помогите мне решить задачу: я хочу настроить автоматическое обновление отчетов, но почему-то когда я в сервисе POWER BI пытаюсь менять настройки credentials, такая ошибка выскакивает: http://joxi.ru/52akyV5U4jBaKr
Что можно сделать, чтобы добитая автоматического обновления?
Алексей, добрый день!
При установке выдаёт ошибку:
Downloading GitHub repo selesnow/ryandexdirect@master
from URL https://api.github.com/repos/selesnow/ryandexdirect/zipball/master
Installing ryandexdirect
'/Library/Frameworks/R.framework/Resources/bin/R' --no-site-file \
--no-environ --no-save --no-restore --quiet CMD INSTALL \
'/private/var/folders/3c/pkhbbfjx5_50rcpj0fhbg_hh0000gp/T/RtmpBKA242/devtools18b17afd264/selesnow-ryandexdirect-44a6d54' \
--library='/Users/nadezhdapirogova/Library/R/3.4/library' \
--install-tests
* installing *source* package ‘ryandexdirect’ ...
** R
Error in parse(outFile) :
неправильный многобайтный символ при обработке на строке 163
ERROR: unable to collate and parse R files for package ‘ryandexdirect’
* removing ‘/Users/nadezhdapirogova/Library/R/3.4/library/ryandexdirect’
Installation failed: Command failed (1)
Как поправить? Спасибо.
Добрый день, это можно настроить через шлюз (gateway).
Что вам для этого понадобится:
1. Power BI Pro версия.
2. Сервер, ноутбук или ПК который всегда будет включён.
3. Скачать и установить шлюз (https://powerbi.microsoft.com/ru-ru/gateway/)
Что надо сделать:
1. Разработать десктопный pbix файл.
2. Опубликовать разработанный на первом шаге файл в Power BI Service.
3. Настроить расписание обновление в Power BI Service, весь процесс настройки подробно описан тут. (https://docs.microsoft.com/ru-ru/power-bi/personal-gateway).
4. ПК на котором установлен шлюз всега должен быть включён.
Но в любом случае я рекомендую с API Яндекс Директа, и с любым другим апи работать по другой схеме.
1. Ежедневно забираем из API данные за вчера.
2. Собранные данные записываем в нашу базу данных.
3. Power BI подключаем не напрямую к API, а к нашей базе данных.
Алексей, здравствуйте.
Подскажите, есть ли возможность выгружать из "Директа" ключевые слова с их СPC (интересно отслеживать стоимость каждого касания) за любой период?
Использовал функцию yadirGetKeyWords, ну она ограничена периодом в 28 дней.
Спасибо.
Добрый день, если вам просто нужен список ключевых слов с CPC можете воспольховаться функцией yadirGetReport:
Пример кода:
stat <- yadirGetReport(ReportType = "CAMPAIGN_PERFORMANCE_REPORT",
DateRangeType = "CUSTOM_DATE",
DateFrom = sopm,
DateTo = eopm,
FieldNames = c("Criterion",
"CriteriaType",
"AvgCpc"),
FilterList = NULL,
IncludeVAT = "YES",
IncludeDiscount = "NO",
Login = adwordsIDref$Yandex_login[i],
Token = adwordsIDref$YandexToken[i])
Спасибо за труды!
Прошу прощения за вопрос новичка.
Каким образом вывести стандартные метрики: количество кликов в год, месяц, день и так далее.
Пока получилось только вывести название кампании сколько было кликов за всё время. При применении фильтра date ничего не происходит, всё равно выводит за весь период. Зависимости нет.
При попытке соединить в связях из campList "Clicks" с Stat "Date" пишет о невозможности связи.
В интернете искать бесполезно. Где получить больше информации о постройке графиков именно для связки Яндекс.Директ и Power Bi?
Спасибо.
Здравствуйте, вряд ли у вас получится где то найти такую информацию сейчас, пакет для R о котором идёт речь в статье писал я, используйте более новую функцию yadirGetReport.
Вот пример кода как получить данные по датам, за определённый период.
library(ryandexdirect)
myToken <- yadirGetToken()
clientList <- yadirGetClientList(myToken)
stat <- yadirGetReport(ReportType = "ACCOUNT_PERFORMANCE_REPORT",
DateRangeType = "CUSTOM_DATE",
DateFrom = "2017-01-01",
DateTo = Sys.Date(),
FieldNames = c("Date","Impressions","Clicks","Cost"),
Login = clientList$Login,
Token = myToken)
Алексей, здравствуйте.
Еще раз спасибо за статью, все подробно и понятно.
Сейчас столкнулся с проблемой.
В кабинете яндекс.директ есть несколько аккаунтов, пытаюсь выгрузить данные по всем аккаунтам в одном скрипте:
Выгрузка занимает большой промежуток времени, плюс в значениях выгружается много не нужных полей.
Подскажите, есть ли способ выгрузить данные по всем логинам из кабинета используя параметр: yadirGetReport или как то уменьшить кол-во значений в параметре yadirGetSummaryStat ?
В итоге что хотим получить следующие данные:
Дата - Логин - Клики - Показы - Затраты
Заранее, спасибо!
Как и обещал немного доработал пакет ryandexdirect.
Для начала обновить пакет до версии 2.4.1. с помощью кода
devtools::install_github('selesnow/ryandexdirect')
После чего функция yadirGetReport станет векторизирована, т.е. аргумент Login на вход будет принимать вектор логинов, и функция будет по очереди загружать данные по каждому, на выходе вы получите большую таблицу с данными по всем аккаунтам по которым получилось вытянуть данные.
Для того что бы воспользоваться векторизированным вариантом функции воспользуйтесь кодом представленным ниже.library(ryandexdirect)
myToken <- yadirGetToken()
clientList <- yadirGetClientList(myToken)
stat <- yadirGetReport(ReportType = "ACCOUNT_PERFORMANCE_REPORT",
DateRangeType = "CUSTOM_DATE",
DateFrom = "2017-01-01",
DateTo = Sys.Date(),
FieldNames = c("Date","Impressions","Clicks","Cost"),
Login = clientList$Login,
Token = myToken)
Добрый день, сама по себе функция yadirGetSummaryStat становится уже устаревшей, я рекомендую использовать именно yadirGetReport.
Для того, что бы с помощью yadirGetReport получить данные из множества аккаунтов надо воспользоваться циклом, пример кода ниже:
library(ryandexdirect)
myToken <- yadirGetToken()
clientList <- yadirGetClientList(myToken)
#Формируем результирующий дата фреймresult <- data.frame()
#Проходим циклом по всем логинам
for(log in clientList$Login){
stat <- yadirGetReport(ReportType = "ACCOUNT_PERFORMANCE_REPORT",
DateRangeType = "CUSTOM_DATE",
DateFrom = "2017-01-01",
DateTo = Sys.Date(),
FieldNames = c("Date","Impressions","Clicks","Cost"),
#FilterList = c("Clicks GREATER_THAN 49","Impressions LESS_THAN 1001"),
#IncludeVAT = "YES",
#IncludeDiscount = "NO",
Login = log,
Token = myToken)
#Добавляем поле логин
stat$login <- log
#Присоединяем данные к результирующей таблице
result <- rbind(result, stat)
}
В ближайшее время я перепишу функцию yadirGetReport таким образом что бы она была векторизирована и на вход принимала вектор из логинов.
Алексей помогите! Пытаюсь установить ryandexdirect на R server (виртуальная машина Linux Ubuntu в сервисе Microsft Azure). Выскакивает ошибка при установке:
https://s.mail.ru/89dv/c7GjNnL2u
Как решить проблему? Спасибо!
Добрый день, ругается на киррилицу, т.к. в функциях есть сообщения об ошибках и ходе выполнения операций на русском языке, поэтому он и ругается.
Вы можете сделать следующее, в папке R, на репозитоиии ryandexdirect в открытом доступе есть код каждой из функций пакета, поэтому вы можете просто скопировать код нужной функции, запустить его в RStudio и в вашем рабочем окружении появится нужная вам функция, только для их работы ещё предварительно надо установить пакет httr.
В планах у меня есть написать дополнительную версия пакета без киррилицы для Linux, но сейчас на этой нет времени.
Алексей, добрый день.
Также заинтересовал ответ на вопрос предыдущего комментатора: "Подскажите, как можно дописать скрипт, что-бы он ежедневно подгружал данные за предыдущие день и добавлял их в массив данных. Сейчас скрипт обновляет весь массив это занимает значительное время."
Спасибо за ответ и вашу работу!
Здравствуйте.
Подскажите, как можно дописать скрипт, что-бы он ежедневно подгружал данные за предыдущие день и добавлял их в массив данных. Сейчас скрипт обновляет весь массив это занимает значительное время.
В данный момент скрипт выглядит следующим образом:
#Подключаем пакет
library(ryandexdirect)
#Получаем список кампаний
campList <- yadirGetCampaignList(logins = "Значение", token = "Значение")
#Параметры
Stat1 <- yadirGetReport(ReportType = "CAMPAIGN_PERFORMANCE_REPORT",
DateRangeType = "CUSTOM_DATE",
DateFrom = "1.01.2017",
DateTo = Sys.Date(),
FieldNames = c("Date", "CampaignId", "Device", "LocationOfPresenceId", "AdNetworkType",
"AvgCpc"),
FilterList = NULL, IncludeVAT = "NO", IncludeDiscount = "NO",
Login = "значение", Token = "Значение")
К сожалению просто догрузить 1 день к уж загруженному массиву данных в Power BI нельзя, в данном случае для ускорения процесса загрузки данных вы можете сделать следующее:
1. Написать R скрипт который будет ежедневно запускаться по рассписанию, как это сделать подробно описано тут.
2. Этот скрипт будет обращаться к API Директа, забирать данные за вчерашний день и записывать их в какую нибудь базу данных, для записи в MySQL например можно использовать пакет RMySQL, для PostgreSQL - RPostgreSQL, для BigQuery - bigrquery.
3. Power BI подключить именно к базе данных а не тянуть инфу напрямую из API за весь период.
К сожалению просто догрузить 1 день к уж загруженному массиву данных в Power BI нельзя, в данном случае для ускорения процесса загрузки данных вы можете сделать следующее:
1. Написать R скрипт который будет ежедневно запускаться по рассписанию, как это сделать подробно описано тут.
2. Этот скрипт будет обращаться к API Директа, забирать данные за вчерашний день и записывать их в какую нибудь базу данных, для записи в MySQL например можно использовать пакет RMySQL, для PostgreSQL - RPostgreSQL, для BigQuery - bigrquery.
3. Power BI подключить именно к базе данных а не тянуть инфу напрямую из API за весь период.
Добрый день на момент написания статьи её не был зарелизин Report API Service, он предоставляет более гибкую и широкую работу с API директа, после официального релиза этого сервиса я добавил в пакет функцию yadirGetReport - https://github.com/selesnow/ryandexdirect/blob/master/README.md#yadirgetreportreporttype--campaign_performance_report-daterangetype--last_month-datefrom--null-dateto--null-fieldnames--ccampaignnameimpressionsclickscost-filterlist--null-includevat--no-includediscount--no-login--null-token--null
Я не очень понял о каких именно метках вы говорите, ну думаю можно использовать любые метки в названиях рекламных кампаний / групп объявлений.
Список доступных для выгрузки полей находится тут .
О метках в объявлениях. Не utm метки. Вот эти . Смотреть скрин Метки
Алексей, а по какому признаку связать метрику и лиды из системы коллтрекинга? Есть опыт в такой связке?
У меня есть каллибри и есть метрика. Как их связать, если значений уникальных нет не пойму.. Может где почитать про это есть..?
кстати, в tableau есть web data connector
попробую его прикрутить
Ладно, сменой пользователя на английские буквы всё решилось!
Подключаю уже R в BI - очень долго загружает данные.
Ещё раз пример кода, прошлый комментарий
эх)) моя бы воля.. нажал бы delete для всей винды по всему миру и закончились бы мучения у людей)
Warning in install.packages("bitops") :
'lib = "C:/Program Files/R/R-3.4.1/library"' is not writable
Error in install.packages("bitops") :
unable to create ‘C:\Users\<U+0410><U+0434><U+043C><U+0438><U+043D>\Documents/R/win-library/3.4’
In addition: Warning message:
In dir.create(userdir, recursive = TRUE) :
cannot create dir 'C:\Users\<U+0410><U+0434><U+043C><U+0438><U+043D>', reason 'Invalid argument'
>
ну вот что ему надо, а?)) ну что не создать ему и почему это моя блин проблема?))
не прошу разбираться в моём случае, так, для статистики и для SEO по этой проблеме.
Сейчас меняю юзера и права редактирую. Всё позабывал уже в винде. Сложно.
could not find function "install_github"
ох, потратил 2 часа на борьбу с виндой.. Как же на макос всё летает, а на винде любой тупит.
Не завелось.
Алексей, а как тоже самое сделать на MACoS с Tableau? Не нашел я в табло коннектора с R
Добрый день.
1. could not find function "install_github", сначала надо установить пакет devtools, т.е. install.packages("devtools") , т.к. функция install_github принадлежит именно этому пакету.
2. А как тоже самое сделать на MACoS с Tableau? Не нашел я в табло коннектора с R, совершенно верно в Tableau сделать так нельзя, разве что с помощью R скриптов по которые будут запускаться по расписанию собирать в какую нибудь базу данных всю инфу, и Tableau подключить уже именно к базе данных. Всё что умеет Tableau с R делать, это читать данные из RData файлов.
Чтобы оставить комментарий, необходимо авторизироваться