تحليل مباراة "مانشستر يونايتد vs مانشستر سيتي" باستخدام أدوات الذكاء الاصطناعي: دليل عملي للمحللين والهواة



مقدمة

تحليل المباريات أصبح اليوم أقرب ما يكون لعلم تطبيقي بفضل أدوات الذكاء الاصطناعي والمصادر المفتوحة للبيانات. في هذا الدليل العملي ستتعلم خطوات عملية ومباشرة لاستخدام بيانات الأحداث والفيديو والأدوات المفتوحة لتحليل مباراة مثل "مانشستر يونايتد ضد مانشستر سيتي". لا نفترض توفر بيانات مدفوعة متقدمة؛ سنعتمد على مصادر وأدوات يمكن لأي محلل مبتدئ أو هاوٍ الوصول إليها.

لماذا تحليل المباراة باستخدام AI؟

  • إخراج مؤشرات بصرية وكمية (شبكات تمرير، خرائط حرارية، مؤشرات أداء)

  • بناء نماذج بسيطة مثل نموذج احتمالية تسجيل الهدف (xG) لتحليل فرص التسجيل

  • تحليل الحركة من الفيديو باستخدام تتبع اللاعبين واستخراج أنماط التكتيك

ما الأدوات والبيانات التي ستحتاجها

  • مصادر بيانات الأحداث: StatsBomb Open Data (مفتوحة عبر github)، أو واجهات مثل football-data.org وFBref للمعلومات العامة.

  • لغة برمجة: Python مع مكتبات: pandas، matplotlib، seaborn، networkx، scikit-learn.

  • مكتبات متخصصة: statsbombpy (لبيانات StatsBomb)، mplsoccer (لرسم الملعب والخرائط)، opencv-python وMediaPipe لتحليل الفيديو والحركة.

  • فيديو المباراة (إن أمكن) أو ملف JSON لبيانات الأحداث.

  • بيئة تشغيل: Jupyter Notebook أو أي محرر يدعم Python.

الخطوات العملية: من البيانات إلى النتائج

1. الحصول على بيانات الأحداث (Event Data)

إذا كانت المباراة متوفرة ضمن بيانات StatsBomb Open Data يمكنك تحميل ملف الــ JSON الخاص بالمباراة. بديلًا، استخدم واجهات مجانية لسحب الإحصاءات العامة.

خطوات سريعة:

  • حدد معرف المباراة (match_id) في مجموعة البيانات.
  • حمّل JSON للأحداث ثم اقرأه في pandas لتحويله إلى DataFrame.

مثال كود بسيط لقراءة بيانات Events (Python)

from statsbombpy import sb
import pandas as pd

# احصل على قائمة المباريات ثم اختر id للمباراة المطلوبة
competitions = sb.competitions()
# مثال: تحميل أحداث مباراة حسب match_id
events = sb.events(match_id=12345)  # استبدل 12345 بالمعرف الحقيقي
df = pd.DataFrame(events)

ملاحظة: إذا لم تتوفر مكتبة statsbombpy أو لم تكن المباراة ضمن البيانات المفتوحة، استخدم ملفات JSON المحلية أو CSV.

2. إحصاءات سريعة: الاستحواذ، التسديدات، التمريرات

بمجرد تحويل الأحداث إلى DataFrame يمكنك حساب مؤشرات أساسية:

  • الاستحواذ التقريبي: نسبة أحداث لكل فريق (طريقة بسيطة وليست دقيقة كالتتبع).
  • عدد التسديدات، التسديدات على المرمى، والتسديدات داخل منطقة الجزاء.
  • معدل التمريرات المكتملة والطول المتوسط للتمريرات.

3. رسم شبكة التمرير (Passing Network)

شبكة التمرير تُظهر تواصل اللاعبين داخل الملعب. الفكرة: استخدم إحداثيات بداية ونهاية كل تمريرة، واحسب عدد التمريرات بين كل زوج من اللاعبين لترسم حواف بين عقد تمثل اللاعبين.

import networkx as nx
import matplotlib.pyplot as plt

# فلتر التمريرات
passes = df[df['type_name'] == 'Pass']

# تجميع عدد التمريرات بين اللاعبين
edge_counts = passes.groupby(['player_name', 'recipient_name']).size().reset_index(name='count')

G = nx.Graph()
for _, row in edge_counts.iterrows():
    a, b, w = row['player_name'], row['recipient_name'], row['count']
    G.add_edge(a, b, weight=w)

pos = nx.spring_layout(G)  # يمكنك وضع مواقع اللاعبين بحسب إحداثياتهم الحقيقية عند توفرها
weights = [G[u][v]['weight'] for u,v in G.edges()]
nx.draw(G, pos, with_labels=True, width=[w*0.2 for w in weights])
plt.show()

ملاحظة: لتحسين الرسم استخدم إحداثيات الملعب الفعلية لوضع العقد في أماكن صحيحة (يمين/يسار/وسط).

4. خرائط حرارية (Heatmaps) لحركة اللاعبين أو الكرة

باستخدام إحداثيات الأحداث أو تتبع اللاعبين يمكنك رسم خريطة كثافة موقعية (heatmap) توضح مناطق التأثير.

import seaborn as sns

# افترض أن لدينا أعمدة x و y لإحداثيات الأحداث
sns.kdeplot(df['x'], df['y'], shade=True, cmap='Reds', thresh=0.05)
plt.gca().invert_yaxis()  # اعتمادًا على نظام الإحداثيات
plt.show()

لرسومات ملعب احترافية استخدم مكتبة mplsoccer التي توفر قوالب ملاعب جاهزة.

5. نموذج xG مبسّط (اختياري)

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

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# تجهيز ميزات (مسافة للمرمى، زاوية، هل داخل المنطقة)
X = df_shots[['distance', 'angle', 'in_box']].values
y = df_shots['is_goal'].astype(int).values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = LogisticRegression().fit(X_train, y_train)
print("Score:", model.score(X_test, y_test))

تنبيه: نتائج هذا النموذج تعتمد على جودة الميزات وحجم العينة. النماذج المتقدمة تستخدم مجموعات بيانات أكبر وميزات إضافية.

6. تحليل الفيديو والحركة باستخدام MediaPipe وOpenCV

عندما لا تتوفر بيانات التتبع، يمكنك استخراج معلومات الحركة من الفيديو. MediaPipe يقدم حلول تقدير وضعية الجسم (pose estimation) يمكن استخدامها لتتبع اللاعبين وحركة الأطراف.

  • استخرج إطارات الفيديو باستخدام OpenCV.
  • مرّر الإطارات إلى موديل MediaPipe للحصول على نقاط المفتاح لكل لاعب/شخص.
  • حاول تتبع نفس اللاعب عبر الإطارات باستخدام تطابق المواقع أو خوارزميات تتبع متعددة الأجسام.
import cv2
import mediapipe as mp

mp_pose = mp.solutions.pose
pose = mp_pose.Pose(static_image_mode=False)

cap = cv2.VideoCapture('match.mp4')
ret, frame = cap.read()
while ret:
    image_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    results = pose.process(image_rgb)
    # استخدم results.pose_landmarks لرسم نقاط أو تحليل الحركة
    ret, frame = cap.read()
cap.release()

ملاحظة: تتبع عدة لاعبين في مشهد مكتظ يتطلب تقنيات إضافية مثل اكتشاف اللاعبين أولاً (detector) ثم تطبيق تتبع (tracker) مع ربط نقاط الجسم لكل كائن.

نصائح عملية لتقليل الأخطاء وتحسين النتائج

  • تحقق من نظام الإحداثيات: بعض مصادر البيانات تستخدم مقاييس 0–100 أو أمتار.

  • نظّف البيانات: احذف الأحداث الناقصة أو المكررة قبل التحليل.

  • ابدأ بمقاييس بسيطة قبل بناء نماذج معقدة.

  • احترم حقوق النشر وقيود الترخيص عند استخدام الفيديو وبيانات الجهات الثالثة.

أمثلة استخدام واقعية

  • توليد شبكة تمرير لكل فريق لمعرفة أي اللاعبين يربطون اللعب.

  • بناء خريطة فرص (xG map) لمعرفة أجزاء الملعب الأكثر خطورة.

  • مقارنة الأداء التكتيكي بين فترات الشوط الأول والثاني (هل تغيرت مناطق الضغط؟).

  • تحليل حركات المهاجمين عبر الفيديو لاكتشاف أنماط التغطية الدفاعية.

قائمة أدوات ومراجع سريعة

  • StatsBomb Open Data (GitHub)

  • statsbombpy، mplsoccer، pandas، networkx، scikit-learn

  • OpenCV و MediaPipe لتحليل الفيديو

  • مواقع بديلة: football-data.org، FBref

الاعتبارات الأخلاقية والقانونية

قبل استخدام فيديو المباراة أو بيانات مُؤمّنة تجارياً تأكد من تراخيص الاستخدام. لا تستخدم التحليلات لتشويه سمعة أفراد أو نشر بيانات شخصية حساسة.

خلاصة

تحليل مباراة مثل "مانشستر يونايتد ضد مانشستر سيتي" يمكن أن يصبح مشروعًا عمليًا ومفيدًا باستخدام أدوات مفتوحة وذكاء اصطناعي بسيط. ابدأ بجمع بيانات الأحداث، استخدم pandas وvisualization لرسم شبكات التمرير وخرائط الحرارة، وإذا أمكن استخرج معلومات حركة من الفيديو باستخدام MediaPipe وOpenCV. بناء نماذج مثل xG ممكن لكن يتطلب بيانات وخصائص جيدة لجودة نتائج مقبولة. اتبع خطوات التنظيف، تحقق من صيغ الإحداثيات، واحترم حقوق المصادر.

باتباع هذا الدليل ستحصل على أساس عملي يمكنك تطويره تدريجيًا نحو تحليلات أعمق وتلقائية أكبر.

أحدث أقدم

نموذج الاتصال