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

การแบ่งเซสชันและการจัดลำดับเหตุการณ์

จัดกลุ่มเหตุการณ์ตามผู้ใช้และเซสชัน คำนวณระยะเวลาเซสชันด้วยการคำนวณจากตราประทับเวลา และเรียงเหตุการณ์ตามลำดับเวลา

บทเรียน 1 จาก 413 ขั้นตอน

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

ทำความเข้าใจข้อมูล Clickstream

ชุดข้อมูล clickstream จะบันทึกการกระทำทุกอย่างของผู้ใช้ ได้แก่ การเปิดดูหน้าเว็บ การคลิกปุ่ม และการซื้อสินค้า โดยแต่ละรายการจะอยู่ในหนึ่งแถวพร้อมด้วย user_id session_id event_type และ timestamp ก่อนคำนวณตัวชี้วัดใด ๆ คุณต้องเข้าใจโครงสร้างข้อมูลก่อน เรียกใช้ df.dtypes และ df.sample(5) เพื่อดูแถวตัวอย่างและยืนยันว่าคอลัมน์ timestamp ถูกแปลงเป็น datetime ไม่ใช่สตริง

import pandas as pd

df = pd.read_csv('clickstream.csv', parse_dates=['timestamp'])
print(df.dtypes)
print(df.sample(5))

การเรียงเหตุการณ์ตามลำดับเวลา

การวิเคราะห์เหตุการณ์จะไม่มีความหมายหากแถวไม่ได้เรียงตามเวลา ให้เรียงตาม user_id แล้วตามด้วย timestamp เพื่อให้เหตุการณ์ของผู้ใช้คนเดียวกันปรากฏต่อเนื่องกันและอยู่ในลำดับที่ถูกต้อง ใช้ sort_values(['user_id', 'timestamp']) แล้วรีเซ็ตดัชนีเพื่อให้ได้ลำดับจำนวนเต็มที่สะอาดและสะท้อนลำดับหลังการเรียง

df = df.sort_values(['user_id', 'timestamp']).reset_index(drop=True)
print(df[['user_id', 'session_id', 'event_type', 'timestamp']].head(10))

การกำหนดขอบเขตเซสชัน

หากยังไม่ได้กำหนดเซสชันไว้ล่วงหน้า คุณสามารถกำหนดเซสชันจาก ช่วงไม่มีการใช้งาน 30 นาที ได้ โดยเซสชันใหม่จะเริ่มขึ้นเมื่อเวลานับจากเหตุการณ์ก่อนหน้าของผู้ใช้คนเดียวกันเกิน 30 นาที ใช้ groupby('user_id')['timestamp'].diff() เพื่อคำนวณช่วงห่างระหว่างเหตุการณ์ที่ต่อเนื่องกัน จากนั้นทำเครื่องหมายแถวที่ช่วงห่างเกินค่าขีดจำกัดว่าเป็นจุดเริ่มต้นเซสชัน

threshold = pd.Timedelta('30min')

df['time_gap'] = df.groupby('user_id')['timestamp'].diff()
df['is_new_session'] = (df['time_gap'] > threshold) | (df['time_gap'].isna())
df['session_id_inferred'] = df.groupby('user_id')['is_new_session'].cumsum()

print(df[['user_id', 'timestamp', 'time_gap', 'session_id_inferred']].head(10))

การคำนวณระยะเวลาเซสชัน

ระยะเวลาเซสชันคือช่วงเวลาระหว่างเหตุการณ์แรกและเหตุการณ์สุดท้ายในเซสชัน จัดกลุ่มตาม user_id และ session_id แล้วคำนวณ max - min จากคอลัมน์ timestamp แปลงผลลัพธ์ชนิด Timedelta เป็นนาทีด้วย .dt.total_seconds() / 60 เพื่อให้ได้ตัวชี้วัดที่อ่านเข้าใจง่าย เซสชันที่มีระยะเวลาเป็นศูนย์คือการเข้าชมที่มีเหตุการณ์เพียงรายการเดียว

session_times = df.groupby(['user_id', 'session_id'])['timestamp'].agg(['min', 'max'])
session_times['duration_minutes'] = (session_times['max'] - session_times['min']).dt.total_seconds() / 60

print(session_times['duration_minutes'].describe())

การนับเหตุการณ์ต่อเซสชัน

จำนวนเหตุการณ์ในเซสชันเป็นตัวชี้วัดโดยประมาณของการมีส่วนร่วมของผู้ใช้ เซสชันที่มี 20 เหตุการณ์น่าจะสะท้อนการสำรวจที่ลึกกว่าเซสชันที่มี 2 เหตุการณ์ ใช้ groupby(['user_id', 'session_id']).size() เพื่อนับแถวในแต่ละกลุ่ม และตั้งชื่อผลลัพธ์เป็น event_count รวมข้อมูลสรุปนี้กลับเข้ากับตารางเซสชันเพื่อสร้างชุดข้อมูลระดับเซสชันที่สมบูรณ์

event_counts = df.groupby(['user_id', 'session_id']).size().rename('event_count')
session_df = session_times.join(event_counts)

print(session_df.describe())

การระบุเหตุการณ์แรกและเหตุการณ์สุดท้าย

เหตุการณ์แรก ในเซสชันแสดงจุดทางเข้าของผู้ใช้ เช่น หน้าแรกหรือหน้าผลการค้นหา ส่วน เหตุการณ์สุดท้าย แสดงพฤติกรรมเมื่อออกจากเซสชัน เช่น การซื้อสินค้าหรือการออกจากหน้าเว็บทันที ใช้ groupby().first() และ groupby().last() กับ DataFrame ที่เรียงลำดับแล้ว คอลัมน์ทางเข้าและทางออกเหล่านี้เป็นข้อมูลนำเข้าที่สำคัญสำหรับการวิเคราะห์กรวยและการรักษาผู้ใช้

session_entry = df.groupby(['user_id', 'session_id'])['event_type'].first().rename('entry_event')
session_exit = df.groupby(['user_id', 'session_id'])['event_type'].last().rename('exit_event')

print(session_entry.value_counts().head())
print(session_exit.value_counts().head())

การกำหนดหมายเลขเหตุการณ์ภายในเซสชัน

การกำหนดหมายเลขเหตุการณ์ตามลำดับภายในแต่ละเซสชันช่วยให้วิเคราะห์ลำดับเหตุการณ์ที่พบบ่อยได้ ใช้ groupby(['user_id', 'session_id']).cumcount() + 1 เพื่อสร้างคอลัมน์ event_rank การกรองด้วย event_rank == 1 จะได้เหตุการณ์แรกที่ผู้ใช้เข้ามา ส่วนการกรองด้วยอันดับสูงสุดจะได้เหตุการณ์ที่ผู้ใช้ออกจากเซสชันสำหรับแต่ละเซสชัน

df['event_rank'] = df.groupby(['user_id', 'session_id']).cumcount() + 1

# First event of each session
landings = df[df['event_rank'] == 1]
print(landings['event_type'].value_counts())

การคำนวณเวลาระหว่างเหตุการณ์

เวลาระหว่างเหตุการณ์ ซึ่งคือช่วงห่างระหว่างเหตุการณ์ที่ต่อเนื่องกันภายในเซสชัน แสดงให้เห็นว่าผู้ใช้เคลื่อนผ่านผลิตภัณฑ์ได้รวดเร็วเพียงใด คำนวณด้วย groupby(['user_id', 'session_id'])['timestamp'].diff() ช่วงห่างขนาดใหญ่ระหว่างประเภทเหตุการณ์บางประเภทอาจบ่งบอกว่าผู้ใช้ลังเลหรือสับสนในขั้นตอนนั้น ซึ่งเป็นสัญญาณว่าควรปรับปรุงประสบการณ์ผู้ใช้

df['inter_event_seconds'] = (
    df.groupby(['user_id', 'session_id'])['timestamp']
    .diff()
    .dt.total_seconds()
)

print(df['inter_event_seconds'].describe())

จำนวนเซสชันต่อผู้ใช้

จำนวนเซสชันต่อผู้ใช้ใช้วัดว่าผู้ใช้แต่ละคนกลับมาใช้งานบ่อยเพียงใด ผู้ใช้ที่ใช้งานเป็นประจำและมีหลายเซสชันมีส่วนสำคัญต่อตัวชี้วัดการรักษาผู้ใช้ คำนวณจำนวนเซสชันต่อผู้ใช้ด้วย df.groupby('user_id')['session_id'].nunique() แบ่งผู้ใช้ออกเป็นผู้เข้าชมครั้งเดียว ผู้ใช้เป็นครั้งคราว และผู้ใช้ประจำ โดยใช้ pd.qcut() กับจำนวนเซสชัน

sessions_per_user = df.groupby('user_id')['session_id'].nunique().rename('session_count')

print(sessions_per_user.describe())
print(sessions_per_user.value_counts().head(10))

การกระจายเซสชันตามวันในสัปดาห์

การทำความเข้าใจว่าวันใดในสัปดาห์สร้างเซสชันมากที่สุดช่วยให้กำหนดเวลาการเผยแพร่ผลิตภัณฑ์ แคมเปญอีเมล และการเพิ่มขีดความสามารถของเซิร์ฟเวอร์ได้อย่างเหมาะสม ดึง day_of_week จากเวลาที่เริ่มเซสชันแล้วจัดกลุ่มตามค่านี้ การแปลงค่าจำนวนเต็ม (0=วันจันทร์, 6=วันอาทิตย์) เป็นชื่อวันจะทำให้ผลลัพธ์อ่านง่ายขึ้นในรายงานและแผนภูมิ

session_starts = df[df['event_rank'] == 1].copy()
session_starts['day_of_week'] = session_starts['timestamp'].dt.day_name()

sessions_by_day = session_starts.groupby('day_of_week').size()
print(sessions_by_day)

การสร้างตารางสรุประดับเซสชัน

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

session_summary = session_df.join(session_entry).join(session_exit)
session_summary = session_summary.reset_index()
print(session_summary.columns.tolist())
print(session_summary.head())

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจแนวคิดด้านการวิเคราะห์ข้อมูลจากบทเรียนนี้

สรุปบทเรียน

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

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

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

บทเรียน “การแบ่งเซสชันและการจัดลำดับเหตุการณ์” ฟรีหรือไม่

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

บทเรียน “การแบ่งเซสชันและการจัดลำดับเหตุการณ์” ใช้เวลานานแค่ไหน

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

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

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

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

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