عاجلاً أم آجلاً ، تواجه أي شركة تقريبًا مشكلة تطوير تحليلات الويب. هذا لا يعني أنك تحتاج فقط إلى وضع رمز Google Analytics على الموقع - تحتاج إلى العثور على فائدة في البيانات المستلمة. سوف أخبرك في هذا المنشور بكيفية القيام بذلك بأكبر قدر ممكن من الكفاءة ، وإنفاق القليل من المال (حسب معايير الخدمات المتخصصة).

اسمي Andrey Kolesnichenko ، أنا رئيس قسم تحليلات الويب بشركة ID Finance المالية. في الشركة ، نراقب باستمرار العديد من المؤشرات ، أولاً وقبل كل شيء ، التحويلات في خطوات مختلفة مهمة بالنسبة لنا. في البداية ، كانت جميع التقارير موجهة إلى Google Analytics فقط. من أجل حساب التحويل ، قمنا بتقسيم المستخدمين ووجدنا حصة كل شريحة.
ثم انتقلنا إلى إعداد التقارير في محرّر مستندات Google. كتبنا عن ذلك في
وقت سابق على حبري .
نحن الآن في المرحلة التالية - تستند جميع التقارير إلى بيانات أولية.
إنها مهمة لأي محلل: من خلال العمل مع تقارير Google Analytics المجمعة ، لا يمكن فهم سلوك المستخدم بعمق ، مما يؤثر بشكل كبير على جودة التحليلات.
للحصول على هذه البيانات ، يمكنك دفع Google Analytics Premium ، التي تبلغ تكلفتها عدة ملايين روبل في السنة. في هذه الحالة ، نحصل على البيانات الأولية في BigQuery. هناك أيضًا العديد من الخدمات التي تكرر بيانات Google Analytics وتضعها في BigQuery. ولكن يمكنك أن تفعل ذلك بنفسك وبطريقة أقل تكلفة. لنبدأ.
إعداد الواجهة الأمامية
لديك بالفعل موقع وقمت بتكوين Google Analytics. نحتاج الآن إلى إجراء تغييرات صغيرة لبدء جمع البيانات الأولية. الفكرة الرئيسية هي إرسال معرف عميل Google ثم تحميل البيانات في هذه الأقسام.
أولاً ، نحتاج إلى إنشاء ثلاثة أبعاد مخصصة جديدة في واجهة Google Analytics.

في سياق هذه الأبعاد المخصصة ، سنقوم بتنزيل التقارير من Google Analytics
- ClientID - معرف المستخدم
- SessionID - معرف الجلسة
- HitID - معرف ضرب
بعد ذلك ، يجب أن نضيف هذه المتغيرات إلى جميع الزيارات التي يتم إرسالها إلى 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); });
عند إرسال كل نتيجة ، يجب إعادة تجديد البعد 2 والبعد 3. إن Dimension3 هو معرف نجاح ، لذلك يجب أن يكون فريدًا. إذا كنت تستخدم GTM ، فإن مبدأ إضافة البعد المخصص هو نفسه.
يتم تكوين ClientID الخاص بنا على مستوى المستخدم ، حتى نتمكن من التعرف على شخص فريد به. تم تكوين SessionID على مستوى الجلسة ، وفقا لذلك يمكننا تحديد جلسة المستخدم. قد تلاحظ أننا نرسل SessionIDs مختلفة في كل مرة ، ولكن Google ستحتفظ بواحد فقط ، القيمة الأخيرة. هذه القيمة ستحدد الجلسة.
البنية التحتية
بعد إعداد الواجهة الأمامية ، نحتاج إلى تهيئة تحميل البيانات الأولية.
- سنقوم بتحميل البيانات إلى Google BigQuery. للقيام بذلك ، سنحتاج إلى إنشاء مشروع في Google Cloud Platform . حتى إذا كنت لن تستخدم BigQuery ، فلا تزال بحاجة إلى إنشاء مشروع لتنزيل البيانات بواسطة API. سيتمتع أولئك الذين يستخدمون خدمات Google Cloud بمكافأة رائعة بقيمة 300 دولار عند ربط البطاقة. لتلبية احتياجات التحليلات ، مشروع صغير يكفي لمدة ستة أشهر على الأقل من الاستخدام المجاني.
- في صفحة console.cloud.google.com/iam-admin/serviceaccounts ، تحتاج إلى إنشاء مفتاح خدمة نستخدم به Google Analytics API و Google BigQuery.
- ثم تحتاج إلى منح هذا البريد حق الوصول إلى Google Analytics.
- انتقل إلى console.cloud.google.com/apis/library/analytics.googleapis.com وقم بتمكين Google Analytics API
- بما أننا سنقوم بتنزيل البيانات كل يوم ، نحتاج إلى خادم لأداء مهامنا. لهذا نستخدم محرك حساب Google
يشبه دفق البيانات هذا:

تصدير البيانات من خلال Google Analytics API
يحتوي Google Analytics على واجهة برمجة تطبيقات تتيح لك تنزيل التقارير. سنقوم بتنزيل التقارير في سياق المعلمات لدينا. تتم كتابة جميع النصوص في بيثون ، وسأخبرك عن الأشياء الرئيسية:
تصدير البيانات من Google Analytics إلى ملف 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()
يقوم البرنامج النصي بتنزيل البيانات عبر واجهة برمجة التطبيقات ويكتب في اسم ملف الملف لتاريخ التاريخ. View_id - رقم العرض في تحليلات جوجل:
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)
ثم نقوم بتحميل البيانات المستلمة في 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()
للحصول على جميع الزيارات ، قم بتنزيل البيانات في سياق البعد 2 ، البعد 3:
dims = ['dimension2', 'dimension13', 'pagePath', 'hostname', 'dateHourMinute'] metrics = ['hits', 'entrances', 'exits'] …. dims = ['dimension3', 'eventCategory', 'eventAction', 'eventLabel'] metrics = ['eventValue'] ….
في النهاية ، نجمع كل البيانات مع بعضها البعض مع استعلام sql. اتضح شيئًا مشابهًا لما يلي:

استخدام
لقد أنشأنا مجموعة بيانات خام في BigQuery ، علينا فقط إعداد تقارير لتحويلاتنا. أنها مصنوعة استعلامات SQL بسيطة. بالنسبة للتقارير ، نستخدم Tableau و Google Data Studio.
بالإضافة إلى ذلك ، لدينا الفرصة لإثراء البيانات من تحليلات google ببيانات من قاعدة بيانات داخلية تحتوي على معلومات حول التطبيقات ، والمشكلات ، وحالات التأخير ، والمدفوعات ، إلخ.
بالإضافة إلى ذلك ، يتيح لك Google Cloud إعداد دفق البيانات في الوقت الفعلي ، إذا لزم الأمر.
يبدو المخطط الانسيابي الكامل لإعداد التقارير التحليلية كما يلي:

نتيجة لذلك ، تمكنا من:
- اجعل التقارير أكثر مرونة وراحة.
- تقليل الوقت لحل مشاكل التحويل
- بناء إسناد متعدد القنوات للتسويق. يسمح لنا ذلك بتوزيع قيمة التطبيق ليس فقط بواسطة المصدر الأخير ، ولكن أيضًا بواسطة جميع المصادر الأخرى التي جلبت المستخدم إلى الموقع.
- الجمع بين بيانات المستخدم في مكان واحد