Pandas & NumPy Academy · Lekcja

Tworzenie sesji i sekwencjonowanie zdarzeń

Grupuj zdarzenia według użytkownika i sesji, obliczaj czas trwania sesji za pomocą działań na znacznikach czasu i sortuj zdarzenia chronologicznie.

Lekcja 1 z 413 kroki

Tworzenie sesji i sekwencjonowanie zdarzeń to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Zrozumienie danych clickstream

Zbiór danych clickstream rejestruje każde działanie użytkownika: wyświetlenia stron, kliknięcia przycisków i zakupy — każde jako wiersz zawierający pola user_id, session_id, event_type i timestamp. Zanim obliczysz jakiekolwiek metryki, musisz zrozumieć schemat danych. Uruchom df.dtypes i df.sample(5), aby zobaczyć przykładowe wiersze i potwierdzić, że kolumna z sygnaturą czasową została zinterpretowana jako data i czas, a nie jako ciąg znaków.

import pandas as pd

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

Sortowanie zdarzeń chronologicznie

Analiza zdarzeń nie ma sensu, jeśli wiersze nie są uporządkowane chronologicznie. Sortuj według user_id, a następnie timestamp, aby wszystkie zdarzenia tego samego użytkownika występowały kolejno i we właściwej sekwencji. Użyj sort_values(['user_id', 'timestamp']) i zresetuj indeks, aby uzyskać przejrzystą sekwencję liczb całkowitych odzwierciedlającą posortowaną kolejność.

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

Definiowanie granic sesji

Jeśli sesje nie zostały wcześniej oznaczone, możesz zdefiniować je na podstawie 30-minutowej przerwy w aktywności: nowa sesja zaczyna się zawsze, gdy czas od poprzedniego zdarzenia tego samego użytkownika przekracza 30 minut. Użyj groupby('user_id')['timestamp'].diff(), aby obliczyć odstęp między kolejnymi zdarzeniami, a następnie oznacz wiersze, w których odstęp przekracza próg, jako początki sesji.

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

Obliczanie czasu trwania sesji

Czas trwania sesji to różnica między pierwszym a ostatnim zdarzeniem w sesji. Grupuj według user_id i session_id, a następnie oblicz max - min dla kolumny z sygnaturą czasową. Przekształć wynikowy obiekt Timedelta na minuty za pomocą .dt.total_seconds() / 60, aby uzyskać czytelną dla człowieka metrykę. Sesje o zerowym czasie trwania to wizyty obejmujące jedno zdarzenie.

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

Zliczanie zdarzeń w sesji

Liczba zdarzeń w sesji jest przybliżoną miarą zaangażowania użytkownika. Sesja obejmująca 20 zdarzeń prawdopodobnie wskazuje na dokładniejsze zapoznawanie się z produktem niż sesja z 2 zdarzeniami. Użyj groupby(['user_id', 'session_id']).size(), aby zliczyć wiersze w każdej grupie, i nadaj wynikowi nazwę event_count. Połącz to podsumowanie z powrotem z tabelą sesji, aby uzyskać kompletny zbiór danych na poziomie sesji.

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

print(session_df.describe())

Identyfikowanie pierwszych i ostatnich zdarzeń

Pierwsze zdarzenie w sesji wskazuje punkt wejścia (np. stronę główną lub stronę wyników wyszukiwania), a ostatnie zdarzenie pokazuje sposób zakończenia wizyty (zakup lub opuszczenie strony). Użyj groupby().first() i groupby().last() na posortowanym DataFrame. Te kolumny wejścia i wyjścia są niezbędnymi danymi do analizy lejka i utrzymania użytkowników.

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

Numerowanie zdarzeń w sesji

Przypisanie kolejnych numerów zdarzeniom w każdej sesji umożliwia analizę typowych sekwencji zdarzeń. Użyj groupby(['user_id', 'session_id']).cumcount() + 1, aby utworzyć kolumnę event_rank. Filtrowanie za pomocą event_rank == 1 zwraca zdarzenie wejściowe, a filtrowanie według maksymalnej wartości rangi — zdarzenie wyjściowe dla każdej sesji.

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

Obliczanie czasu między zdarzeniami

Czas między zdarzeniami — odstęp między kolejnymi zdarzeniami w sesji — pokazuje, jak szybko użytkownicy poruszają się po produkcie. Oblicz go za pomocą groupby(['user_id', 'session_id'])['timestamp'].diff(). Duże odstępy między określonymi typami zdarzeń sugerują wahanie lub dezorientację na danym etapie, co stanowi sygnał do poprawy UX.

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

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

Liczba sesji na użytkownika

Liczba sesji przypadających na użytkownika mierzy częstotliwość jego powrotów. Zaangażowani użytkownicy z wieloma sesjami wpływają na kluczowe wskaźniki utrzymania. Oblicz liczbę sesji na użytkownika za pomocą df.groupby('user_id')['session_id'].nunique(). Podziel użytkowników na odwiedzających jednorazowych, użytkowników okazjonalnych i częstych, używając pd.qcut() dla liczby sesji.

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

Rozkład sesji według dni tygodnia

Zrozumienie, w które dni tygodnia odbywa się najwięcej sesji, pomaga planować wydania produktu, kampanie e-mailowe i skalowanie serwerów. Wyodrębnij day_of_week z sygnatury czasowej rozpoczęcia sesji i pogrupuj według tej wartości. Mapowanie wartości całkowitych (0=poniedziałek, 6=niedziela) na nazwy dni sprawia, że wyniki są czytelniejsze w raportach i na wykresach.

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)

Tworzenie tabeli podsumowania na poziomie sesji

Połącz wszystkie obliczone metryki — czas trwania, liczbę zdarzeń, zdarzenie wejściowe, zdarzenie wyjściowe i dzień tygodnia — w jeden zbiorczy DataFrame na poziomie sesji. Tabela ta stanowi podstawę analizy lejka, modelowania utrzymania użytkowników i generowania cech na potrzeby uczenia maszynowego. Każdy wiersz reprezentuje jedną sesję, a nie pojedyncze surowe zdarzenie.

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

Szybkie sprawdzenie

Sprawdź swoją znajomość zagadnień analizy danych z tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczyłeś się: sortować zdarzenia chronologicznie i wyznaczać granice sesji na podstawie odstępów czasowych, obliczać czas trwania sesji i liczbę zdarzeń w każdej sesji, a także tworzyć tabelę podsumowania na poziomie sesji do dalszej analizy. Następnie zajmiemy się analizą lejka, aby mierzyć konwersję między kolejnymi etapami produktu.

Bezpłatny start

Ucz się Python dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Tworzenie sesji i sekwencjonowanie zdarzeń” jest bezpłatna?

Tak — pełny tekst „Tworzenie sesji i sekwencjonowanie zdarzeń” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Tworzenie sesji i sekwencjonowanie zdarzeń”?

Grupuj zdarzenia według użytkownika i sesji, obliczaj czas trwania sesji za pomocą działań na znacznikach czasu i sortuj zdarzenia chronologicznie. Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?

Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Tworzenie sesji i sekwencjonowanie zdarzeń”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?

Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Tworzenie sesji i sekwencjonowanie zdarzeń
  2. Analiza lejka
  3. Tabela retencji kohort
  4. Wizualizacja ścieżek użytkowników
← Powrót do Pandas & NumPy Academy