Cepat atau lambat, hampir semua perusahaan dihadapkan dengan masalah mengembangkan analisis web. Ini tidak berarti bahwa Anda hanya perlu meletakkan kode Google Analytics di situs - Anda perlu menemukan manfaat dalam data yang diterima. Dalam posting ini saya akan memberi tahu Anda bagaimana melakukannya seefisien mungkin, menghabiskan sedikit (dengan standar layanan khusus) uang.

Nama saya Andrey Kolesnichenko, saya adalah kepala departemen analisis web di perusahaan fintech ID Finance. Di perusahaan, kami terus-menerus memantau banyak indikator, pertama-tama, konversi pada langkah yang berbeda penting bagi kami. Pada awalnya, semua pelaporan hanya untuk Google Analytics. Untuk menghitung konversi, kami mengelompokkan pengguna dan menemukan bagian dari setiap segmen.
Lalu, kami beralih ke pelaporan di Google Documents. Kami menulis tentang hal itu
sebelumnya di Habré .
Sekarang kita berada pada tahap berikutnya - semua laporan didasarkan pada data mentah.
Mereka penting bagi analis mana pun: bekerja dengan laporan Google Analytics teragregasi, tidak mungkin untuk memahami secara mendalam perilaku pengguna, yang sangat memengaruhi kualitas analitik.
Untuk mendapatkan data tersebut, Anda dapat membayar Google Analytics Premium, yang biayanya beberapa juta rubel per tahun. Dalam hal ini, kami mendapatkan data mentah di BigQuery. Ada juga berbagai layanan yang menggandakan data Google Analytics dan memasukkannya ke BigQuery. Tetapi Anda dapat melakukannya sendiri dan dengan cara yang lebih murah. Mari kita mulai.
Persiapan Front-End
Anda sudah memiliki situs dan mengonfigurasi Google Analytics. Sekarang kita perlu melakukan perubahan kecil untuk mulai mengumpulkan data mentah. Gagasan utamanya adalah mengirim ID Klien Google dan kemudian mengunggah data di bagian ini.
Pertama, kita perlu membuat tiga dimensi khusus di antarmuka Google Analytics.

Dalam konteks dimensi khusus inilah kami akan mengunduh laporan dari Google Analytics
- ClientID - pengidentifikasi pengguna
- SessionID - pengidentifikasi sesi
- HitID - hit identifier
Maka kita harus menambahkan variabel-variabel ini ke semua klik yang dikirim ke 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); });
Saat mengirim setiap klik, dimensi2 dan dimensi3 harus dibuat ulang. Dimension3 adalah hit identifier, jadi itu harus unik. Jika Anda menggunakan GTM, maka prinsip menambahkan dimensi khusus adalah sama.
ClientID kami dikonfigurasikan pada tingkat Pengguna, sehingga kami dapat mengidentifikasi seseorang secara unik. SessionID dikonfigurasikan pada tingkat Sesi, sesuai dengan itu kita dapat menentukan sesi pengguna. Anda mungkin memperhatikan bahwa kami mengirim SessionID yang berbeda setiap kali, tetapi Google hanya akan menyimpan satu, nilai terakhir. Nilai ini akan menentukan sesi.
Infrastruktur
Setelah menyiapkan ujung depan, kita perlu mengonfigurasi unggahan data mentah.
- Kami akan mengunggah data ke Google BigQuery. Untuk melakukan ini, kita perlu membuat proyek di Google Cloud Platform . Bahkan jika Anda tidak akan menggunakan BigQuery, Anda masih perlu membuat proyek untuk mengunduh data dengan API. Mereka yang menggunakan layanan Google Cloud akan menikmati bonus menyenangkan $ 300 ketika menautkan kartu. Untuk kebutuhan analitik, proyek kecil sudah cukup untuk penggunaan gratis setidaknya enam bulan.
- Pada halaman console.cloud.google.com/iam-admin/serviceaccounts , Anda perlu membuat kunci layanan yang dengannya kami akan menggunakan Google Analytics API dan Google BigQuery.
- Maka Anda perlu memberikan akses surat ini ke Google Analytics.
- Buka console.cloud.google.com/apis/library/analytics.googleapis.com dan aktifkan API Google Analytics
- Karena kami akan mengunduh data setiap hari, kami memerlukan server untuk melakukan tugas kami. Untuk ini kita akan menggunakan Google Compute Engine
Aliran data terlihat seperti ini:

Ekspor data melalui Google Analytics API
Google Analytics memiliki API yang memungkinkan Anda mengunduh laporan. Kami akan mengunduh laporan dalam konteks parameter kami. Semua skrip ditulis dengan python, saya akan memberi tahu Anda tentang hal-hal utama:
Ekspor data dari Google Analytics ke file 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()
Script mengunduh data melalui API dan menulis ke nama file file untuk tanggal tanggal. View_id - lihat nomor di 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)
Lalu kami memuat data yang diterima ke 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()
Untuk mendapatkan semua klik, unduh data dalam konteks dimensional2, dimensional3:
dims = ['dimension2', 'dimension13', 'pagePath', 'hostname', 'dateHourMinute'] metrics = ['hits', 'entrances', 'exits'] …. dims = ['dimension3', 'eventCategory', 'eventAction', 'eventLabel'] metrics = ['eventValue'] ….
Pada akhirnya, kami menggabungkan semua data satu sama lain dengan kueri sql. Ternyata sesuatu yang mirip dengan:

Gunakan
Kami telah menyiapkan pengumpulan data mentah di BigQuery, kami hanya perlu menyiapkan laporan untuk konversi kami. Mereka dibuat query sql sederhana. Untuk pelaporan, kami menggunakan Tableau dan Google Data Studio.
Selain itu, kami memiliki kesempatan untuk memperkaya data dari google analytics dengan data dari basis data internal yang berisi informasi tentang aplikasi, masalah, kenakalan, pembayaran, dll.
Selain itu, Google Cloud memungkinkan Anda untuk mengatur streaming data secara realtime, jika perlu.
Bagan alur lengkap untuk pelaporan analitik sekarang terlihat seperti ini:

Sebagai hasilnya, kami dapat:
- Jadikan pelaporan lebih fleksibel dan nyaman.
- Kurangi waktu untuk menyelesaikan masalah konversi
- Bangun atribusi multi-saluran untuk pemasaran. Ini memungkinkan kami untuk mendistribusikan nilai aplikasi tidak hanya oleh sumber terakhir, tetapi juga oleh semua sumber lain yang membawa pengguna ke situs.
- Gabungkan data pengguna di satu tempat