Cómo configurar una infraestructura de análisis web por $ 100 por mes

Tarde o temprano, casi cualquier empresa se enfrenta al problema del desarrollo de análisis web. Esto no significa que solo necesite colocar el código de Google Analytics en el sitio; debe encontrar un beneficio en los datos recibidos. En esta publicación, le diré cómo hacerlo de la manera más eficiente posible, gastando poco dinero (según los estándares de los servicios especializados).

imagen

Mi nombre es Andrey Kolesnichenko, soy el jefe del departamento de análisis web de la empresa fintech ID Finance. En la compañía, monitoreamos constantemente muchos indicadores, en primer lugar, las conversiones en diferentes pasos son importantes para nosotros. Al principio, todos los informes eran solo para Google Analytics. Para calcular la conversión, segmentamos a los usuarios y encontramos la parte de cada segmento.

Luego pasamos a informar en Google Docs. Escribimos sobre esto antes en Habré .
Ahora estamos en la siguiente etapa: todos los informes se basan en datos sin procesar.
Son importantes para cualquier analista: al trabajar con informes agregados de Google Analytics, no es posible comprender profundamente el comportamiento del usuario, lo que afecta en gran medida la calidad de la analítica.
Para obtener dichos datos, puede pagar Google Analytics Premium, cuyo costo es de varios millones de rublos por año. En este caso, obtenemos los datos sin procesar en BigQuery. También hay varios servicios que duplican los datos de Google Analytics y los colocan en BigQuery. Pero puede hacerlo usted mismo y de una manera menos costosa. Empecemos

Preparación frontal


Ya tienes un sitio y has configurado Google Analytics. Ahora tenemos que hacer pequeños cambios para comenzar a recopilar datos sin procesar. La idea principal es enviar el ID de cliente de Google y luego cargar los datos en estas secciones.

Primero necesitamos crear tres nuevas dimensiones personalizadas en la interfaz de Google Analytics.

imagen

En el contexto de estas dimensiones personalizadas, descargaremos informes de Google Analytics

  • ClientID - identificador de usuario
  • SessionID - identificador de sesión
  • HitID: identificador de hit

Luego debemos agregar estas variables a todos los resultados enviados a 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); }); 

Al enviar cada hit, dimension2 y dimension3 deben regenerarse. Dimension3 es un identificador de hit, por lo que debe ser único. Si usa GTM, el principio de agregar una dimensión personalizada es el mismo.

Nuestro ClientID está configurado a nivel de usuario, por lo que podemos identificar de manera única a una persona por él. SessionID se configura a nivel de sesión, de acuerdo con él podemos determinar la sesión del usuario. Puede notar que enviamos diferentes SessionID cada vez, pero Google solo mantendrá un último valor. Este valor determinará la sesión.

La infraestructura


Después de configurar el front end, necesitamos configurar la carga de datos sin procesar.

  1. Subiremos datos a Google BigQuery. Para hacer esto, necesitaremos crear un proyecto en Google Cloud Platform . Incluso si no va a utilizar BigQuery, aún necesita crear un proyecto para descargar datos por API. Aquellos que usan los servicios de Google Cloud disfrutarán de un agradable bono de $ 300 al vincular una tarjeta. Para las necesidades de análisis, un pequeño proyecto es suficiente para al menos seis meses de uso gratuito.
  2. En la página console.cloud.google.com/iam-admin/serviceaccounts , debe crear una clave de servicio con la que usaremos la API de Google Analytics y Google BigQuery.
  3. Entonces debe dar acceso a este correo para leer Google Analytics.
  4. Vaya a console.cloud.google.com/apis/library/analytics.googleapis.com y habilite la API de Google Analytics
  5. Como descargaremos datos todos los días, necesitamos un servidor para realizar nuestras tareas. Para esto usaremos Google Compute Engine

El flujo de datos se ve así:

imagen

Exportar datos a través de la API de Google Analytics


Google Analytics tiene una API que le permite descargar informes. Descargaremos informes en el contexto de nuestros parámetros. Todos los scripts están escritos en python, te contaré sobre las cosas principales:

Exportar datos de Google Analytics a un archivo
 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() 

El script descarga los datos a través de la API y escribe en el nombre del archivo para la fecha. View_id - ver número en 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) 

Luego cargamos los datos recibidos en 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 obtener todos los resultados, descargue los datos en el contexto de dimension2, dimension3:

 dims = ['dimension2', 'dimension13', 'pagePath', 'hostname', 'dateHourMinute'] metrics = ['hits', 'entrances', 'exits'] …. dims = ['dimension3', 'eventCategory', 'eventAction', 'eventLabel'] metrics = ['eventValue'] …. 

Al final, combinamos todos los datos entre sí con una consulta sql. Resulta algo similar a:

imagen

Uso


Hemos configurado la recopilación de datos sin procesar en BigQuery, solo tenemos que preparar informes para nuestras conversiones. Se hacen consultas SQL simples. Para los informes, utilizamos Tableau y Google Data Studio.

Además, tenemos la oportunidad de enriquecer datos de google analytics con datos de una base de datos interna que contiene información sobre aplicaciones, problemas, morosidad, pagos, etc.
Además, Google Cloud le permite configurar simplemente la transmisión de datos en tiempo real, si es necesario.

El diagrama de flujo completo para informes analíticos ahora se ve así:

imagen

Como resultado, pudimos:

  • Haga que la presentación de informes sea más flexible y conveniente.
  • Reduce el tiempo para resolver problemas de conversión
  • Cree atribuciones multicanal para marketing. Esto nos permite distribuir el valor de la aplicación no solo por la última fuente, sino también por todas las demás fuentes que llevaron al usuario al sitio.
  • Combina datos de usuario en un solo lugar

Source: https://habr.com/ru/post/457052/


All Articles