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