كيفية توقع حركة البحث باستخدام Python و GA4
نشرت: 2021-04-26في أي استراتيجية تركز على تحسين محرك البحث (SEO) ، يعد تحليل البيانات أمرًا ضروريًا. هناك المزيد والمزيد من المتخصصين في هذا المجال الذين يختارون تطوير حياتهم المهنية في تحليل حركة البحث العضوية ، والتي لها في حد ذاتها سلوك وخصوصيات مختلفة تمامًا عن البقية: البحث المدفوع ، والبريد الإلكتروني ، والعضوية الاجتماعية ، والمباشرة ، وما إلى ذلك. هذا المعنى وبفضل مجموعة واسعة من الأدوات المتاحة اليوم ، نجح هذا النوع من الدراسات في التطور إلى درجة لا يمكن تصورها مقارنة بالسنوات القليلة الماضية.
ترجع هذه الخطوة الرئيسية إلى الأمام بشكل أساسي إلى ظهور منهجيات وتطورات جديدة سمحت لنا بإنشاء نماذج تحليلية دون الحاجة إلى الاعتماد على عمليات حسابية معقدة. نحن محظوظون لأن لدينا تقنيات وخوارزميات تم اختبارها بالفعل تحت تصرفنا وجاهزة لبدء العمل معها.
في المقالة أدناه ، سنركز على إنشاء نموذج تنبؤي لمجموعة من البيانات لسلسلة زمنية حيث يتم تعديل الاتجاه المحسوب وفقًا للتواتر الموسمي والتواتر السابق. وبشكل أكثر تحديدًا ، سوف نتوقع حركة البحث العضوية لممتلكاتنا من Google Analytics 4 (يشار إليها فيما يلي باسم GA4). هناك العديد من الخيارات لتنفيذ ذلك ، ولكن بالنسبة لهذه الحالة بالذات ، قررت تنفيذ التطوير بالكامل في Python.
يتكون النص الذي تستند إليه هذه المقالة من ثلاثة أجزاء متمايزة بشكل واضح:
- استخراج البيانات . كيفية استخدام GA4 API الجديد خطوة بخطوة لتجميع حركة البحث العضوية.
- نمذجة البيانات . استخدام نبي ، مكتبة مفتوحة المصدر على فيسبوك لعمل تنبؤات متسلسلة زمنية.
- تصور البيانات . إظهار تغييرات الاتجاه والتنبؤ النموذجي.
GA4 استخراج البيانات من خلال API الخاص به باستخدام Python
أول شيء نحتاج إلى معرفته عندما نتعامل مع Google Analytics Data API (GA4) هو أن GA4 هي حالة التطوير الخاصة به. كما هو مفصل من قبل Google على صفحتها ، فهي حاليًا في إصدار مبكر. على وجه التحديد ، اعتبارًا من تاريخ كتابة هذه المقالة ، لا تزال في المرحلة التجريبية.
وتجدر الإشارة إلى أنه تم نشر GA4 في 14 أكتوبر 2020 ، ولم تمر سوى بضعة أشهر. في الواقع ، سيتمكن أولئك الذين لديهم بالفعل موقع Universal Analytics والذين أنشأوا GA4 واحدًا جديدًا من الاستمرار في استخدام كلا الإصدارين جنبًا إلى جنب ، دون أي قيود. ليس معروفًا على وجه اليقين متى ستتوقف خصائص Universal Analytics عن العمل. على أي حال ، فإن توصيتي هي إنشاء خاصية جديدة من النوع GA4 في أقرب وقت ممكن. بهذه الطريقة سيكون لديك سجل بيانات أوسع. يجب أيضًا مراعاة أن كل يوم يمر فيه GA4 يدمج وظائف جديدة أو يحسن الوظائف الحالية. في الوقت الحالي هو في تطور مستمر.
لهذا السبب ، بالطبع قد تكون هناك تغييرات طفيفة في الكود الموضح أدناه. على الرغم من أنها بالتأكيد ستكون ضئيلة. على سبيل المثال ، لقد واجهت بالفعل تفاهات بسيطة مثل إعادة تسمية الحقل "الكيان" (مرحلة ألفا) باسم "خاصية" (مرحلة بيتا) داخل الفئة RunReportRequest () .
أولاً وقبل كل شيء ، قبل إنشاء طلب واجهة برمجة التطبيقات ، يلزم فهم العناصر المتوفرة. في الأساس ، يتعلق الأمر باتباع الهيكل أدناه:
أنواع RunReportRequest of GA4 Data v1 Beta API
للوهلة الأولى ، يبدو الأمر بديهيًا تمامًا ، على الرغم من اختلاف الواقع تمامًا. لتقديم طلب ، من الضروري أن يكون لديك دائمًا الوثائق التالية على الأقل في متناول اليد:
- Google APIS dev.
- إعداد تقارير Google Analytics Data API (GA4).
هذا ببساطة لأن أسماء الحقول تختلف قليلاً عن الوثائق الرسمية ، والتي تمثل الحقول بتنسيق JSON. مثال على ذلك هو حقل اسم فئة عامل التصفية. في بايثون يجب أن نصفه على أنه اسم_المجال. ستكون القاعدة العامة الجيدة دائمًا هي الانتقال من حقل نوع حالة الجمل (مثل "fieldName") إلى حالة الثعبان (مثل "field_name").
قبل المتابعة ، دعنا نتوقف قليلاً لبدء مشروعنا. كما هو الحال في الغالبية العظمى من الحالات عند تطوير البرامج النصية في Python ، يتعين علينا قضاء بعض الوقت في استيراد المكتبات اللازمة وإعداد بيئة التنفيذ.
- قم بإنشاء مشروع جديد في Python. في هذه الحالة ، تم استخدام برنامج PyCharm.
- قم بتمكين Google Analytics Data API في Google Cloud Platform وقم بتنزيل ملف حساب الخدمة الذي تم إنشاؤه (نوع JSON) وحفظه في المجلد حيث تم إنشاء مشروع Python. عند فتح هذا الملف ، يجب نسخ قيمة حقل client_email ، والتي ستكون شيئًا مثل [email protected].
- أضف قيمة client_email هذه إلى موقع GA4 الذي سيتم استخراج البيانات منه. ستحتاج إلى القيام بذلك في قسم إدارة المستخدم. على الأقل ، سيكون من الضروري منحه مستوى الإذن "قراءة وتحليل".
- من خلال محطة العميل (PyCharm) ، قم بتثبيت مكتبة بيانات Google Analytics في دليل المشروع الذي سيتم من خلاله تقديم طلبات API:
pip install google-analytics-data
من الآن فصاعدًا ، كل ما عليك فعله هو إنشاء الطلب ، والذي ، كما ترى أدناه ، يتكون أساسًا من ثلاثة أجزاء (العميل والطلب والاستجابة) ، وعرض البيانات المجمعة أو حفظها.
رمز لتقديم طلب بسيط إلى GA4
يجب إضافة أي بُعد ، ومقياس ، وفلتر ، وترتيب بيانات ، ونطاق تاريخ ، وما إلى ذلك ، إلى متغير الطلب كفئة (انظر الصورة السابقة "أنواع RunReportRequest") مرتبطة بمتغير ( metrics = [Metric (..)] ). هذا يجعل من السهل فهم بنية البيانات المراد جمعها. بهذا المعنى ، يجب إجراء استيراد محدد لكل فئة من أعلى المستويات. بمعنى ، إذا كنت تريد إضافة بُعد ومقياس لنطاق زمني محدد ، فستكون العناصر التالية مطلوبة على الأقل ...
من google.analytics.data_v1beta استيراد BetaAnalyticsDataClient من google.analytics.data_v1beta.types ، استيراد RunReportRequest من google.analytics.data_v1beta.types استيراد DateRange من google.analytics.data_v1beta.types استيراد البعد من google.analytics.data_v1beta.types استيراد Metric
بالطبع ، من الممكن أيضًا إضافة قيم محددة إلى متغيرات معينة ( الاسم = 'eventCount' ). لهذا السبب ، من الضروري فهم الوثائق الموصوفة مسبقًا وإغراقها.
بالإضافة إلى ذلك ، يجب إيلاء اهتمام خاص لمتغير os.environ ["GOOGLE_APPLICATION_CREDENTIALS"] ، والذي سيحتوي على المسار إلى الملف الذي تم تنزيله مسبقًا في الخطوة 2. وسيتجنب هذا السطر من التعليمات البرمجية بعض المشكلات عند إدارة الأذونات لـ جوجل API.
إذا تم تنفيذ الكود بشكل صحيح ، فسترى نتيجة تبدو كالتالي: {Date، Events}، {20210418، 934}، {…}،….
بيانات عند الزحف³
التنبؤ بالبيانات من خلال Facebook Prophet
في الوقت الحاضر ، هناك العديد من الخيارات المجانية والحالية لتنفيذ أي نوع من التنبؤ بناءً على سجل البيانات. في هذه الحالة بالذات اخترت مكتبة الرسول ولكن ما هي حقا؟
إنها مكتبة مفتوحة المصدر (متاحة لـ R و Python) أنشأها فريق Facebook Data Science لتقدير سلوك مجموعة بيانات السلاسل الزمنية بناءً على نموذج مضاف حيث يتم تعديل الاتجاهات غير الخطية إلى موسمية يومية وأسبوعية وسنوية في الاعتبار آثار أيام الإجازة.
بالعودة إلى التنفيذ المقترح (توقع حركة البحث العضوي) ، فإن أول شيء يجب فعله هو تثبيت المكتبات التالية:
- الباندا ( نقطة تثبيت الباندا ). إدارة وتحليل هياكل البيانات.
- مؤامرة ( نقطة تثبيت مؤامرة ). إنشاء الرسومات بأنواعها.
- النبي ( كوندا تثبيت -c conda-forge fbprophet -y ).
ثم ، كما هو الحال دائمًا ، يجب عليك تنفيذ عمليات الاستيراد المرتبطة بهذه المكتبات. بعد ذلك ، الشيء الوحيد المتبقي لك هو إجراء نمذجة للتنبؤ والتصور المقابل له. للقيام بذلك ، في حالة النبي ، عليك فقط اتباع هذه العملية:
- قم بتهيئة كائن نبي جديد بالسمات المرغوبة لتوليد التنبؤ.
- اطلب طريقة الملاءمة ، وتمريرها البيانات المستخرجة من GA4 كإطار بيانات. قد يستغرق هذا الطلب عدة ثوانٍ في بعض الحالات. يجب أن يتكون إطار البيانات مع البيانات المجمعة فقط من عمودين لهما نفس الاسم دائمًا: ds (حقل نوع التاريخ) و y (مقياس للدراسة).
- قم بإنشاء إطار بيانات مستقبلي جديد لتحديد عدد الفترات التي يجب أن يصل إليها التنبؤ من النطاق الزمني المحدد والتكرار الذي سيتم تجميع البيانات به (أسبوعيًا ، شهريًا ، إلخ.)
- اطلب طريقة التنبؤ ، والتي ستخصص لكل صف من إطار البيانات المستقبلي الجديد قيمة متوقعة (yhat).
- اطلب طريقة الرسم لتتمكن من عرض التنبؤات التي تم إنشاؤها.
- اطلب طريقة plot_components التي تساعد على الفهم البصري لاتجاه وموسمية البيانات.
م = النبي () م. فيت (مدافع) المستقبل = m.make_future_dataframe (فترات = 365) التنبؤ = m.predict (المستقبل) m.plot (توقعات) m.plot_components (توقعات) plt.show ()
على الرغم من أن التنبؤ المطلوب قد تم إنشاؤه في ست خطوات فقط ويبدو أنه بسيط نسبيًا ، إلا أنه يجب مراعاة العديد من العناصر التي ستكون مفتاحًا لإنشاء التنبؤ. تؤثر جميعها على أهمية التنبؤ بطريقة أو بأخرى. في النهاية ، يتعلق الأمر بإنشاء تنبؤ يتوافق مع منطق حركة البحث العضوي لدينا ، في حالة هذه المقالة. لهذا ، من الضروري فهم بعض الإعدادات المتقدمة للنبي.
- أيام وإجازات خاصة. هناك إمكانية إضافة أيام خاصة.
- القيم المتطرفة. يجب حذفها إذا كانت تؤثر على التقدير.
- نقاط التغيير. الكشف عن تغيرات الاتجاه خلال الوقت الذي تم تحليله.
- تشخبص. المصادقة على أساس قياس خطأ التنبؤ وفقا للدراسة التاريخية للبيانات.
- زيادة. الاختيار بين الخطي أو اللوجستي.
- الموسمية. الاختيار بين مضافة أو مضاعفة.
كل هذا والعديد من الخيارات مفصلة بشكل مثالي في هذا التوثيق لمكتبة النبي.
إنشاء النص الكامل ليكون قادرًا على تصور تنبؤات حركة المرور
كل ما تبقى الآن هو ضم كل قطع اللغز في نص واحد. تتمثل الطريقة المعتادة لمعالجة هذا النوع من الألغاز في إنشاء وظيفة لكل عملية من العمليات المفصلة مسبقًا ، بطريقة يمكن تنفيذها بطريقة منظمة ونظيفة:
def ga4 (property_id، start_date، end_date): [...] التنبؤ def (خافت ، التقى ، لكل ، التكرار): [...] إذا __name__ == "__main__": البعد ، المقياس = ga4 (PROPERTY_ID ، START_DATE ، END_DATE) التنبؤ (البعد ، القياس ، الفترات ، التكرار)
قبل تصور النتيجة النهائية للتنبؤ ، من الجيد إلقاء نظرة على حركة البحث العضوية التي تم تحليلها.
للوهلة الأولى ، يمكنك أن ترى كيف كان للاستراتيجيات والإجراءات المختلفة التي تم اتخاذها تأثير بمرور الوقت. على عكس القنوات الأخرى (على سبيل المثال ، حملات البحث المدفوعة) ، عادةً ما يكون للزيارات الناتجة من البحث المجاني القليل من التذبذبات الملحوظة (الوديان أو القمم). تميل إلى النمو أو الانخفاض تدريجيًا بمرور الوقت وتتأثر أحيانًا بالأحداث الموسمية. عادةً ما ترتبط التقلبات الملحوظة بالتحديثات في خوارزمية محرك البحث (Google و Bing وما إلى ذلك).
يمكن رؤية مخرجات البرنامج النصي في الصور التالية ، حيث يتم تفصيل العوامل المهمة مثل الاتجاه أو الموسمية أو التنبؤ أو تكرار البيانات.
إذا قمنا بتحليل التنبؤ الذي تم الحصول عليه ، فيمكن أن نستنتج بطريقة عامة أنه "إذا واصلنا نفس إستراتيجية تحسين محركات البحث التي تم تنفيذها حتى الآن ، فسوف تستمر حركة المرور من محركات البحث في النمو تدريجياً". يمكننا أن نضمن أن "جهودنا لتحسين أداء الموقع ، وإنشاء محتوى عالي الجودة ، وتوفير الروابط ذات الصلة ، وما إلى ذلك ، كانت تستحق العناء".
تصور الاتجاه والموسمية والتنبؤ واتجاه حركة البحث المجاني
في الختام ، سأشارك الكود بالكامل بحيث لا يكون عليك سوى نسخه وتشغيله في IDE (بيئة التطوير المتكاملة) في Python. وغني عن القول أن جميع المكتبات المذكورة أعلاه يجب أن تكون مثبتة حتى يعمل هذا بشكل صحيح.
استيراد الباندا كما pd استيراد fbprophet من fbprophet استيراد النبي من fbprophet.plot استيراد add_changepoints_to_plot استيراد matplotlib.pyplot كـ PLT استيراد نظام التشغيل من google.analytics.data_v1beta استيراد BetaAnalyticsDataClient من google.analytics.data_v1beta.types استيراد DateRange من google.analytics.data_v1beta.types استيراد البعد من google.analytics.data_v1beta.types استيراد Metric من google.analytics.data_v1beta.types استيراد عامل التصفية من google.analytics.data_v1beta.types استيراد عامل التصفيةExpression من google.analytics.data_v1beta.types استيراد عامل التصفيةExpressionList من google.analytics.data_v1beta.types ، استيراد RunReportRequest منشأه_ START_DATE = '2020-01-01' END_DATE = "2021-03-31" فترات = 4 FREQ = 'M' os.environ ["GOOGLE_APPLICATION_CREDENTIALS"] = "[أضف هنا مسار ملف json ببيانات الاعتماد]" def ga4 (property_id، start_date، end_date): العميل = BetaAnalyticsDataClient () request = RunReportRequest (property = 'properties /' + property_id، الأبعاد = [البعد (الاسم = 'التاريخ')] ، المقاييس = [Metric (name = 'eventCount')] ، date_ranges = [DateRange (start_date = start_date، end_date = end_date)]، البعد_filter = عامل التصفية and_group = FilterExpressionList (التعبيرات = [ FilterExpression (filter = Filter (field_name = 'sessionDefaultChannelGrouping' ، string_filter = Filter.StringFilter ( value = "بحث عضوي" ، match_type = Filter.StringFilter.MatchType ( 1)))) ، FilterExpression (filter = Filter (field_name = 'eventName' ، string_filter = Filter.StringFilter ( القيمة = 'session_start' ، match_type = Filter.StringFilter.MatchType ( 1)))) ])) ) استجابة = client.run_report (طلب) س ، ص = ([] لأني في النطاق (2)) للصف ردا على الصفوف: x.append (row.dimension_values [0] .value) y.append (row.metric_values [0] .value) طباعة (row.dimension_values [0] .value، row.metric_values [0] .value) العودة x ، y التنبؤ def (x ، y ، p ، f): طباعة ('Prophet٪ s'٪ fbprophet .__ نسخة__) البيانات = {'ds': x، 'y': y} df = pd.DataFrame (البيانات ، الأعمدة = ['ds'، 'y']) م = النبي (النمو = "خطي" ، changepoint_prior_scale = 0.5 ، الوضع_الموسمي = "مضاف" ، daily_seasonality = خطأ ، Week_seasonality = صحيح ، yearly_seasonality = صحيح ، العطل = لا شيء ، ) م. فيت (مدافع) المستقبل = m.make_future_dataframe (فترات = p ، التكرار = f) التنبؤ = m.predict (المستقبل) طباعة (توقعات [['ds'، 'yhat'، 'yhat_lower'، 'yhat_upper']]. head ()) fig = m.plot (التنبؤ ، xlabel = 'التاريخ' ، ylabel = 'الزيارات') add_changepoints_to_plot (fig.gca () ، م ، توقعات) m.plot_components (توقعات) plt.show () إذا كان __name__ == "__main__": channel_group ، event_count = ga4 (PROPERTY_ID ، START_DATE ، END_DATE) التنبؤ (channel_group ، event_count ، PERIODS ، FREQ)
آمل أن يكون هذا المقال مصدر إلهام لك وأن يكون مفيدًا لك في مشاريعك القادمة. إذا كنت ترغب في مواصلة التعرف على هذا النوع من التنفيذ أو معرفة المزيد عن المزيد من التسويق الرقمي التقني ، فيرجى التواصل معي. يمكنك العثور على مزيد من المعلومات في ملف تعريف المؤلف الخاص بي أدناه.