Mais cedo ou mais tarde, quase qualquer empresa enfrenta o problema de desenvolver análises da web. Isso não significa que você só precisa colocar o código do Google Analytics no site. Você precisa encontrar um benefício nos dados recebidos. Neste post, mostrarei como fazê-lo da maneira mais eficiente possível, gastando pouco (pelos padrões de serviços especializados) dinheiro.

Meu nome é Andrey Kolesnichenko, sou o chefe do departamento de análise da web da empresa fintech ID Finance. Na empresa, monitoramos constantemente muitos indicadores, antes de tudo, as conversões em diferentes etapas são importantes para nós. No começo, todos os relatórios eram apenas para o Google Analytics. Para calcular a conversão, segmentamos os usuários e encontramos a participação de cada segmento.
Em seguida, passamos a gerar relatórios no Google Docs. Escrevemos sobre isso
anteriormente em Habré .
Agora estamos no próximo estágio - todos os relatórios são baseados em dados brutos.
Eles são importantes para qualquer analista: trabalhando com relatórios agregados do Google Analytics, não é possível entender profundamente o comportamento do usuário, o que afeta muito a qualidade das análises.
Para obter esses dados, você pode pagar o Google Analytics Premium, cujo custo é de vários milhões de rublos por ano. Nesse caso, obtemos os dados brutos no BigQuery. Existem também vários serviços que duplicam os dados do Google Analytics e os colocam no BigQuery. Mas você pode fazer isso sozinho e de uma maneira menos dispendiosa. Vamos começar.
Preparação de front-end
Você já tem um site e configurou o Google Analytics. Agora, precisamos fazer pequenas alterações para começar a coletar dados brutos. A idéia principal é enviar o ID do cliente do Google e fazer o upload dos dados nessas seções.
Primeiro, precisamos criar três novas dimensões personalizadas na interface do Google Analytics.

É no contexto dessas dimensões personalizadas que baixaremos relatórios do Google Analytics
- ClientID - identificador do usuário
- SessionID - identificador da sessão
- HitID - identificador de ocorrência
Em seguida, devemos adicionar essas variáveis a todos os hits enviados ao Google Analytics.
ga(function (tracker) { var clientId = tracker.get('clientId'); var timestamp = new Date().getTime(); ga('set', 'dimension1', clientId); ga('set', 'dimension2', clientId + '_' + timestamp); ga('set', 'dimension3', clientId + '_' + timestamp); });
Ao enviar cada ocorrência, a dimensão2 e a dimensão3 devem ser regeneradas. Dimension3 é um identificador de ocorrência, portanto deve ser exclusivo. Se você usa o GTM, o princípio de adicionar dimensão personalizada é o mesmo.
Nossa ClientID é configurada no nível do usuário, para que possamos identificar uma pessoa exclusivamente por ela. O SessionID é configurado no nível da sessão, de acordo com ele, podemos determinar a sessão do usuário. Você pode perceber que enviamos SessionIDs diferentes a cada vez, mas o Google mantém apenas um, o último valor. Este valor determinará a sessão.
A infraestrutura
Depois de configurar o front end, precisamos configurar o upload de dados brutos.
- Enviaremos dados para o Google BigQuery. Para fazer isso, precisaremos criar um projeto no Google Cloud Platform . Mesmo se você não usar o BigQuery, ainda precisará criar um projeto para baixar dados pela API. Quem usa os serviços do Google Cloud desfrutará de um bônus agradável de US $ 300 ao vincular um cartão. Para as necessidades de análise, um pequeno projeto é suficiente para pelo menos seis meses de uso gratuito.
- Na página console.cloud.google.com/iam-admin/serviceaccounts , você precisa criar uma chave de serviço com a qual usaremos a API do Google Analytics e o Google BigQuery.
- Então você precisa conceder a este e-mail acesso à leitura do Google Analytics.
- Acesse console.cloud.google.com/apis/library/analytics.googleapis.com e ative a API do Google Analytics
- Como faremos o download de dados todos os dias, precisamos de um servidor para executar nossas tarefas. Para isso, usaremos o Google Compute Engine
O fluxo de dados fica assim:

Exportar dados através da API do Google Analytics
O Google Analytics possui uma API que permite baixar relatórios. Baixaremos relatórios no contexto de nossos parâmetros. Todos os scripts são escritos em python, vou falar sobre as principais coisas:
Exportar dados do Google Analytics para um arquivo from apiclient.discovery import build import os import unicodecsv as csv from googleapiclient.errors import HttpError import time SCOPES = ['https://www.googleapis.com/auth/analytics.readonly'] KEY_FILE_LOCATION = 'my_key_file.p12' SERVICE_ACCOUNT_EMAIL = 'service_account_email@my-google-cloud-project.iam.gserviceaccount.com' class ApiGA(): def __init__(self, scopes=SCOPES, key_file_location=KEY_FILE_LOCATION, service_account_email=SERVICE_ACCOUNT_EMAIL, version='v4'): credentials = ServiceAccountCredentials.from_p12_keyfile( service_account_email, key_file_location, scopes=scopes) self.handler = build('analytics', version, credentials=credentials) def downloadReport(self, view_id, dim_list, metrics_list, date, page, end_date=None, filters=None): if not end_date: end_date = date body = { 'reportRequests': [ { 'viewId': view_id, 'dateRanges': [{'startDate': date, 'endDate': end_date}], 'dimensions': dim_list, 'metrics': metrics_list, 'includeEmptyRows': True, 'pageSize': 10000, 'samplingLevel': 'LARGE' }]} if page: body['reportRequests'][0]['pageToken'] = page if filters: body['reportRequests'][0]['filtersExpression'] = filters while True: try: return self.handler.reports().batchGet(body=body).execute() except HttpError: time.sleep(0.5) def getData(self, view_id, dimensions, metrics, date, filename='raw_data.csv', end_date=None, write_mode='wb', filters=None): dim_list = map(lambda x: {'name': 'ga:'+x}, dimensions) metrics_list = map(lambda x: {'expression': 'ga:'+x}, metrics) file_data = open(filename, write_mode) writer = csv.writer(file_data) page = None while True: response = self.downloadReport(view_id, dim_list, metrics_list, date, page, end_date=end_date, filters=filters) report = response['reports'][0] rows = report.get('data', {}).get('rows', []) for row in rows: dimensions = row['dimensions'] metrics = row['metrics'][0]['values'] writer.writerow(dimensions+metrics) if 'nextPageToken' in report: page = report['nextPageToken'] else: break file_data.close()
O script baixa os dados por meio da API e grava no nome do arquivo para a data e data. View_id - visualize o número no Google Analytics:
filename = 'raw_data.csv' date = '2019-01-01' view_id = '123123123' ga = ApiGA() dims = ['dimension1', 'dimension2', 'source', 'medium', 'campaign', 'keyword', 'adContent', 'userType'] metrics = ['hits', 'pageviews', 'totalEvents', 'transactions', 'screenviews'] ga.getData(view_id, dims, metrics, date, filename)
Em seguida, carregamos os dados recebidos no BigQuery from google.cloud import bigquery client = bigquery.Client() schema = [ bigquery.SchemaField('clientId', 'STRING'), bigquery.SchemaField('sessionId', 'STRING'), bigquery.SchemaField('source', 'STRING'), bigquery.SchemaField('medium', 'STRING'), bigquery.SchemaField('campaign', 'STRING'), bigquery.SchemaField('keyword', 'STRING'), bigquery.SchemaField('adContent', 'STRING'), bigquery.SchemaField('userType', 'STRING'), bigquery.SchemaField('hits', 'INTEGER'), bigquery.SchemaField('pageviews', 'INTEGER'), bigquery.SchemaField('totalEvents', 'INTEGER'), bigquery.SchemaField('transactions', 'INTEGER'), bigquery.SchemaField('screenviews', 'INTEGER') ] table_id = 'raw.sessions' table = bigquery.Table(table_id, schema=schema) table = client.create_table(table) dataset_ref = client.dataset(dataset_id) table_ref = dataset_ref.table(table_id) job_config = bigquery.LoadJobConfig() job_config.source_format = bigquery.SourceFormat.CSV job_config.skip_leading_rows = 0 job_config.autodetect = True with open(filename, "rb") as source_file: job = client.load_table_from_file(source_file, table_ref, job_config=job_config) job.result()
Para obter todos os hits, faça o download dos dados no contexto de dimension2, dimension3:
dims = ['dimension2', 'dimension13', 'pagePath', 'hostname', 'dateHourMinute'] metrics = ['hits', 'entrances', 'exits'] …. dims = ['dimension3', 'eventCategory', 'eventAction', 'eventLabel'] metrics = ['eventValue'] ….
No final, combinamos todos os dados entre si com uma consulta sql. Acontece algo semelhante a:

Use
Configuramos a coleta de dados brutos no BigQuery, apenas precisamos preparar relatórios para nossas conversões. Eles são feitos consultas sql simples. Para gerar relatórios, usamos o Tableau e o Google Data Studio.
Além disso, temos a oportunidade de enriquecer dados do google analytics com dados de um banco de dados interno que contém informações sobre aplicativos, problemas, inadimplências, pagamentos etc.
Além disso, o Google Cloud permite que você configure simplesmente o fluxo de dados em tempo real, se necessário.
O fluxograma completo para relatórios analíticos agora se parece com o seguinte:

Como resultado, fomos capazes de:
- Torne os relatórios mais flexíveis e convenientes.
- Reduza o tempo para resolver problemas de conversão
- Crie atribuição multicanal para marketing. Isso nos permite distribuir o valor do aplicativo não apenas pela última fonte, mas também por todas as outras fontes que trouxeram o usuário ao site.
- Combine dados do usuário em um só lugar