0Pricing
Pandas & NumPy Academy · บทเรียน

การแสดงเส้นทางผู้ใช้

วาดกรวยเป็นกราฟแท่งแนวนอน และแสดงเมทริกซ์การรักษาผู้ใช้เป็นฮีตแมปเพื่อสื่อสารข้อค้นพบแก่ผู้มีส่วนได้ส่วนเสีย

การแสดงเส้นทางผู้ใช้ เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงควรแสดงเส้นทางการใช้งานของผู้ใช้เป็นภาพ

ตารางเหตุการณ์ดิบและอัตราการเปลี่ยนผ่านที่แสดงเป็นตัวเลขนั้นสื่อสารกับผู้มีส่วนได้ส่วนเสียที่ไม่ใช่สายเทคนิคได้ยาก การแสดงเส้นทางการใช้งานของผู้ใช้เป็นภาพ เช่น แผนภูมิกระบวนการ แผนที่ความร้อนการรักษาผู้ใช้ และแผนภาพแซงกี ช่วยให้มองเห็นรูปแบบต่าง ๆ ได้ทันที เป้าหมายไม่ใช่การแทนที่ตัวเลข แต่คือการนำเสนอตัวเลขในรูปแบบที่ทำให้เห็นข้อค้นพบได้อย่างชัดเจนตั้งแต่แรกมอง และลดภาระในการประมวลผลข้อมูลของผู้ชม

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()

ลำดับเหตุการณ์ที่พบบ่อยที่สุด

แสดงลำดับเหตุการณ์สองรายการที่พบบ่อยที่สุด (บิแกรม) ในกระแสการคลิก เพื่อทำความเข้าใจเส้นทางการใช้งานทั่วไปของผู้ใช้ จัดกลุ่มตามเซสชัน เรียงตาม 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))

การกระจายระยะเวลาของเซสชัน

ฮิสโตแกรมของระยะเวลาเซสชันช่วยให้เห็นว่าผู้ใช้มีส่วนร่วมในช่วงเวลาสั้น ๆ (ไม่ถึง 2 นาที) ปานกลาง หรือลึกซึ้ง ใช้มาตราส่วนลอการิทึมบนแกน 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 บทถัดไป เราจะสำรวจการตรวจหาและลบระเบียนซ้ำในการทำความสะอาดข้อมูลขั้นสูง

คำถามที่พบบ่อย

บทเรียน “การแสดงเส้นทางผู้ใช้” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแสดงเส้นทางผู้ใช้” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแสดงเส้นทางผู้ใช้”

วาดกรวยเป็นกราฟแท่งแนวนอน และแสดงเมทริกซ์การรักษาผู้ใช้เป็นฮีตแมปเพื่อสื่อสารข้อค้นพบแก่ผู้มีส่วนได้ส่วนเสีย คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การแสดงเส้นทางผู้ใช้” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม

ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การแบ่งเซสชันและการจัดลำดับเหตุการณ์
  2. การวิเคราะห์กรวย
  3. ตารางการรักษาผู้ใช้ตามกลุ่มรุ่น
  4. การแสดงเส้นทางผู้ใช้
← กลับไปที่ Pandas & NumPy Academy