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.
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.
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
- Tworzenie sesji i sekwencjonowanie zdarzeń
- Analiza lejka
- Tabela retencji kohort
- Wizualizacja ścieżek użytkowników