Исследование воронки Google Analytics 4 с помощью Python
В предыдущем материале мы с вами познакомились с методикой Исследование воронки (Funnel Exploration) в Google Analytics 4. Сегодня рассмотрим способ построения собственных воронок с помощью Data API и Python.
Начало
Исследование воронки позволяет визуализировать шаги пользователей на пути к выполнению определенного действия на сайте / в приложении и быстро узнать, насколько успешно они проходят каждый из этапов, и в случае обнаружения «узкого места», устранить неисправности, улучшить пользовательский опыт, усовершенствовать рекламные стратегии и внедрить изменения с для повышения коэффициента конверсии.
Например, так может выглядеть воронка по шагам электронной торговли:
А вот так пользовательская воронка по скачиванию моей электронной книги Google Tag Manager с разбивкой по типу устройств:
Анализируя данные воронки, вы можете определить, где посетители прерывают свой путь, на каком этапе, какое количество пользователей переходит на следующий шаг и многое другое. Благодаря наглядным визуализациям в GA4, у вас появляется куда больше возможностей для улучшений и расширения путей конверсии.
Например, если при анализе поведения покупателей выяснится, что они выходят со страницы карточки товара, не добавляя его в корзину, то вероятнее всего:
- посетители искали другой товар;
- они одновременно сравнивали несколько сайтов и нашли лучшее предложение у конкурентов;
- произошел сбой на странице и человек просто не смог этого сделать.
Если посетители покидают сайт после добавления в корзину, то это может означать, что:
- они нашли более выгодное предложение;
- они не смогли завершить оформление заказа по какой-либо причине, не относящейся к нам (отключили интернет, кто-то отвлек, просто перехотели);
- произошел сбой на этой странице и человек не смог завершить покупку.
Если клиенты покидают сайт уже на этапе оплаты, то в 90% случаев это связано:
- со слишком сложной процедурой;
- с тем, что нет подходящего способа (например, только онлайн-оплата или только наличными курьеру);
- высокой стоимостью доставки.
Не стоит забывать и про аудитории, создавать сегменты пользователей и списки ремаркетинга с прервавшими последовательность и теми, кто уже сделал один шаг навстречу и добавил товар в корзину. Это даст вам возможность оптимизировать целевые страницы и скорректировать само предложение о товарах/услугах для лучшего соответствия предпочтениям и поведению потенциальных клиентов.
Для большинства базовых и простых задач анализа интернет-маркетологу вполне достаточно построения Исследования воронки в интерфейсе Google Analytics 4. Извлечение данных через API Google Analytics 4 подходит тем, кто хочет получить больше гибкости в своих действиях, например, определять сложные конфигурации воронки, применять пользовательские фильтры и интегрировать данные из других источников. Скрипты Python могут автоматизировать извлечение, обработку и анализ данных воронки, позволяя планировать или составлять отчеты в режиме реального времени без ручного вмешательства. Выбор между этими двумя подходами зависит от таких факторов, как требуемый уровень настройки, необходимость автоматизации и доступная техническая экспертиза.
Сразу отмечу, что я бы не хотел в этой публикации повторяться и начинать с того, что такое API, зачем его использовать для Google Analytics 4, какие существуют лимиты и ограничения, как выполнить свой первый запрос и т.д., а сразу перейти к практическим приемам. Все это я разобрал в других статьях своего блога, поэтому кому интересно, может прочитать их перед этим руководством:
- API Google Analytics 4 (Data API)
- Начало работы с Google Analytics Data API (GA4). Ваш первый запрос
- История квот для API данных в аккаунте Google Analytics 4
- Прогнозирование SEO-трафика Google Analytics 4 с помощью Python и Prophet
Поскольку построение воронок в интерфейсе Google Analytics 4 подробно разобрано в другом моем материале, давайте рассмотрим, как проводить исследование воронки программно с помощью Python. Для этого необходимо выполнить несколько несложных шагов:
- создать проект в Colab;
- создать проект в Google Cloud;
- включить API Google Analytics;
- создать учетную запись службы, получить ключ JSON;
- добавление сервисного аккаунта в ресурс Google Analytics 4;
- загрузить приватный ключ в Google Диск и подключить его к программе;
- установить нужные библиотеки Python;
- написать программу для воронок GA4.
В конце руководства будет приложена ссылка на мою программу.
Давайте приступим!
Создание проекта в Colab
Для работы с API Google Analytics 4 я предлагаю использовать Google Colab. Чтобы создать свой первый проект в нем, авторизуйтесь в своей учетной записи Gmail и перейдите по ссылке. Вам откроется приветственное окно и ваши проекты:
Если вы никогда раньше не работали с Colaboratory, то никаких проектов, кроме демонстрационного, в списке вы не увидите. Для создания первого проекта нажмите на Создать блокнот:
В новом окне вы увидите только что созданный блокнот, в котором вы будете писать код программы на Python. При желании вы можете переименовать свой проект, задав ему понятное название, например - Исследование воронки GA4:
На этом первый шаг завершен. Оставьте вкладку с вашим проектом Colab открытой и переходите к следующему этапу.
Создание проекта в Google Cloud
Начинающим пользователям Google предоставляет возможность быстро начать работу с API Google Analytics, перейдя в официальную документацию разработчиков. Сделайте это, а затем на открывшейся вкладке нажмите на синюю кнопку Включите API данных Google Analytics v1.:
Это действие автоматически создаст вам новый проект в Google Cloud Platform (GCP), а также активирует Google Analytics Data API v1 и создаст учетную запись службы, необходимую для дальнейшего создания запросов. Для работы с Data API платежный аккаунт в Google Cloud не требуется, поэтому вы можете использовать любую учетную запись Gmail.
Нажав на кнопку, введите имя проекта (Enter new project name). Например, FunnelGA4:
В завершение нажмите NEXT (Далее). Начнется автоматическое создание проекта. Через некоторое время Google выдаст вам уведомление об успешной настройке проекта и создании учетной записи службы:
Скачайте к себе на компьютер приватный ключ, нажав на кнопку DOWNLOAD PRIVATE KEY AS JSON. Его вы будете использовать для аутентификации своей учетной записи службы. Сохраните этот файл в надежном месте, так как любой, у кого есть этот ключ, может выступать в качестве сервисного аккаунта для доступа к вашим ресурсам Google Cloud Platform. В конце нажмите DONE.
Вы можете открыть сохраненный файл обычным блокнотом (формат .json), чтобы посмотреть, из чего он состоит:
Этот файл вам в дальнейшем понадобится для проекта в Colab.
Включение API Google Analytics
Чтобы удостовериться в том, что Google сам автоматически создал нам новый проект и учетную запись службы (сервисный аккаунт) в GCP для работы с Data API, перейдите по ссылке console.cloud.google.com. Если в Google Cloud Platform у вас уже созданы и другие проекты, нажмите в верхней части панели на название:
В открывшемся окне сверху выберите вкладку ALL. Вы должны увидеть новый созданный проект с вашим названием:
Нажмите на него, чтобы открыть. Затем перейдите в APIs & Services:
Удостоверьтесь, что в разделе Enabled APIs & services включен Google Analytics Data API:
Нажмите на название. Если Status – Enabled, то Google Analytics Data API включен:
Сервисный аккаунт
Теперь перейдите в раздел Credentials, чтобы увидеть данные сервисного аккаунта, созданного автоматически:
Информация по сервисному аккаунту уже присутствует в выгруженном JSON файле с приватным ключом в строке client_email:
Добавление сервисного аккаунта в Google Analytics 4
Скопируйте адрес электронной почты сервисного аккаунта (или из сохраненного файла из поля client_email, или из интерфейса Google Cloud) и откройте свой ресурс Google Analytics 4, с которым планируете работать. Перейдите в раздел Администратор – Ресурс - Управление доступом к ресурсу:
Добавьте нового пользователя:
Для работы с Google Analytics Data API v1 необходимы только разрешения на чтение и анализ (он же Читатель). В поле адреса электронный почты добавьте скопированный на предыдущем шаге e-mail сервисного аккаунта:
В правом верхнем углу нажмите кнопку Добавить. На этом добавление сервисного аккаунта в Google Analytics 4 завершено.
Загрузка приватного ключа на Google Диск
Когда вы начнете писать свой первый запрос к Data API, вам понадобятся данные от сервисного аккаунта Google. А для этого необходимо загрузить ваш приватный JSON ключ на Google Диск. Это нужно сделать для того, чтобы после перезапуска среды выполнения (завершения сеанса и закрытия вкладки браузера/проекта) Google не удалял ваш файл с приватным ключом из Colab, и вам не приходилось загружать его каждый раз повторно. Для этого мы подключаемся к Диску и загружаем в него этот файл, а потом в проекте прописываем путь к этому файлу.
Сделать это очень просто. Перейдите в Google Drive по ссылке и загрузите в него ваш приватный ключ:
Перед загрузкой обязательно проверьте, чтобы в имени файла не было никаких пробелов. Если они присутствуют, замените их на нижнее подчеркивание _ или тире -
Подготовка программы
Вернитесь на вкладку с вашим проектом в Colab и в первой строке введите команду установки клиентской библиотеки Google Analytics:
1 |
pip install google-analytics-data |
Нажмите иконку запуска (значок play), чтобы код в ячейке сработал. В Colab это будет выглядеть так:
Напротив строки с кодом должна появиться зеленая галочка, свидетельствующая об успешном выполнении кода:
В конце ячейки вы можете увидеть строчки примерно такого содержания:
1 2 3 4 5 |
Installing collected packages: google-analytics-data Successfully installed google-analytics-data-0.16.1 WARNING: The following packages were previously imported in this runtime: [google] You must restart the runtime in order to use newly installed versions. |
Произошла успешная установка пакета, но для использования новых версий вы должны перезапустить среду выполнения с помощью кнопки RESTART RUNTIME. Это делать необязательно, поскольку Google в Colab поддерживает актуальное состояние библиотек и их взаимную работу.
Чтобы продолжить писать программу, сверху вашего блокнота нажмите на + Код:
Под первой ячейкой у вас будет создана новая, пустая:
Добавьте новую ячейку с кодом и вставьте в него следующий код:
1 |
from google.colab import drive |
Он подключает пакет для работы Colab с Google Диском. В Colab это будет выглядеть так:
Вновь добавьте новую ячейку с кодом и вставьте в него следующий код:
1 |
drive.mount("/content/drive", force_remount=True) |
Данная строка позволяет импортировать ваши файлы из Google Drive в проект Colab, чтобы потом к ним можно было обращаться в программе. А поскольку на предыдущем шаге вы загрузили свой приватный JSON ключ на Диск, который нам понадобится в составлении запроса к Data API (GA4), запустите ячейку. Вам откроется новое окно, в котором Google попросит вам подключиться к Диску. Сделайте это:
Выбрав свою учетную запись Gmail, предоставьте приложению Google Drive все необходимые разрешения:
В завершение нажмите кнопку Разрешить. После этого код успешно будет выполнен, все всплывающие окна закроются, а в вашем проекте в Colab, если вы нажмете на иконку папки в левом углу страницы, отобразиться папка drive, в которой будут размещены все файлы с вашего Диска, в том числе и загруженный ранее приватный ключ:
Найдите в списке ваш приватный ключ и нажмите на него правой кнопкой мыши. Выберите пункт Скопировать путь:
Как и прежде, создайте новую ячейку с кодом с помощью + Код. Добавьте в нее две строчки кода и запустите ячейку:
1 2 |
import os os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="путь_к_приватному_файлу.json" |
, где вместо путь_к_приватному_файлу.json вы укажете тот путь, который скопировали с предыдущего шага. Затем запустите ячейку с кодом.
В Colab это будет выглядеть так:
Переменная, чье значение присваивается Python извне, называют переменной окружения. Как правило, ее устанавливают в командной строке перед тем, как обратиться к исполняемому файлу Python. После этого ОС позволяет программе Python получать доступ к такой переменной.
Переменные окружения в Python необходимы для гибкости программы. Благодаря им, пользователь получает возможность менять нужные параметры перед выполнением программы. Программа же, в свою очередь, может просматривать изменяемые параметры, динамически подстраивая свое поведение. Т.е. нет необходимости модифицировать код. Такое применение переменных окружения будет называться настройкой программы.
Алгоритм, по которому проходит установка переменных окружения, напрямую зависит от платформы. Поэтому следует использовать встроенный модуль OS компании Python для считывания переменных. Функции этого модуля позволяют взаимодействовать с операционной системой вне зависимости от ее платформы.
Для доступа к таким переменным в Python используется объект os.environ - это словарь, в котором хранятся все переменные окружения программы, а GOOGLE_APPLICATION_CREDENTIALS - это переменная среды, которую нужно задать, чтобы указать расположение вашего приватного ключа JSON. Перед использованием словаря, конечно же, требуется импортировать сам пакет os с помощью команды import os.
Построение воронок
Теперь построим саму воронку. Для этого необходимо использовать метод runFunnelReport. В официальной документации на GitHub опубликованы примеры различных методов, в числе которых есть и Исследование воронки (run_funnel_report).
Фрагменты кодов в этих файлах можно взять за основу для построения своих собственных воронок. Их разновидностей великое множество, все зависит от отрасли и пользовательских путей на вашем сайте. На GitHub от Google в run_funnel_report.py размещена стандартная воронка, состоящая из нескольких шагов:
- первое открытие/посещение (события first_open или first_visit);
- пользователи из органики (фильтр по полю firstUserMedium содержит organic);
- начало сессии (событие session_start);
- просмотр экрана или страницы (события screen_view или page_view);
- покупка (события purchase или in_app_purchase);
В качестве примера я буду использовать именно их, без изменений. Поэтому скопируйте нижеприведенный код и вставьте его в новую ячейку вашей программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
from google.analytics.data_v1alpha import AlphaAnalyticsDataClient from google.analytics.data_v1alpha.types import ( DateRange, Dimension, Funnel, FunnelBreakdown, FunnelEventFilter, FunnelFieldFilter, FunnelFilterExpression, FunnelFilterExpressionList, FunnelStep, RunFunnelReportRequest, StringFilter, ) def run_sample(): property_id = "GA4-PROPERTY-ID" # Идентификатор ресурса Google Analytics 4 run_funnel_report(property_id) def run_funnel_report(property_id="GA4-PROPERTY-ID"): client = AlphaAnalyticsDataClient() request = RunFunnelReportRequest( property=f"properties/{property_id}", date_ranges=[DateRange(start_date="2024-11-01", end_date="2024-11-30")], funnel_breakdown=FunnelBreakdown( breakdown_dimension=Dimension(name="deviceCategory") ), funnel=Funnel( steps=[ FunnelStep( name="First open/visit", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="first_open" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="first_visit" ) ), ] ) ), ), FunnelStep( name="Organic visitors", filter_expression=FunnelFilterExpression( funnel_field_filter=FunnelFieldFilter( field_name="firstUserMedium", string_filter=StringFilter( match_type=StringFilter.MatchType.CONTAINS, case_sensitive=False, value="organic", ), ) ), ), FunnelStep( name="Session start", filter_expression=FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="session_start" ) ), ), FunnelStep( name="Screen/Page view", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="screen_view" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="page_view" ) ), ] ) ), ), FunnelStep( name="Purchase", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="purchase" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="in_app_purchase" ) ), ] ) ), ), ] ), ) response = client.run_funnel_report(request) print_run_funnel_report_response(response) |
Поскольку вы скопировали пример кода из GitHub, то в нем нужно изменить Идентификатор ресурса (GA4-PROPERTY-ID) на свой собственный. Найти его можно в интерфейсе Google Analytics 4, перейдя в раздел Администратор – Настройки ресурса - Информация о ресурсе. В правом верхнем углу скопируйте значение идентификатора ресурса:
Его вы так же можете найти в поиске Google Analytics 4 по аккаунтам и ресурсам. Идентификатор ресурса будет отображаться под его названием:
Вставьте его в скопированном коде в поле property_id в двух местах:
В самом запросе задайте значения start_date (начальная дата) и end_date (конечная дата), чтобы построить воронку за нужные даты. Например, за ноябрь 2024 года:
- start_date="2024-11-01"
- end_date="2024-11-30"
В этом коде задан каждый шаг воронки отдельно, добавлены соответствующие события и фильтры (используются фильтры воронки FunnelFilterExpression и FunnelFilterExpressionList). В funnel_breakdown задается параметр для разбивки данных. По умолчанию - это срез по типу устройства (deviceCategory). Точно так же, как это выбрано в Исследовании воронки в интерфейсе Google Analytics 4.
В funnel определяются шаги воронки, каждый из которых включает фильтры для различных событий, таких как:
- First open/visit (события first_open или first_visit);
- Organic visitors (фильтр по полю firstUserMedium содержит organic);
- Session start (событие session_start);
- Screen/Page view (события screen_view или page_view);
- Purchase (события purchase или in_app_purchase);
Запустив только этот код в ячейке, никакого результата вы не получите, так как программа еще до конца не готова. В качестве первой итерации я предлагаю преобразовать данные в понятный формат и сохранить их в формате CSV. Для этого воспользуйтесь следующим кодом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# Преобразование и выгрузка данных таблицы в CSV import pandas as pd import csv from google.analytics.data_v1alpha import AlphaAnalyticsDataClient from google.analytics.data_v1alpha.types import ( DateRange, Dimension, Funnel, FunnelBreakdown, FunnelEventFilter, FunnelFieldFilter, FunnelFilterExpression, FunnelFilterExpressionList, FunnelStep, RunFunnelReportRequest, StringFilter, ) def run_sample(): property_id = "GA4-PROPERTY-ID" # Идентификатор ресурса Google Analytics 4 run_funnel_report(property_id) def run_funnel_report(property_id="GA4-PROPERTY-ID"): client = AlphaAnalyticsDataClient() request = RunFunnelReportRequest( property=f"properties/{property_id}", date_ranges=[DateRange(start_date="2024-11-01", end_date="2024-11-30")], funnel_breakdown=FunnelBreakdown( breakdown_dimension=Dimension(name="deviceCategory") ), funnel=Funnel( steps=[ FunnelStep( name="First open/visit", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="first_open" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="first_visit" ) ), ] ) ), ), FunnelStep( name="Organic visitors", filter_expression=FunnelFilterExpression( funnel_field_filter=FunnelFieldFilter( field_name="firstUserMedium", string_filter=StringFilter( match_type=StringFilter.MatchType.CONTAINS, case_sensitive=False, value="organic", ), ) ), ), FunnelStep( name="Session start", filter_expression=FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="session_start" ) ), ), FunnelStep( name="Screen/Page view", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="screen_view" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="page_view" ) ), ] ) ), ), FunnelStep( name="Purchase", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="purchase" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="in_app_purchase" ) ), ] ) ), ), ] ), ) response = client.run_funnel_report(request) print(response) transform_response(response) def transform_response(api_response): dimension_headers = [header.name for header in api_response.funnel_table.dimension_headers] metric_headers = [header.name for header in api_response.funnel_table.metric_headers] dimensions = [] metrics = [] for i in range(len(dimension_headers)): dimensions.append([row.dimension_values[i].value for row in api_response.funnel_table.rows]) for i in range(len(metric_headers) // 2): metrics.append([row.metric_values[i].value for row in api_response.funnel_table.rows]) headers = dimension_headers + metric_headers[:len(metric_headers) // 2] data = dimensions + metrics df = pd.DataFrame(data).transpose() df.columns = headers df.to_csv("funnel_data.csv", index=False, quoting=csv.QUOTE_NONNUMERIC) if __name__ == "__main__": run_sample() |
Этот код формирует запрос на получение данных для соответствующих шагов воронки, а затем сохраняет ответ в переменной. Поскольку Data API Google Analytics 4 отдает результат в виде объекта (object), нам необходимо осуществить дополнительное преобразования. Для этого используется функция transform_response(api_response). С помощью нее извлекаются заголовки параметров и показателей, создаются списки для хранения значений, а затем все полученное с помощью библиотеки pandas преобразуется в датафрейм (DataFrame) и сохраняется в файле CSV с именем funnel_data.csv. Его можно изменить на свое собственное.
Запустив этот код, вы должны увидеть новый сохраненный файл в формате CSV:
Скачайте его к себе, выбрав соответствующий пункт меню:
А затем откройте его у себя на компьютере. Например, в Notepad++:
Как видите, мы получили данные по всем шагам воронки. В таблице присутствуют следующие поля:
- funnelStepName - шаги воронки, заданные в запросе;
- deviceCategory - разбивка по типу устройства (RESERVED_TOTAL - общее количество). Это позволяет вам анализировать, как поведение пользователей и их конверсия различается на разных устройствах;
- activeUsers - показатель Активные пользователи (Active Users). Данная метрика дает представление об общей активности и вовлеченности пользователей;
- funnelStepCompletionRate - метрика вычисляет процент пользователей, успешно завершивших определенный шаг в воронке, от общего числа пользователей, которые вошли в этот шаг. Она помогает вам измерить эффективность каждого этапа в последовательности (так называемый Коэффициент завершения);
- funnelStepAbandonments - показатель отображает количество пользователей, которые вошли на определенный шаг в воронке, но не перешли на следующий шаг или не завершили воронку. Она помогает обнаружить «узкие места» в путях пользователей (так называемые Прерывания);
- funnelStepAbandonmentRate - метрика вычисляет процент пользователей, которые отказались от определенного шага в воронке, от общего числа пользователей, которые вошли на этот шаг. Она дает представление об относительном уровне прерывания (так называемый Коэффициент прерывания = 100% - Коэффициент завершения).
Вот как выглядят те же самые данные, но в интерфейсе Google Analytics 4:
Визуализация данных
После того, как мы научились выгружать и преобразовывать данные по воронкам GA4, пришло время визуализировать все это с помощью Python. Для этого воспользуемся библиотекой Plotly.
Итоговый код, который вам необходимо полностью вставить в свою программу и запустить, выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# Визуализация данных (столбчатая диаграмма и таблица с данными) import csv import pandas as pd import plotly.graph_objects as go import plotly.figure_factory as ff from google.analytics.data_v1alpha import AlphaAnalyticsDataClient from google.analytics.data_v1alpha.types import ( DateRange, Dimension, Funnel, FunnelBreakdown, FunnelEventFilter, FunnelFieldFilter, FunnelFilterExpression, FunnelFilterExpressionList, FunnelStep, RunFunnelReportRequest, StringFilter ) def run_sample(): property_id = "GA4-PROPERTY-ID" run_funnel_report(property_id) def run_funnel_report(property_id): client = AlphaAnalyticsDataClient() request = RunFunnelReportRequest( property=f"properties/{property_id}", date_ranges=[DateRange(start_date="2024-11-01", end_date="2024-11-30")], funnel_breakdown=FunnelBreakdown( breakdown_dimension=Dimension(name="deviceCategory") ), funnel=Funnel( steps=[ FunnelStep( name="First open/visit", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="first_open" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="first_visit" ) ), ] ) ), ), FunnelStep( name="Organic visitors", filter_expression=FunnelFilterExpression( funnel_field_filter=FunnelFieldFilter( field_name="firstUserMedium", string_filter=StringFilter( match_type=StringFilter.MatchType.CONTAINS, case_sensitive=False, value="organic", ), ) ), ), FunnelStep( name="Session start", filter_expression=FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="session_start" ) ), ), FunnelStep( name="Screen/Page view", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="screen_view" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="page_view" ) ), ] ) ), ), FunnelStep( name="Purchase", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="purchase" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="in_app_purchase" ) ), ] ) ), ), ] ), ) response = client.run_funnel_report(request) print(response) visualize_funnel(response) def visualize_funnel(response): df = transform_response(response) steps = [] values = [] for row in response.funnel_visualization.rows: steps.append(row.dimension_values[0].value) values.append(int(row.metric_values[0].value)) fig = go.Figure(go.Bar( x=steps, y=values, text=values, textposition='auto' )) fig.update_layout(title_text='Исследование воронки', title_x=0.5) fig.show() table_fig = ff.create_table(df, index=True) table_fig.show() def transform_response(api_response): dimension_headers = [header.name for header in api_response.funnel_table.dimension_headers] metric_headers = [header.name for header in api_response.funnel_table.metric_headers] dimensions = [] metrics = [] for i in range(len(dimension_headers)): dimensions.append([row.dimension_values[i].value for row in api_response.funnel_table.rows]) for i in range(len(metric_headers) // 2): metrics.append([row.metric_values[i].value for row in api_response.funnel_table.rows]) headers = dimension_headers + metric_headers[:len(metric_headers) // 2] data = dimensions + metrics df = pd.DataFrame(data).transpose() df.columns = headers return df if __name__ == "__main__": run_sample() |
Не забудьте изменить все данные на свои (и идентификатор ресурса, и диапазон дат, и шаги воронки, и параметр разбивки). Думаю, что сам код не требует пояснений, тем более, что:
А. большую его часть мы разобрали ранее;
Б. любой чат-бот ИИ сможет расшифровать вам любую строчку кода, каждую функцию скрипта, а также подробно описать его функциональность.
Если кратко, то с помощью Data API мы сначала запрашиваем данные по воронке, потом преобразуем ответ в датафрейм, затем визуализируем данные и выводим результат на экран в виде столбчатой диаграммы по всем шагам воронки, а ниже - таблицу с подробной статистикой и параметром разбивки. Ровно то, что присутствует в интерфейсе вашего ресурса Google Analytics 4 в Исследовании воронки.
Визуализация шагов воронки:
И подробная таблица с данными:
Если сравнить результат с данными Исследования, то цифры +/- должны сойтись.
Примечание: отчеты, Исследования, Data API для Google Analytics 4 и экспорт данных в Google BigQuery отображают данные разными способами. В официальной документации Google представлена таблица, в которой показаны различия между доступными сведениями и ограничениями каждого из методов.
Да, в интерфейсе GA4 данные выглядят иначе, они уже преобразованы и отформатированы, визуально приятнее (например, 58,4% в интерфейсе vs 0.5836105613340633 в API). Если вы обладаете навыками программирования, то вам не составит труда добавить несколько дополнительных строчек кода, чтобы преобразовать цифры в удобочитаемый формат, добавить знак % и указать количество символов после запятой. Но все это выходит за рамки данного руководства, постарайтесь здесь, пожалуйста, сами.
Как и обещал, в конце материала прикладываю ссылку на итоговую программу в Colab. Успехов!