Pandas & NumPy Academy · درس

تصور رحلات المستخدمين

مثّل المسار التحويلي بمخطط شريطي أفقي ومصفوفة الاحتفاظ بخريطة حرارية لإيصال النتائج إلى أصحاب المصلحة.

الدرس 4 من 413 خطوة

تصور رحلات المستخدمين درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

لماذا نصوّر رحلات المستخدمين؟

يصعب إيصال جداول الأحداث الأولية ومعدلات التحويل الرقمية إلى أصحاب المصلحة غير التقنيين. وتجعل التصويرات المرئية لرحلات المستخدمين، مثل مخططات مسارات التحويل وخرائط الاحتفاظ الحرارية ومخططات Sankey، الأنماط واضحة فورًا. الهدف ليس استبدال الأرقام، بل عرضها بصيغة تظهر فيها الرؤى بوضوح من النظرة الأولى، مما يقلل العبء المعرفي على الجمهور.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Assume funnel_summary and retention_pct are already computed
print('Visualisation libraries loaded')

مخطط أعمدة أفقي لمسار التحويل

مخطط الأعمدة الأفقي هو أبسط تصوير مرئي لمسار التحويل وأكثرها شيوعًا وفهمًا. يمثل كل شريط خطوة من خطوات المسار، ويمثل طول الشريط عدد المستخدمين. رتّب الخطوات من الأعلى إلى الأسفل وفق ترتيب مسار التحويل، حتى يُقرأ المخطط كقُمع متسع. استخدم لونًا متباينًا واحدًا لجميع الأشرطة حتى يتركز الانتباه على القيم لا على تنوع الألوان.

FUNNEL_STEPS = ['homepage', 'product_page', 'add_to_cart', 'checkout', 'purchase']
users = [10000, 7200, 4100, 2300, 980]

fig, ax = plt.subplots(figsize=(9, 5))
bars = ax.barh(FUNNEL_STEPS[::-1], users[::-1], color='steelblue', height=0.6)
ax.set_xlabel('Unique Users')
ax.set_title('Conversion Funnel')
plt.tight_layout()
plt.show()

إضافة تعليقات على معدلات التحويل في المخطط

أضف تعليقات على معدل التحويل عند الحافة اليمنى لكل شريط باستخدام ax.text(). اعرض عدد المستخدمين المطلق ونسبة التحويل من خطوة إلى أخرى، حتى يوضح المخطط كل ما يلزم دون جدول بيانات منفصل. ضع النص خارج نهاية الشريط قليلًا مع إزاحة أفقية صغيرة حتى لا يتداخل مع لون تعبئة الشريط.

conversions = [None, 72.0, 56.9, 56.1, 42.6]

for i, (u, c) in enumerate(zip(users[::-1], conversions[::-1])):
    label = f'{u:,} users'
    if c is not None:
        label += f'  ({c}% conv)'
    ax.text(u + 100, i, label, va='center', fontsize=9)

plt.tight_layout()
plt.show()

إعادة النظر في خريطة الاحتفاظ الحرارية

خريطة الاحتفاظ الحرارية هي المخرج القياسي لتحليل المجموعات. يمثل كل صف مجموعة، ويمثل كل عمود إزاحة أسبوعية، وتُلوّن كل خلية وفق نسبة الاحتفاظ. استخدم خريطة الألوان RdYlGn (الأحمر = منخفض، والأخضر = مرتفع) مع تحديد vmin=0, vmax=100 صراحةً، حتى يظل مقياس الألوان متسقًا عبر العروض ولا يُعاد تحجيمه لكل خريطة حرارية.

import numpy as np

# Simulated retention data for illustration
data = [[100, 55, 42, 38, 35, 33],
        [100, 52, 40, 36, 33, 0],
        [100, 58, 45, 41, 0, 0],
        [100, 60, 48, 0, 0, 0]]
retention_pct = pd.DataFrame(data, columns=range(6),
                             index=['Wk1', 'Wk2', 'Wk3', 'Wk4'])

fig, ax = plt.subplots(figsize=(10, 4))
sns.heatmap(retention_pct, annot=True, fmt='.0f', cmap='RdYlGn',
            vmin=0, vmax=100, linewidths=0.5, ax=ax)
ax.set_title('Cohort Retention Heatmap')
plt.tight_layout()
plt.show()

إخفاء خلايا المجموعات غير المكتملة

لم تحصل المجموعات الأحدث بعد على وقت كافٍ لإكمال جميع الإزاحات الأسبوعية. يجب أن تظهر هذه الخلايا فارغة بدلًا من 0% حتى لا يخلط القراء بين غياب البيانات وانعدام الاحتفاظ. أنشئ قناعًا منطقيًا تكون فيه قيمة الخلية 0 ويتجاوز فهرس العمود عدد الأسابيع التي وجدت فيها المجموعة، ثم مرّره إلى sns.heatmap(mask=...).

mask = retention_pct == 0  # cells with no data yet

fig, ax = plt.subplots(figsize=(10, 4))
sns.heatmap(retention_pct, annot=True, fmt='.0f', cmap='RdYlGn',
            vmin=0, vmax=100, linewidths=0.5,
            mask=mask, ax=ax)
ax.set_title('Cohort Retention (incomplete cells masked)')
plt.tight_layout()
plt.show()

رسم منحنى الاحتفاظ المتوسط

صوّر منحنى الاحتفاظ المتوسط برسم متوسطات أعمدة مصفوفة الاحتفاظ. يلخّص هذا الخط الواحد ملف الاحتفاظ العام للمنتج. أضف نطاقًا مظللًا بمقدار ±1 انحراف معياري لإظهار التباين بين المجموعات. ويعني النطاق الضيق أن سلوك المجموعات متشابه، بينما يشير النطاق الواسع إلى اختلافات مهمة على مستوى المجموعات تستحق التحقيق.

avg = retention_pct.mean(axis=0)
std = retention_pct.std(axis=0)

fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(avg.index, avg, marker='o', color='steelblue', linewidth=2)
ax.fill_between(avg.index, avg - std, avg + std, alpha=0.2, color='steelblue')
ax.set_xlabel('Week Number')
ax.set_ylabel('Avg Retention %')
ax.set_title('Average Cohort Retention Curve')
plt.tight_layout()
plt.show()

مسار تحويل مقسّم: أجهزة سطح المكتب مقابل الأجهزة المحمولة

يكشف رسم مسارات التحويل لشرائح مختلفة جنبًا إلى جنب ما إذا كانت مشكلات المنتج عامة أم خاصة بجهاز معين. أنشئ مخطط أعمدة مجمّعًا يضم مجموعتي أشرطة لكل خطوة من خطوات المسار، باستخدام ax.bar() مع إزاحة على المحور x. وبدلًا من ذلك، ارسم مخططي مسار تحويل منفصلين في شبكة مخططات فرعية بحجم 1×2 باستخدام plt.subplots(1, 2) لإجراء مقارنة أوضح.

steps = ['Homepage', 'Product', 'Cart', 'Checkout', 'Purchase']
desktop = [5000, 3800, 2300, 1500, 700]
mobile = [5000, 3400, 1800, 900, 280]

x = range(len(steps))
fig, ax = plt.subplots(figsize=(10, 5))
ax.bar([i - 0.2 for i in x], desktop, width=0.4, label='Desktop', color='steelblue')
ax.bar([i + 0.2 for i in x], mobile, width=0.4, label='Mobile', color='darkorange')
ax.set_xticks(list(x))
ax.set_xticklabels(steps)
ax.legend()
ax.set_title('Funnel by Device Type')
plt.tight_layout()
plt.show()

توزيع تكرار الأحداث

يوضح تصوير توزيع الأحداث لكل جلسة ما إذا كانت الجلسات تتركز حول عدد صغير من الأحداث، مما يشير إلى أن المستخدمين يحققون هدفهم بسرعة، أو تمتد عبر نطاق واسع، مما يشير إلى رحلات معقدة أو ارتباك. ارسم باستخدام ax.hist() على العمود event_count، مع استخدام مقياس لوغاريتمي للمحور y إذا كان التوزيع منحازًا بشدة إلى اليمين.

import numpy as np

event_counts = pd.Series([3, 5, 2, 8, 1, 12, 3, 4, 6, 20, 2, 3, 1, 7, 5])

fig, ax = plt.subplots(figsize=(8, 4))
ax.hist(event_counts, bins=15, color='steelblue', edgecolor='white')
ax.set_xlabel('Events per Session')
ax.set_ylabel('Number of Sessions')
ax.set_title('Session Event Frequency Distribution')
plt.tight_layout()
plt.show()

تسلسلات الأحداث الأكثر شيوعًا

اعرض أكثر تسلسلات الأحداث الثنائية (bigrams) شيوعًا في تدفق النقرات لفهم مسارات المستخدمين المعتادة. جمّع الأحداث حسب الجلسة، ورتّبها حسب event_rank، واستخرج الأزواج المتتالية باستخدام zip(events, events[1:]). احسب تكرارات الأزواج باستخدام Counter، وارسم أعلى 10 أزواج كمخطط أعمدة أفقي. يكشف ذلك مسارات التنقل التي تهيمن على سلوك المستخدمين.

from collections import Counter

events_per_session = [['homepage', 'product_page', 'add_to_cart'],
                       ['homepage', 'search', 'product_page'],
                       ['homepage', 'product_page', 'purchase']]

bigrams = Counter()
for session in events_per_session:
    for pair in zip(session, session[1:]):
        bigrams[pair] += 1

print(bigrams.most_common(5))

توزيع مدة الجلسات

يكشف المدرج التكراري لمدد الجلسات ما إذا كان المستخدمون يتفاعلون لفترة قصيرة (أقل من دقيقتين)، أو باعتدال، أو بعمق. استخدم مقياسًا لوغاريتميًا للمحور x إذا كان عدد قليل من الجلسات الطويلة جدًا سيؤدي إلى ضغط معظم البيانات في الفئة الأولى إلى اليسار. أضف خطًا رأسيًا عند الوسيط باستخدام ax.axvline() لتثبيت تفسير الجمهور لمدة الجلسة «النموذجية».

durations = pd.Series([1.2, 3.5, 0.5, 12.3, 2.1, 8.7, 1.8, 0.3, 45.1, 4.6])

fig, ax = plt.subplots(figsize=(8, 4))
ax.hist(durations, bins=20, color='steelblue', edgecolor='white')
ax.axvline(durations.median(), color='red', linestyle='--', label=f'Median: {durations.median():.1f} min')
ax.set_xlabel('Session Duration (min)')
ax.set_ylabel('Sessions')
ax.legend()
plt.tight_layout()
plt.show()

حفظ شكل لوحة المعلومات

اجمع عدة تصورات مرئية في شكل واحد للوحة المعلومات باستخدام شبكة من المخططات الفرعية مع plt.subplots(2, 2, figsize=(14, 10)). خصص كل لوحة لمخطط أعمدة مسار التحويل، وخريطة الاحتفاظ الحرارية، ومنحنى الاحتفاظ المتوسط، وتوزيع الأحداث. احفظ الشكل بصيغة PNG لتقديمه على الويب أو بصيغة PDF للتقارير القابلة للطباعة. ويكون الشكل الموحد أسهل للمشاركة من أربعة ملفات منفصلة.

fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# Panel 1: funnel
axes[0, 0].barh(FUNNEL_STEPS[::-1], users[::-1], color='steelblue')
axes[0, 0].set_title('Funnel')

# Panel 2: retention heatmap
sns.heatmap(retention_pct, ax=axes[0, 1], cmap='RdYlGn', annot=True, fmt='.0f', vmin=0, vmax=100)
axes[0, 1].set_title('Cohort Retention')

fig.suptitle('User Journey Dashboard', fontsize=16)
plt.tight_layout()
fig.savefig('user_journey_dashboard.png', dpi=150, bbox_inches='tight')
print('Dashboard saved')

تحقق سريع

اختبر مدى فهمك لمفاهيم تحليل البيانات الواردة في هذا الدرس.

مراجعة الدرس

تعلمت في هذا الدرس: إنشاء مخططات أعمدة لمسارات التحويل وخرائط احتفاظ حرارية مع التعليقات، ورسم منحنيات الاحتفاظ المتوسطة مع نطاقات التباين، ودمج عدة مخططات في شكل واحد للوحة معلومات وحفظه بصيغة PNG. بعد ذلك، سنستكشف اكتشاف السجلات المكررة وإزالتها في تنظيف البيانات المتقدم.

البدء مجانًا

تعلم Python مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

الأسئلة الشائعة

هل درس «تصور رحلات المستخدمين» مجاني؟

نعم — نص درس «تصور رحلات المستخدمين» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

ماذا ستتعلم في «تصور رحلات المستخدمين»؟

مثّل المسار التحويلي بمخطط شريطي أفقي ومصفوفة الاحتفاظ بخريطة حرارية لإيصال النتائج إلى أصحاب المصلحة. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟

لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «تصور رحلات المستخدمين»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟

نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تقسيم الجلسات وتسلسل الأحداث
  2. تحليل المسار التحويلي
  3. جدول الاحتفاظ بالفوج
  4. تصور رحلات المستخدمين
← العودة إلى Pandas & NumPy Academy