استخدام مكتبة Pandas لتحليل بيانات الـ SEO الضخمة


ماذا سنبني اليوم؟

سنقوم ببناء سكربت بايثون احترافي باستخدام مكتبة Pandas لتحليل مجموعات بيانات SEO ضخمة. الهدف هو أتمتة عملية استكشاف البيانات، تنظيفها، واستخلاص رؤى قابلة للتنفيذ من مصادر مثل تقارير Google Search Console، بيانات زحف المواقع (Screaming Frog)، أو سجلات الخادم. سنركز على تحديد الكلمات المفتاحية والصفحات ذات الأداء العالي والمنخفض، واكتشاف فرص التحسين.

الخطوة 1: إعداد بيئة العمل واستيراد البيانات

أولاً، تأكد من تثبيت مكتبة Pandas. إذا لم تكن مثبتة، يمكنك تثبيتها باستخدام pip:

pip install pandas

بعد ذلك، سنقوم باستيراد المكتبة وقراءة ملف بيانات SEO. في هذا المثال، سنفترض أن لدينا ملف CSV يحاكي بيانات أداء Google Search Console (النقرات، مرات الظهور، متوسط الموضع، الكلمات المفتاحية، الصفحات).

import pandas as pd

# تحديد مسار ملف البيانات الخاص بك
# يمكنك تنزيل بيانات Google Search Console وتصديرها كملف CSV
data_path = 'gsc_data_export.csv'

try:
    df = pd.read_csv(data_path)
    print("تم استيراد البيانات بنجاح.")
except FileNotFoundError:
    print(f"خطأ: الملف '{data_path}' غير موجود. يرجى التأكد من مسار الملف.")
    # إنشاء DataFrame وهمي للمتابعة إذا لم يكن الملف موجودًا
    data = {
        'Query': ['افضل هواتف 2023', 'طرق تحسين السيو', 'SEO للمبتدئين', 'تحليل بيانات السيو', 'ما هو الباك لينك'],
        'Page': ['https://example.com/best-phones/', 'https://example.com/seo-tips/', 'https://example.com/seo-for-beginners/', 'https://example.com/data-analysis/', 'https://example.com/what-is-backlink/'],
        'Clicks': [1500, 800, 300, 50, 120],
        'Impressions': [50000, 25000, 10000, 5000, 8000],
        'CTR': [0.03, 0.032, 0.03, 0.01, 0.015],
        'Position': [1.5, 2.1, 4.0, 8.5, 6.2]
    }
    df = pd.DataFrame(data)
    print("تم إنشاء DataFrame وهمي لأغراض الاختبار.")

# عرض أول 5 صفوف للتحقق من الاستيراد
print("\nأول 5 صفوف من البيانات:")
print(df.head())
ملاحظة تقنية: تأكد من أن أسماء الأعمدة في ملف CSV الخاص بك تتطابق مع الأسماء المستخدمة في الكود (مثل 'Query', 'Page', 'Clicks', 'Impressions', 'Position'). إذا كانت مختلفة، ستحتاج إلى تعديل الكود أو إعادة تسمية الأعمدة.

الخطوة 2: استكشاف وتنظيف البيانات الأولية

قبل البدء بالتحليل، من الضروري استكشاف البيانات وتنظيفها للتعامل مع القيم المفقودة أو أنواع البيانات غير الصحيحة.

# معلومات عامة عن DataFrame (أنواع البيانات، القيم غير الفارغة)
print("\nمعلومات عامة عن DataFrame:")
print(df.info())

# التحقق من القيم المفقودة
print("\nالقيم المفقودة لكل عمود:")
print(df.isnull().sum())

# تحويل الأعمدة الرقمية إلى النوع الصحيح إذا لزم الأمر
# في بعض الأحيان، قد يتم استيراد 'Clicks' و 'Impressions' و 'Position' كسلاسل نصية
df['Clicks'] = pd.to_numeric(df['Clicks'], errors='coerce')
df['Impressions'] = pd.to_numeric(df['Impressions'], errors='coerce')
df['Position'] = pd.to_numeric(df['Position'], errors='coerce')

# ملء القيم المفقودة في الأعمدة الرقمية بالصفر (أو بمتوسط/وسيط حسب الحالة)
df['Clicks'].fillna(0, inplace=True)
df['Impressions'].fillna(0, inplace=True)
df['Position'].fillna(df['Position'].mean(), inplace=True)

# إعادة حساب CTR بعد التأكد من أن Clicks و Impressions رقمية
# تجنب القسمة على صفر
df['CTR'] = df.apply(lambda row: (row['Clicks'] / row['Impressions']) if row['Impressions'] > 0 else 0, axis=1)

print("\nالبيانات بعد التنظيف وتحديث CTR:")
print(df.head())
ملاحظة تقنية: تحويل 'errors='coerce' في pd.to_numeric سيحول أي قيمة لا يمكن تحويلها إلى رقم إلى NaN (Not a Number)، مما يمنع الأخطاء ويسمح لك بالتعامل معها لاحقًا.

الخطوة 3: تحليل الكلمات المفتاحية (Keywords Analysis)

يمكننا الآن البدء في استخلاص رؤى من بيانات الكلمات المفتاحية. على سبيل المثال، تحديد الكلمات المفتاحية الأكثر أداءً، أو تلك التي لديها مرات ظهور عالية ولكن نقرات منخفضة (فرص لتحسين CTR).

# الكلمات المفتاحية الأكثر نقراً
print("\nأهم 10 كلمات مفتاحية حسب النقرات:")
print(df.sort_values(by='Clicks', ascending=False).head(10)[['Query', 'Clicks', 'Impressions', 'CTR', 'Position']])

# الكلمات المفتاحية ذات مرات الظهور العالية ولكن CTR المنخفضة (فرص تحسين)
# نفترض أن CTR منخفض هو أقل من 2% ومتوسط الموضع أفضل من 10
opportunity_keywords = df[(df['Impressions'] > 1000) & (df['CTR'] < 0.02) & (df['Position'] < 10)]
print("\nكلمات مفتاحية بفرص تحسين (ظهور عالٍ، CTR منخفض، موضع جيد):")
print(opportunity_keywords.sort_values(by='Impressions', ascending=False).head(10)[['Query', 'Clicks', 'Impressions', 'CTR', 'Position']])

# تحليل الكلمات المفتاحية الطويلة (Long-Tail Keywords)
# يمكن تعريفها بالكلمات التي تحتوي على أكثر من 3 كلمات مثلاً
df['Query_Length'] = df['Query'].apply(lambda x: len(str(x).split()))
long_tail_keywords = df[(df['Query_Length'] > 3) & (df['Clicks'] > 0)]
print("\nأمثلة على الكلمات المفتاحية الطويلة (Long-Tail Keywords):")
print(long_tail_keywords.sort_values(by='Clicks', ascending=False).head(10)[['Query', 'Clicks', 'Impressions', 'CTR', 'Position']])
ملاحظة تقنية: يمكن أن يساعد تحليل الكلمات المفتاحية الطويلة في تحديد مواضيع متخصصة لم يتم استهدافها بعد، والتي غالبًا ما يكون لديها نية بحث أعلى ومنافسة أقل.

الخطوة 4: تحليل الصفحات (Pages Analysis)

دعنا ننتقل إلى تحليل أداء الصفحات لتحديد المحتوى الأكثر قيمة أو الصفحات التي تحتاج إلى تحسين.

# تجميع البيانات حسب الصفحة للحصول على إجمالي النقرات ومرات الظهور لكل صفحة
page_performance = df.groupby('Page').agg({
    'Clicks': 'sum',
    'Impressions': 'sum',
    'Position': 'mean' # متوسط الموضع للصفحة عبر جميع الكلمات المفتاحية
}).reset_index()

# حساب CTR للصفحة
page_performance['CTR'] = page_performance.apply(lambda row: (row['Clicks'] / row['Impressions']) if row['Impressions'] > 0 else 0, axis=1)

# الصفحات الأكثر نقراً
print("\nأهم 10 صفحات حسب النقرات:")
print(page_performance.sort_values(by='Clicks', ascending=False).head(10))

# الصفحات ذات مرات الظهور العالية ولكن CTR المنخفضة (فرص تحسين المحتوى)
opportunity_pages = page_performance[(page_performance['Impressions'] > 5000) & (page_performance['CTR'] < 0.02)]
print("\nصفحات بفرص تحسين (ظهور عالٍ، CTR منخفض):")
print(opportunity_pages.sort_values(by='Impressions', ascending=False).head(10))
ملاحظة تقنية: تحليل الصفحات يمكن أن يكشف عن محتوى 'يتيم' (Orphan content) لديه أداء جيد ولكنه قد لا يكون مرتبطًا بشكل جيد داخل الموقع، أو صفحات ذات أداء منخفض تحتاج إلى تحديث أو إعادة هيكلة.

الخطوة 5: التحليل المتقدم وتحديد الفرص

يمكننا دمج هذه الرؤى لإنشاء مقياس 'نقاط الفرصة' لتحديد أولويات جهود التحسين.

# دمج الكلمات المفتاحية والصفحات في DataFrame واحد للتحليل المتقدم
# سنركز على الكلمات المفتاحية التي تظهر في المراتب 4-10 (متوسط الموضع)، ولديها مرات ظهور جيدة، ولكن CTR منخفض

advanced_opportunities = df[
    (df['Position'] >= 4) & (df['Position'] <= 10) & # الكلمات المفتاحية في الصفحة الأولى ولكن ليست في المراكز العليا
    (df['Impressions'] > 500) & # عدد مرات ظهور كافٍ
    (df['CTR'] < 0.03) # CTR منخفض نسبيًا
].copy()

# إنشاء 'Opportunity Score' (على سبيل المثال: Impressions * (1 / Position) * (1 / CTR_expected - CTR_actual))
# هنا سنستخدم صيغة أبسط: Impressions * (1 / Position) * (1 - CTR)
advanced_opportunities['Opportunity_Score'] = advanced_opportunities['Impressions'] * (1 / advanced_opportunities['Position']) * (1 - advanced_opportunities['CTR'])

print("\nأهم 10 فرص تحسين متقدمة (كلمات مفتاحية يمكن دفعها للأعلى):")
print(advanced_opportunities.sort_values(by='Opportunity_Score', ascending=False).head(10)[['Query', 'Page', 'Clicks', 'Impressions', 'CTR', 'Position', 'Opportunity_Score']])
ملاحظة تقنية: يمكن تخصيص معادلة 'Opportunity Score' لتناسب أهدافك الخاصة. على سبيل المثال، قد ترغب في إعطاء وزن أكبر للكلمات المفتاحية ذات النية التجارية العالية.

الخطوة 6: تصدير النتائج

بعد التحليل، يمكنك تصدير البيانات المنظمة والرؤى إلى ملف CSV أو Excel لمشاركتها أو استخدامها في تقارير أخرى.

# تصدير جميع البيانات المعالجة إلى ملف CSV
df.to_csv('seo_processed_data.csv', index=False)
print("\nتم تصدير البيانات المعالجة إلى 'seo_processed_data.csv'")

# تصدير فرص الكلمات المفتاحية إلى ملف Excel
advanced_opportunities.to_excel('seo_optimization_opportunities.xlsx', index=False)
print("تم تصدير فرص التحسين إلى 'seo_optimization_opportunities.xlsx'")

# تصدير أداء الصفحات
page_performance.to_csv('seo_page_performance.csv', index=False)
print("تم تصدير أداء الصفحات إلى 'seo_page_performance.csv'")
ملاحظة تقنية: استخدام index=False يمنع Pandas من كتابة فهرس DataFrame كعمود في ملف الإخراج، مما يجعل الملفات الناتجة أنظف وأسهل في الاستخدام.

النتيجة النهائية المتوقعة

بعد تشغيل هذا السكربت، ستحصل على ثلاثة ملفات جديدة في نفس مجلد السكربت:

  1. seo_processed_data.csv: يحتوي على نسخة نظيفة ومعالجة من بياناتك الأصلية، مع أي أعمدة محسوبة مثل CTR المحدث.
  2. seo_optimization_opportunities.xlsx: ملف Excel يسرد الكلمات المفتاحية والصفحات التي تم تحديدها كفرص تحسين عالية بناءً على المعايير المحددة (مثل مرات الظهور العالية، CTR المنخفض، والموضع الجيد). هذا الملف سيكون مفيدًا لفرق المحتوى وSEO لتحديد أولويات العمل.
  3. seo_page_performance.csv: ملف CSV يلخص أداء كل صفحة على حدة، بما في ذلك إجمالي النقرات ومرات الظهور ومتوسط الموضع و CTR للصفحة.

هذه الملفات ستوفر لك رؤى قابلة للتنفيذ لتحسين أداء SEO الخاص بموقعك، مما يسمح لك باتخاذ قرارات مستنيرة بشأن استراتيجية المحتوى والتحسين التقني.