Яндекс.Метрика

Ноутбук, используемый в примере:


В данной статье рассматривается пример получения данных с сервиса Яндекс.Метрика для последующей загрузки в платформу Visiology. Пример не является шаблонным: в каждом случае задачи разнятся, и работать с данными придется по-другому.

Вот особенности данного кейса:

  • Количество получаемых данных небольшое - порядка 250 тысяч строк, поэтому все выгруженные и обработанные данные сохраняются в XLSX файл, а не в CSV или SQL базу данных.

  • По той же причине (небольшой объем данных) данные забираются сразу одним запросом. При большем объеме нужно учитывать ограничения, описанные в Яндекс.Метрика API и применять другие методы получения данных, например, используя пагинацию.

  • Код в приложенном ноутбуке находится в статусе рабочего черновика и служит лишь в качестве примера. Для продакшна код точно можно улучшить, например, сократить количество переменных или неоптимальных преобразований.

Здесь не рассматривается:


Сначала необходимо внимательно ознакомиться с API Метрики: https://yandex.ru/dev/metrika/.

Теперь можно приступать к работе в JupyterLab.

  1. Создаем новый ноутбук.

  2. Первым блоком подключаем все необходимые нам для работы Python библиотеки:

    from tapi_yandex_metrika import YandexMetrikaLogsapi from datetime import datetime import petl as etl

     

  3. Вторым блоком получаем вчерашнюю дату. Эту необходимо для получения данных за какой-то выбранный период. Далее в запросе мы будем запрашивать данные с 1 января 2018 года по вчерашний день.
    В платформе будет использоваться гранулярность календаря - день. Поэтому вчерашний день выбран, чтобы избежать неполноты данных за сегодня.

    year = datetime.date(datetime.now()).strftime("%Y") month = datetime.date(datetime.now()).strftime("%m") day = str(int(datetime.date(datetime.now()).strftime("%d"))-1) date = year + '-' + month + '-' + day

     

  4. Задаем свой токен и номер счетчика в Яндекс.Метрике. Что это такое и как получить лучше смотреть в первоисточнике:

    ACCESS_TOKEN = "balblablablablayakrevedko" COUNTER_ID = "563547"

     

  5. Обращаемся к API, используя токен и ID счетчика. Также указываем нужные нам настройки работы с API. В данном случае это wait_report=True, что позволит нам ожидать завершения генерации отчета на сервере Яндекс.Метрики до попытки его скачать. Если ее не поставить, то может возникнуть ситуация, когда мы пытаемся скачать отчет, который сервер Яндекса еще не успел сгенерировать.

     

  6. Задаем параметры для получения двух отчетов: визиты и просмотры страниц. Эти параметры ниже будут передаваться в Яндекс.Метрику для генерации отчетов. Тут, например, указывается начальная дата - 1 января 2018 и конечная дата - вчерашний день.

     

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

     

  8. Кладем полученные данные в переменные.

     

  9. Сейчас в переменных dataV и dataW данные лежат просто в виде строки. Так мы их далее использовать не сможем для формирования таблицы. Преобразуем их в список по разделителю новой строки \n.

     

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

     

  11. В переменных *Table для хранения таблиц задаем заголовки таблиц. В комментариях указано сопоставление строчек таблиц для их последующего слияния. Для таблицы visitTable сопоставление смещается, так как мы далее будем удалять седьмой столбец “Список просмотров“ за ненадобностью.

     

  12. Удаляем седьмую колонку из таблицы visitTable, используя временный массив и наполняем таблицу данными по визитам.

     

  13. Создаем таблицу соответствия визитов и просмотров, где в каждой строке находится отдельный просмотр и этому просмотру сопоставлен id визита.

     

  14. Наполняем таблицу данными по просмотрам.

     

  15. Сшиваем таблицу просмотров с таблицей соответствия визитов и просмотров с помощью LEFT JOIN. Теперь у нас есть одна таблица со всеми данными по просмотрам и еще данные по визитам, которым эти визиты соответствуют.

     

  16. Выкидываем все строчки, у которых нет VisitID, а также у которых isPageView = 0 (это запросы поисковых роботов, они нам не нужны).

     

  17. Объединяем таблицы по просмотрам и визитам.

     

  18. Расшифровываем коды типов устройств.

     

  19. В колонке “Рекламная система” содержится много разных типов систем. Нам же достаточно знать Яндекс это или Google, поэтому оставляем только символы до нижнего подчеркивания.

     

  20. Правим тип данных на integer у двух колонок.

     

  21. Добавляем дополнительные колонки с данными для нашей конкретной бизнес-задачи. Это нужно для лучшей визуализации отчетов в платформе Visiology.

     

  22. Экспортируем в Excel.

Не забываем убедиться в том, что ресурсов на сервере хватает на формирование большого XLSX файла.

 

23. Полученный файл можно брать и загружать в платформу через стандартный загрузчик. На этом работа в ViXtract завершена.