Блог про интернет-маркетинг для бизнеса

Аналитика

Как получить и обработать сырые данные из Яндекс.Метрики

141
1
0

Хотите качественно анализировать статистику из Яндекс.Метрики? Отследить сложные воронки продаж, объединить данные из разных систем аналитики, контролировать расхождения в статистике, — «сырые» данные помогут вам эффективно решить все эти сложные задачи.

В 2016 году Яндекс заявили о публичном релизе программного интерфейса Logs API, который позволяет получить сырые данные из Яндекс.Метрики в файле формата TSV.

Однако в работе с API Яндекс.Метрики у вас могут возникнуть сложности:

  • процедуру выгрузки придется повторять каждый раз, когда вы захотите получить новую статистику;
  • для визуализации данных нужно вручную загружать TSV-файл в оболочку, предназначенную для построения графиков и таблиц.

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

Как получить и обработать сырые данные из  Яндекс.Метрики

Как выгрузить сырые данные с помощью языка R?

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

Для выгрузки данных из Яндекс.Метрики я создал программный пакет ryandexdirect, в который добавил функцию yadirGetLogsData — она упрощает работу с Logs API.

Опишу работу с пакетом поэтапно:

1. Скачайте, установите и запустите версию R, соответствующую операционной системе вашего компьютера.

установить язык 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)

Появится сообщение, которое подтвердит успешную установку пакета.

Подтвердит установку пакета ryandexdirect

3. Далее необходимо получить токен доступа к API. Для этого в консоль R скопируйте следующий код:

my_token <- yadirGetToken()

В открывшемся окне браузера разрешите приложению «ryandexdirect» доступ к своему аккаунту.

Разрешите доступ приложению «ryandexdirect»

4. Появится окно с кодом доступа к API: скопируйте его и вставьте в R-консоль после строки «Enter your token». Рекомендую также сохранить этот код в блокноте, потому что он еще понадобится вам для выгрузки данных в Power BI.

Окно с кодом доступа к API

5. В работе с функцией yadirGetLogsData используются такие аргументы:

  • counter — номер счётчика Яндекс.Метрики;
  • date_from — начальная дата отчёта;
  • date_to — конечная дата отчёта;
  • fields — список полей, которые вы хотите получить;
  • source — источник записей (возможные значения для этого аргумента: «hits» — просмотры или «visits» — визиты);
  • token — API токен (ключ доступа к Logs API).

Смотрите в справке список доступных полей для источника записей «visits» и «hits».

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

Рассмотрим два способа импорта данных:

  • с помощью сценария на языке R;
  • с помощью специального файла Power BI с коннектором к Яндекс.Метрике.

1. С помощью сценария на языке R

1.1. В Power BI на вкладке «Главная» выберите группу меню «Получить данные» — «Другое» — «R-скрипт». Нажмите кнопку «Подключить».

Как визуализировать сырые данные в Microsoft Power BI
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».

Выполните сценарий R

1.3. В окне «Навигатор» поставьте галочку напротив таблицы «rawmetrikdata» и нажмите кнопку «Загрузить»:

В окне «Навигатор»

1.4. Данные, загруженные в вашу модель, будут выглядеть следующим образом:

Данные, загруженные в вашу модель

2. С помощью файла Power BI с коннектором к Яндекс.Метрике

Этот метод еще проще — вам не нужно изменять код, достаточно ввести пользовательские параметры в коннектор.

2.1. Скачайте файл Power BI.

2.2. На вкладке «Главная» выберите группу меню «Внешние данные», откройте выпадающий список «Изменить запросы» и кликните на поле «Изменить параметры».

выберите группу меню «Внешние данные»

2.3. Введите свои параметры и нажмите кнопку «ОК».

Установите свои параметры

2.4. Появится сообщение, что в запросах есть ожидающие изменения — нажмите «Применить изменения».

Применить изменения

2.5. В диалоговом окне «Собственный запрос к базе данных» кликните «Выполнить».

Собственный запрос к базе данных

В Power BI загрузятся данные из указанного вами аккаунта Яндекс.Метрики.

В Power BI загрузятся данные

Выводы

Сырые данные из Яндекс.Метрики — отличный источник информации для аналитических исследований, однако без навыков программирования работать с API сложно. Используя описанный в статье метод, вы сможете легко выгрузить статистику и обработать данные.

Алгоритм действий:

  1. Установите версию R, соответствующую операционной системе на вашем компьютере, и загрузите данные с помощью пакета ryandexdirect.
  2. С помощью R-консоли выгрузите сырые данные в удобную для вас среду:
    • файл формата CSV;
    • базу данных MySQL.
  3. Настройте импорт статистики в Microsoft Power BI для дальнейшей визуализации данных.

В следующей статье я расскажу, как связать Яндекс.Директ с Power BI.

Обнаружили ошибку? Выделите ее и нажмите Ctrl + Enter.

Комментарии (26)

  1. 0
    месяц назад

    А можно выгрузить данные по кампаниям,ключам, времени суток и расходы?


    • 0
      Maxim Kudryavtsev
      месяц назад

      К сожалению время суток получить нельзя, и даже час нельзя получить,  а так информацию по кампаниям и ключевым словам можно получить из типа отчёта CRITERIA_PERFORMANCE_REPORT.

  2. 0
    3 месяца назад

    Алексей, подскажите, как избавиться от дублирования данных при запись в бд? Т.е. при приведенном ниже коде, если мы выгружаем данные за последний месяц к примеру, и делаем это каждый день, то будет 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 не подходит, т.к. тогда перезапишется вся БД, а нужно именно накапливать данные в БД. Спасибо!

     
    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)
    • 0
      Alexandr Pipko
      3 месяца назад

      Добрый день, перед тем как повторно записать данные удаляйте старые данные за тот период за который они будут записаны повторно с помощью SQL конструкции DELETE, вы можете получить дату начала и дату конца отчётного периода, и с помощью функции (в R) dbSendQuery перед записью удалить из БД данные за тот период за который они будет записаны повторно.

      О том как удалять строки с помощью SQL можно почитать тут - http://www.mysql.ru/docs/man/DELETE.html.

  3. 0
    3 месяца назад

    При попытке использования коннектора возникает ошибка 

    "Unexpected error: Object reference not set to an instance of an object."


  4. 0
    3 месяца назад

    А как вы поступаете в случаях, когда на 1 счетчике находятся сразу 3 сайта (2 поддомена). Каким образом через api фильтровать данные по поддоменам? Из api нашел только 1 похожий атрибут (страница входа). Если я правильно понимаю, то нужно указать только имя домена без протокола - ym:s:startURL="msk.site.ru"?






    • 0
      Андрей Кусков
      3 месяца назад

      Честно говоря метрика для нас больше допольнительный инструмент поэтому пока с такой задачей не сталкивался, из GoogleAnslytics такую информацию можно вытянуть по полю hostname но в метрике не нашел такого поля, возможно вам стоит задать этот вопрос в поддержку API Яндекс Метрики - https://tech.yandex.ru/metrika/doc/troubleshooting/index-docpage/

  5. 0
    4 месяца назад

    Алексей, подскажите: Как с помощью FilterList в ryandexdirect указать фильтрацию по конкретной цели в метрике. К примеру есть 6 настроенных целей, но мне нужно забирать данные только для цели с id 30885394 Как правильно задать команду?

  6. 0
    5 месяцев назад

    Добрый день!

    Работает ли в Power BI Services, если настроить автоматическое обновление?

    • 0
      Денис Арисмятов
      4 месяца назад
      Пока что через шлюз не обновляются данные если используется R коннектор, но я думаю этот момент в ближайшее время будет исправлен.
  7. 0
    6 месяцев назад

    Добрый день!

    Большое спасибо за отличный пакет ryandexdirect для R.

    Помогите пожалуйста разобраться со следующей проблемой.
    Из Logs API без проблем выгружаются данные о просмотрах, а вот при выгрузке данных о визитах появляется следующая ошибка:
    https://image.prntscr.com/image/bcd96ed0da074a3481e08152e39736b0.png

  8. 1
    7 месяцев назад
    Спасибо, все получилось и корректно выгрузилось в Excel. Надеюсь, что ваш энтузиазм разгорится, и на сайте появятся статьи по SEO и R.
  9. 0
    10 месяцев назад

    Приветствую! При активации R возникает проблема

    https://yadi.sk/i/nUpSPdg93E5Mgs

    https://yadi.sk/i/ODE9HgU93E5NNc

    плюс запрашиваются некие коннекты через зеркало CRAN

    что тут можно сделать?
  10. 0
    10 месяцев назад
    Есть коннектор через R скрипт к метрике, не к  Logs API? И будет ли доступна у него автоматическое обновление в облаке power bi?
    • 0
      Павел Ма
      10 месяцев назад

      Добрый день, я пока не писал функции для работы с метрикой не с Logs API, как только доберутся руки я добавлю их в пакет ryandexdirect.


      Скажите, какие данные из метрики вам сейчас необходимо получить не из Logs API, и возможно в ближайшем будущем я добавлю функцию с помощью которой это можно сделать.

  11. 4
    10 месяцев назад
    По power bi лучшие статьи в блоге.

Чтобы оставить комментарий, необходимо авторизироваться

Подписаться

на самую полезную рассылку по интернет-маркетингу

Самое

обсуждаемое популярное читаемое