Анализ данных о посещении сайта роботами и людьми в Яндекс.Метрике. Часть II

23 февраля, 2023

Продолжение материала о том, как в Яндекс.Метрике проанализировать аудиторию собственного сайта на предмет переходов роботов и настоящих пользователей согласно алгоритмам определения самого Яндекса. Написание программы на Python. Часть вторая.

Примечание: первая часть доступна по ссылке.

Чтобы выгрузить статистику из Яндекс.Метрики по посещениям ботов и людей с помощью API, мы будем использовать API отчетов. Но перед тем, как вы начнете писать саму программу на Python, используя API Метрики, необходимо произвести подготовительные работы, а именно зарегистрировать новое приложение для Яндекс.Метрики и получить токен доступа.

Регистрация приложения

Для регистрации приложения подойдет обычная почта Яндекса. Если у вас уже есть аккаунт в Яндексе (например, на котором размещен ваш счетчик Яндекс.Метрики), вы можете использовать его, а не создавать новый. Авторизовавшись под своей учетной записью, перейдите по адресу https://oauth.yandex.ru/client/new

Создание приложения

Заполните необходимые поля (со звездочкой *):

  • Название сервиса
  • Платформа приложения
  • Доступ

В Название сервиса введите название приложения, которое будет использоваться. Вы можете задать произвольное имя. Например, MetrikaApp:

Название приложения

К приложению можно прикрепить иконку (максимальный размер не более 1Мб), но мы это делать не будем, поскольку данное приложение будет использоваться для личных целей, а не публично.

Напротив Для какой платформы нужно приложение? поставьте галочку рядом с Веб-сервисы. Появится строка Callback URL:

Callback URL

Нажмите на ссылку Подставить URL для разработки. В поле Callback URL автоматически подставится адрес https://oauth.yandex.ru/verification_code:

Подставить URL для разработки

Заполнение данного раздела вам понадобится в будущем для получения токена.

В разделе Какие данные вам нужны? найдите в списке Яндекс.Метрика и поставьте галочку Получение статистики, чтение параметров своих и доверенных счётчиков:

Получение статистики, чтение параметров своих и доверенных счётчиков

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

Дополнительные данные

В самом конце страницы нажмите на кнопку Создать приложение:

Создание приложения

Приложение успешно создано. После этого вас автоматически перенаправит на другую страницу, где будут отображаться технические данные о вашем приложении. Они вам понадобятся через некоторое время.

Получение токена доступа

Данные созданного приложения

Скопируйте идентификатор вашего приложения из раздела ClientID:

Копирование значения из поля ClientID

Сохраните его в обычном блокноте. Он вам понадобится чуть позже в запросах для получения OAuth-токена.

Теперь авторизуйтесь под учетной записью Яндекса, на которой у вас есть доступ к счетчику Яндекс.Метрики, и перейдите по ссылке, добавив ее в адресную строку браузера:

, где вместо <идентификатор приложения> вставьте идентификатор вашего приложения ClientID, скопированный на предыдущем шаге:

Ссылка с идентификатором приложения (ClientID)

У вас должно открыться окно авторизации для аккаунта Яндекс.Метрики. Нажмите кнопку Войти как… и тогда ваше приложение получит доступ к использованию API Метрики.

Разрешить приложению доступ к статистике, чтению параметров

На следующей странице отобразится ваш Oauth-токен. Он будет также добавлен в адресную строку.

Токен доступа

Сохраните его и никому не показывайте и не передавайте. С его помощью можно получить доступ к вашим счетчикам Яндекс.Метрики.

Google Colab

Чтобы работать с API Метрики и выполнять запросы на Python, необходимо использовать специальное программное обеспечение (ПО). Такое ПО называют интегрированной средой разработки (IDE). Наиболее популярным Python IDE является PyCharm. Еще очень распространена IDE Spyder и JupyterLab.

Многие интернет-маркетологи и аналитики данных в своей работе так же используют блокнот Jupyter Notebook, который можно установить с помощью дистрибутива Anaconda, включающий набор популярных библиотек для работы с данными, таких как: NumPy, SciPy, Astropy и др. Еще есть Visual Studio Code и много других продуктов.

Как вы понимаете, выбор тех или иных программ зависит исключительно от ваших предпочтений в изучении или от тех инструментов, которые используются в вашей компании. Однако для работы с API Яндекс.Метрики я предлагаю использовать другой сервис - Google Colab.

Скриншот программы из Google Colab

Colaboratory (или просто Colab) - это бесплатный продукт Google Research. Он позволяет любому человеку писать и выполнять код Python прямо в браузере, без установки каких-либо программ и без дополнительной настройки. По сути, Colab - это размещенная на хостинге служба Jupyter Notebook, которая предоставляет доступ к своим вычислительным ресурсам, включая графические процессоры, благодаря которым можно заниматься не только базовой аналитикой данных, но и более сложными исследованиями в области машинного обучения. Google в Colab поддерживает актуальное состояние библиотек и их взаимную работу. Ваши проекты сохраняются не локально на компьютере, а на Google Диске. Они также могут быть загружены с GitHub. Таким образом, вы можете легко работать над одним проектом с другими людьми и делиться файлами со своей командой. Colab - отличное решение для начинающих пользователей, студентов, специалистов по обработке данных и исследователей в области искусственного интеллекта.

Создание проекта

Чтобы создать свой первый проект в Colab, авторизуйтесь в любой своей учетной записи Gmail и перейдите по ссылке. Вам откроется приветственное окно и ваши проекты:

Первый экран в Colaboratory

Если вы никогда раньше не работали с Colaboratory, то никаких проектов, кроме демонстрационного, в списке вы не увидите. Для создания первого проекта нажмите на Создать блокнот:

Создание блокнота

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

Переименование блокнота Colab

На этом первый шаг завершен. Оставьте вкладку с вашим проектом Colab открытой и переходите к следующему этапу.

Клиентская библиотека tapi-yandex-metrika

Для работы с API Яндекс.Метрики я предлагаю использовать библиотеку Павла Максимова. Она расположена по адресу https://github.com/pavelmaksimov/tapi-yandex-metrika

Поскольку библиотека является сторонней разработкой, ее необходимо установить. Она называется tapi-yandex-metrika. Для этого вернитесь на вкладку с вашим проектом Colab и в первой строке введите команду установки клиентской библиотеки:

Нажмите иконку запуска (значок play), чтобы код в ячейке сработал. В Colab это будет выглядеть так:

Установка клиентской библиотеки tapi-yandex-metrika для работы с API Метрики

Напротив строки с кодом должна появится зеленая галочка, свидетельствующая об успешном выполнении кода:

Успешное выполнение ячейки с кодом

Выгрузка данных по роботам и людям

Чтобы продолжить писать программу, сверху вашего блокнота нажмите на + Код:

Новая ячейка

В новую ячейку вставьте код, а точнее его часть, из библиотеки Максимова, расположенного по адресу https://github.com/pavelmaksimov/tapi-yandex-metrika/blob/master/docs/stats.md

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

Идентификатор счетчика Метрики

В поле date1 вы можете указать начальную дату выгрузки данных в формате YYYY-MM-DD (за какой период вы хотите получить статистику из счетчика Яндекс.Метрики), а в поле date2 – конечную дату отчета в формате YYYY-MM-DD, за которую желаете проанализировать роботов и реальных пользователей. Также вы можете использовать значения today (сегодня), yesterday (вчера), ndaysAgo (N дней назад).

Примечание: date1 и date2 могут принимать и строку, и тип данных datetime с перечислением через запятую атрибутов (year, month, day).

В metrics вы через запятую можете перечислить перечень показателей, которые хотите выгрузить, в поле dimensions – группировки, они же параметры. Полный список группировок и метрик API отчетов Яндекс.Метрики представлен в официальной документации Яндекса.

Не забудьте, что в Яндекс.Метрике есть разные уровни организации данных. Нельзя использовать вместе измерения или метрики, которые относятся к разным областям применения. Группировки и метрики, начинающиеся с ym:s:, имеют область действия визиты (s — session), а группировки и метрики, начинающиеся с ym:pv: относятся к хитам (pv — pageview — просмотр страницы).

Уровни организации данных в Метрике

Как вы знаете, Яндекс.Метрика определяет роботов по поведенческим факторам и другим техническим сигналам. В API Метрики за это отвечает параметр ym:s:isRobot. Именно его вместе с параметром ym:s:date на уровне визитов вы добавляете в запрос ym:s:isRobot, чтобы в разрезе конкретного дня видеть статистику по роботам и людям. А в metrics используется классический показатель ym:s:visits (визиты).

Строка запроса sort="ym:s:date" отвечает за сортировку, в данном случае по дате. По умолчанию сортировка производится по убыванию (указан знак «-» перед группировкой или метрикой). Чтобы отсортировать данные по возрастанию, удалите знак «-».

lang="en" – язык запроса. Подробнее о синтаксисе запроса API отчетов и о том, в каком виде вы получите ответ, читайте в документации Яндекса.

Итоговый код в Colab будет выглядеть так:

Код запроса

Запустите ячейку. Ошибок быть не должно. Создайте новую ячейку и добавьте в нее нижеприведенную строку:

Запустив ее, вы увидите результат выполнения программы и данные Яндекс.Метрики:

Результат выполнения запроса

Внизу таблицы API отчетов Метрики отдали дополнительные данные по запросу:

  • total_rows – общее количество строк в ответе по всему множеству данных;
  • total_rows_rounded — признак того, что общее количество строк было округлено (false – нет);
  • sampled — признак семплирования. Показывает, был ли применен семплинг (false – нет, true – да);
  • contains_sensitive_data — признак возможного отсутствия конфиденциальных данных в ответе. К ним относятся данные, которые рассчитываются алгоритмами Яндекса, например, социально-демографические (пол, возраст и др.), адреса страниц входа, поисковые фразы, информация о роботах. При значении true в ответе не отобразятся такие данные, если выборка составляет меньше 10 посетителей;
  • sample_share — доля данных, по которым осуществлялся расчет. Доступно значение в пределах от 0 до 1;
  • sample_size — количество строк в выборке данных;
  • sample_space — количество строк данных;
  • data_lag — задержка в обновлении данных, в секундах;
  • totals — общие результаты для метрик по всему множеству данных;
  • min — минимальные результаты для метрик среди попавших в выдачу ключей;
  • max — максимальные результаты для метрик среди попавших в выдачу ключей.

В таком виде работать со статистикой не очень удобно. А поскольку полученные данные являются списком (type — list), вы можете преобразовать этот список в датафрейм:

В Colab добавьте новую ячейку, вставьте туда эти строки и запустите ее:

Тип - list

Для этого импортируйте библиотеку pandas с помощью команды в новой ячейке:

В программе это будет выглядеть так:

Импорт библиотеки pandas

Для датафрейма в первой строке необходимо задать названия столбцов. Чтобы узнать их имена воспользуйтесь следующей командой:

Названия столбцов

Таким образом, вы получите итоговую конструкцию для удобочитаемого отображения данных, если используйте такие же параметры и показатели (ym:s:date, ym:s:isRobot и ym:s:visits), что и я:

Результат выполнения кода в Colab (новая ячейка):

Датафрейм с данными по роботам и людям

Как видите, данные в датафрейме выглядят привычнее и напоминают обычную таблицу. Каждая дата в выгруженной статистике Яндекс.Метрики делится на две строки - в одной строке в столбце ym:s:isRobot отображается количество людей (People), а в другой количество роботов (Robots). Например, 1 января 2023 года на моем сайте osipenkov.ru было зафиксировано 167 визитов от реальных пользователей и 13 визитов роботов. 31 января 2023 года визитов от реальных пользователей - 1281, а от роботов - 66. И так далее.

Визуализация данных

Теперь вы можете построить график с распределением количества посещений от ботов и обычных пользователей, чтобы статистика была более наглядной. Для этого воспользуетесь библиотекой Seaborn. Seaborn - это библиотека для создания статистических графиков на Python. Она основывается на библиотеке Matplotlib и тесно взаимодействует со структурами данных pandas.

Импортируйте ее в свой проект Colab:

Импорт библиотеки seaborn

Для создания визуализации воспользуйтесь нижеприведенным кодом в новой ячейке:

После выполнения этого кода вы увидите результат в виде столбчатой диаграмма за выбранный диапазон дат и разбивкой на два типа - Роботы (Robots) и Пользователи (People):

Визуализация данных (визиты роботов и пользователей)

Если анализируемый диапазон выбран слишком большим (например, как у меня за 30 дней), то подписи под осью по умолчанию могут выглядеть нечитабельно. В этом случае рекомендуется сократить период выгрузки данных, либо же скорректировать запрос на визуализацию, используя вместо кода выше этот фрагмент:

Тогда визуализация окончательно примет такой вид:

Визуализация данных с измененными подписями

Изменив начальный запрос, вы можете построить распределение роботов и пользователей с привязкой к другим параметрам. Например, узнать с какого браузера или города приходит больше всего роботов. Или какое количество визитов на одного пользователя совершается ботами. Вы также можете отслеживать динамику/тенденцию снижения или увеличения процента роботов по отношению к реальным посетителям.

Примечание: по умолчанию в запросе API Метрики выгружается 100 элементов на странице выдачи (поле limit). Чем будет выше у вас детализация запроса, тем итоговый датафрейм будет больше. И тогда вам нужно в теле запроса задать поле limit с конкретным значением (максимальное - 100 000).

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

Резюме

Как видите, определять роботов и реальных пользователей можно как через интерфейс Метрики, так и с помощью API Метрики. Первый вариант разобран в первой части и является наиболее простым для веб-аналитика, поскольку ограничивается только настройками и функционалом самого счетчика аналитики. Конечно же, вы можете выгрузить данные из интерфейса Яндекс.Метрики в формате xlsx или csv, а сам анализ проводить уже внутри того же Microsoft Excel, используя функционал классических и сводных таблиц.

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

Получайте бесплатные уроки и фишки

По контекстной, таргетированной рекламе и аналитике