Хотите качественно анализировать статистику из Яндекс.Метрики? Отследить сложные воронки продаж, объединить данные из разных систем аналитики, контролировать расхождения в статистике, — «сырые» данные помогут вам эффективно решить все эти сложные задачи.
В 2016 году Яндекс заявили о публичном релизе программного интерфейса Logs API, который позволяет получить сырые данные из Яндекс.Метрики в файле формата TSV.
Однако в работе с API Яндекс.Метрики у вас могут возникнуть сложности:
- процедуру выгрузки придется повторять каждый раз, когда вы захотите получить новую статистику;
- для визуализации данных нужно вручную загружать TSV-файл в оболочку, предназначенную для построения графиков и таблиц.
В этой статье я расскажу, как автоматизировать выгрузку сырых данных из Яндекс.Метрики и работать с полученной статистикой.
Как выгрузить сырые данные с помощью языка R?
Для выгрузки данных из Яндекс.Метрики я создал программный пакет ryandexdirect, в который добавил функцию yadirGetLogsData — она упрощает работу с Logs API.
Опишу работу с пакетом поэтапно:
1. Скачайте, установите и запустите версию R, соответствующую операционной системе вашего компьютера.
2. Скопируйте код пакета ryandexdirect в консоль R:
if(!"bitops" %in% installed.packages()[,1]){install.packages("bitops")}
if(!"devtools" %in% installed.packages()[,1]){install.packages("devtools")}
library(devtools)
install_github('selesnow/ryandexdirect')
library(ryandexdirect)
Появится сообщение, которое подтвердит успешную установку пакета.
3. Далее необходимо получить токен доступа к API. Для этого в консоль R скопируйте следующий код:
my_token <- yadirGetToken()
В открывшемся окне браузера разрешите приложению «ryandexdirect» доступ к своему аккаунту.
4. Появится окно с кодом доступа к API: скопируйте его и вставьте в R-консоль после строки «Enter your token». Рекомендую также сохранить этот код в блокноте, потому что он еще понадобится вам для выгрузки данных в Power BI.
5. В работе с функцией yadirGetLogsData используются такие аргументы:
- counter — номер счётчика Яндекс.Метрики;
- date_from — начальная дата отчёта;
- date_to — конечная дата отчёта;
- fields — список полей, которые вы хотите получить;
- source — источник записей (возможные значения для этого аргумента: «hits» — просмотры или «visits» — визиты);
- token — API токен (ключ доступа к Logs API).
Подставьте ваши значения аргументов и запустите код ниже в консоли R:
rawmetrikdata <- yadirGetLogsData(counter = "00000",
date_from = "2016-12-01",
date_to = "2016-12-20",
fields = "ym:s:visitID,ym:s:date,ym:s:bounce,ym:s:clientID,ym:s:lastTrafficSource,ym:s:lastAdvEngine,ym:s:regionCity",
source = "visits",
token = my_token)
6. Появится сообщение об успешной загрузке данных:
Processing .......... processing time 53.22 sec
Loading .. done! loading time 0.33 sec
Information:
Request id: 6079
Request status: cleaned_by_user
Total time: 54.11 sec
Data size: 0.13 Mb
Return rows: 1649
Data load successful!
В сообщении можно увидеть:
- время обработки запроса на сервере Яндекса (53 секунды);
- время загрузки данных с сервера (0,33 секунды);
- общее время процедуры (54 секунды);
- размер обработанных данных (0.13 мегабайт);
- количество вернувшихся строк (1649).
Как выгрузить данные из R в таблицу или базу данных?
1. В CSV-таблицу
Если вы предпочитаете работать со статистикой в редакторе таблиц, например Excel, выгрузите полученные данные в CSV-файл. Для этого вставьте и запустите код в R-консоли:
write.table(rawmetrikdata, "rawdata.csv", sep = ";", dec = ",", row.names = FALSE)
В рабочей директории появится файл «rawdata.csv» с нужными данными. Чтобы узнать расположение рабочей директории, запустите в консоли R этот код:
getwd()
2. В базу данных MySQL
Рассмотрим, как импортировать статистику в базу данных на примере популярной СУБД MySQL.
В представленном коде подставьте значения вашей базы данных в значения параметров «dbname», «user» «password»,«host» (указаны после знака «=»).
if(!"RMySQL" %in% installed.packages()[,1]){install.packages("RMySQL")} library(RMySQL)
conMySQL <- dbConnect(MySQL(), dbname = "MySchema", user = "root", password = "password", host = "localhost")
dbWriteTable(conMySQL, "raw_data", rawmetrikdata, row.names = FALSE, append = TRUE)
dbDisconnect(conMySQL)
Запустите код со своими значениями в консоли R.
Как импортировать сырые данные в Microsoft Power BI?
Если ваших навыков работы в среде R недостаточно, чтобы визуализировать полученные данные, используйте
Рассмотрим два способа импорта данных:
- с помощью сценария на языке R;
- с помощью специального файла Power BI с коннектором к Яндекс.Метрике.
1. С помощью сценария на языке R
1.1. В Power BI на вкладке «Главная» выберите группу меню «Получить данные» — «Другое» — «R-скрипт». Нажмите кнопку «Подключить».
1.2. Укажите ваши значения в аргументах функции:
library(ryandexdirect)
rawmetrikdata <- yadirGetLogsData(counter = "00000",
date_from = "2016-12-01",
date_to = "2016-12-20",
fields = "ym:s:visitID,ym:s:date,ym:s:bounce,ym:s:clientID,ym:s:lastTrafficSource,ym:s:lastAdvEngine,ym:s:regionCity",
source = "visits",
token = my_token)
Вместо «my_token» нужно вставить значение вашего токена API.
В открывшемся окне вставьте код в поле «Выполните сценарий R».
1.3. В окне «Навигатор» поставьте галочку напротив таблицы «rawmetrikdata» и нажмите кнопку «Загрузить»:
1.4. Данные, загруженные в вашу модель, будут выглядеть следующим образом:
2. С помощью файла Power BI с коннектором к Яндекс.Метрике
Этот метод еще проще — вам не нужно изменять код, достаточно ввести пользовательские параметры в коннектор.
2.1. Скачайте файл Power BI.
2.2. На вкладке «Главная» выберите группу меню «Внешние данные», откройте выпадающий список «Изменить запросы» и кликните на поле «Изменить параметры».
2.3. Введите свои параметры и нажмите кнопку «ОК».
2.4. Появится сообщение, что в запросах есть ожидающие изменения — нажмите «Применить изменения».
2.5. В диалоговом окне «Собственный запрос к базе данных» кликните «Выполнить».
В Power BI загрузятся данные из указанного вами аккаунта Яндекс.Метрики.
Выводы
Сырые данные из Яндекс.Метрики — отличный источник информации для аналитических исследований, однако без навыков программирования работать с API сложно. Используя описанный в статье метод, вы сможете легко выгрузить статистику и обработать данные.
Алгоритм действий:
- Установите версию R, соответствующую операционной системе на вашем компьютере, и загрузите данные с помощью пакета ryandexdirect.
- С помощью R-консоли выгрузите сырые данные в удобную для вас среду:
- файл формата CSV;
- базу данных MySQL.
- Настройте импорт статистики в Microsoft Power BI для дальнейшей визуализации данных.
В следующей статье я расскажу, как связать Яндекс.Директ с Power BI.
Комментарии (33 )
Добрый день, после пункта 3 и кода: my_token <- yadirGetToken() не открывается окно браузера? Как дать доступ приложению в этом случае?
Добрый день, материалы этой статьи уже немного устарели, вот вам более свежая информация:
1. Как работать с API Яндекс.Метрики с помощью языка R
2. Как использовать Rscript в качестве источника данных в Microsoft Power BI на примере Яндекс.Метрики
Спасибо за библиотеку
Спасибо, очень полезно.
Обнаружил одну проблему
write.table(rawmetrikdata, "rawdata.csv", sep = ";", dec = ",", row.names = FALSE)
в CSV вижу что некоторые "ym.s.visitID" и "ym.s.clientID" записалось как экспоненциальная форма
1,8207480467651e+19
чтобы избавиться от этого сделал format
write.table(format(rawmetrikdata, scientific=FALSE), "d:/rawmetrikdata.csv", sep = ";", dec = ",", row.names = FALSE)
Добрый день.
Спасибо за пакет:)
Можете подсказать: требуется выгрузить поисковые запросы, но как не пытался так и не вышло.
Код такой:
fields = "ym:s:visitID,ym:s:date,ym:s:lastSearchPhrase,ym:s:lastTrafficSource",
source = "visits",
пишет ошибка:
invalid_parameter - Unknown field ym:s:lastSearchPhrase
Других запросов не нашел кроме как целого отчета preset=sources_search_phrases только как его запросить ?
Спасибо.
А можно выгрузить данные по кампаниям,ключам, времени суток и расходы?
К сожалению время суток получить нельзя, и даже час нельзя получить, а так информацию по кампаниям и ключевым словам можно получить из типа отчёта CRITERIA_PERFORMANCE_REPORT.
Алексей, подскажите, как избавиться от дублирования данных при запись в бд? Т.е. при приведенном ниже коде, если мы выгружаем данные за последний месяц к примеру, и делаем это каждый день, то будет 30 записей с данными за определенный день. (Пример: Выгрузили просмотры за 15 сентября:
15.09.17 300 просмотров
После повторного выполнения RMYSQL запроса, итог в БД будет уже таким:
15.09.17 300 просмотров
15.09.17 300 просмотров
Это происходит из за того, что append = TRUE. А power bi покажет что 15.09.17 у нас уже 600 просмотров. Подскажите, как можно проверять, есть ли данные уже в БД, и если нет, то дописывать недостающие. Использовать owerwrite = TRUE не подходит, т.к. тогда перезапишется вся БД, а нужно именно накапливать данные в БД. Спасибо!
Добрый день, перед тем как повторно записать данные удаляйте старые данные за тот период за который они будут записаны повторно с помощью SQL конструкции DELETE, вы можете получить дату начала и дату конца отчётного периода, и с помощью функции (в R) dbSendQuery перед записью удалить из БД данные за тот период за который они будет записаны повторно.
О том как удалять строки с помощью SQL можно почитать тут - http://www.mysql.ru/docs/man/DELETE.html.
При попытке использования коннектора возникает ошибка
"Unexpected error: Object reference not set to an instance of an object."
А как вы поступаете в случаях, когда на 1 счетчике находятся сразу 3 сайта (2 поддомена). Каким образом через api фильтровать данные по поддоменам? Из api нашел только 1 похожий атрибут (страница входа). Если я правильно понимаю, то нужно указать только имя домена без протокола - ym:s:startURL="msk.site.ru"?
Честно говоря метрика для нас больше допольнительный инструмент поэтому пока с такой задачей не сталкивался, из GoogleAnslytics такую информацию можно вытянуть по полю hostname но в метрике не нашел такого поля, возможно вам стоит задать этот вопрос в поддержку API Яндекс Метрики - https://tech.yandex.ru/metrika/doc/troubleshooting/index-docpage/
Алексей, подскажите: Как с помощью FilterList в ryandexdirect указать фильтрацию по конкретной цели в метрике. К примеру есть 6 настроенных целей, но мне нужно забирать данные только для цели с id 30885394 Как правильно задать команду?
К сожалению на данный момент я не нашел в списке доступных полей id цели, по которому можно было бы отфильтровать нужную цель.
Я думаю с этим вопросом вы можете обратиться напрямую в поддержку API Директа с помощью этой формы.
https://tech.yandex.ru/direct/doc/support/troubleshooting/other-docpage/
Добрый день!
Работает ли в Power BI Services, если настроить автоматическое обновление?
Добрый день!
Большое спасибо за отличный пакет ryandexdirect для R.
Помогите пожалуйста разобраться со следующей проблемой.
Из Logs API без проблем выгружаются данные о просмотрах, а вот при выгрузке данных о визитах появляется следующая ошибка:
https://image.prntscr.com/image/bcd96ed0da074a3481e08152e39736b0.png
Здравствуйте, судя по ошибке "Internal 500" похоже на то что это какая то внутренняя ошибка на стороне серверов Яндекса, попробуйте для теста отправить запрос с несколькими полями в аргументе fields.
Вопрос, снят.
Извините за лишнюю панику.
Переопределил глобально прокси и всё заработало.
Нет, соврал.
Поле - ym:s:networkType.
Вычислил, при наличии какого поля вываливается ошибка.
Это - ym:s:bounce. Без него всё выгружается нормально.
Это в любом случае проблема на стороне API Яндекса, если ошибка и далее будет повторяться можете обратиться к поддержку заполнив эту форму - https://tech.yandex.ru/direct/doc/dg-v4/troubleshooting/other-docpage/
Приветствую! При активации R возникает проблема
https://yadi.sk/i/nUpSPdg93E5Mgs
https://yadi.sk/i/ODE9HgU93E5NNc
плюс запрашиваются некие коннекты через зеркало CRAN
что тут можно сделать?Добрый день, я пока не писал функции для работы с метрикой не с Logs API, как только доберутся руки я добавлю их в пакет ryandexdirect.
Скажите, какие данные из метрики вам сейчас необходимо получить не из Logs API, и возможно в ближайшем будущем я добавлю функцию с помощью которой это можно сделать.
Чтобы оставить комментарий, необходимо авторизироваться