0Pricing
Pandas & NumPy Academy · Lezione

Sessionizzazione e sequenza degli eventi

Raggruppi gli eventi per utente e sessione, calcoli la durata della sessione con l'aritmetica dei timestamp e ordini gli eventi cronologicamente.

Sessionizzazione e sequenza degli eventi è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Comprendere i dati clickstream

Un dataset clickstream registra ogni azione dell'utente: visualizzazioni di pagine, clic sui pulsanti e acquisti; ogni azione è rappresentata da una riga con un user_id, un session_id, un event_type e un timestamp. Prima di calcolare qualsiasi metrica, deve comprendere lo schema. Esegua df.dtypes e df.sample(5) per visualizzare alcune righe rappresentative e verificare che la colonna dei timestamp sia stata interpretata come datetime e non come stringa.

import pandas as pd

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

Ordinamento cronologico degli eventi

L'analisi degli eventi non è significativa se le righe non sono ordinate temporalmente. Ordini per user_id e poi per timestamp, in modo che tutti gli eventi dello stesso utente compaiano consecutivamente e nella sequenza corretta. Usi sort_values(['user_id', 'timestamp']) e reimposti l'indice per ottenere una sequenza intera ordinata e pulita.

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

Definizione dei confini delle sessioni

Se le sessioni non sono preetichettate, può definirle usando un intervallo di inattività di 30 minuti: una nuova sessione inizia ogni volta che il tempo trascorso dall'evento precedente dello stesso utente supera i 30 minuti. Usi groupby('user_id')['timestamp'].diff() per calcolare l'intervallo tra eventi consecutivi, quindi contrassegni come inizi di sessione le righe in cui l'intervallo supera la soglia.

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

Calcolo della durata delle sessioni

La durata di una sessione è l'intervallo tra il primo e l'ultimo evento della sessione. Raggruppi per user_id e session_id e calcoli max - min sulla colonna dei timestamp. Converta il Timedelta risultante in minuti con .dt.total_seconds() / 60 per ottenere una metrica di facile interpretazione. Le sessioni con durata pari a zero corrispondono a visite con un solo evento.

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

Conteggio degli eventi per sessione

Il numero di eventi in una sessione è un indicatore indiretto del coinvolgimento dell'utente. Una sessione con 20 eventi probabilmente indica un'esplorazione più approfondita rispetto a una con 2 eventi. Usi groupby(['user_id', 'session_id']).size() per contare le righe di ciascun gruppo e assegni al risultato il nome event_count. Unisca poi questo riepilogo alla tabella delle sessioni per ottenere un dataset completo a livello di sessione.

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

print(session_df.describe())

Identificazione del primo e dell'ultimo evento

Il primo evento di una sessione mostra il punto di ingresso, ad esempio la home page o la pagina dei risultati di ricerca, mentre l'ultimo evento mostra il comportamento in uscita, ad esempio un acquisto o un abbandono. Usi groupby().first() e groupby().last() sul DataFrame ordinato. Queste colonne di ingresso e uscita sono input essenziali per l'analisi del funnel e della retention.

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

Numerazione degli eventi all'interno di una sessione

L'assegnazione di un numero progressivo agli eventi all'interno di ogni sessione consente di analizzare le sequenze di eventi più comuni. Usi groupby(['user_id', 'session_id']).cumcount() + 1 per creare una colonna event_rank. Il filtro su event_rank == 1 restituisce l'evento di atterraggio; il filtro sul rango massimo restituisce l'evento di uscita di ogni sessione.

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

Calcolo dell'intervallo tra gli eventi

L'intervallo tra gli eventi, ovvero il tempo tra eventi consecutivi all'interno di una sessione, mostra la rapidità con cui gli utenti si muovono all'interno del prodotto. Lo calcoli con groupby(['user_id', 'session_id'])['timestamp'].diff(). Intervalli lunghi tra specifici tipi di evento possono indicare esitazione o confusione in quel passaggio, segnalando un'opportunità di miglioramento dell'esperienza utente.

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

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

Numero di sessioni per utente

Il numero di sessioni per utente misura la frequenza con cui ciascun utente ritorna. Gli utenti assidui con molte sessioni contribuiscono in modo significativo ai KPI di retention. Calcoli il numero di sessioni per utente con df.groupby('user_id')['session_id'].nunique(). Segmenti gli utenti in visitatori occasionali, utenti saltuari e utenti frequenti usando pd.qcut() sul numero di sessioni.

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

Distribuzione delle sessioni per giorno della settimana

Capire quali giorni della settimana generano il maggior numero di sessioni aiuta a programmare rilasci del prodotto, campagne email e il potenziamento dei server. Estragga day_of_week dal timestamp di inizio della sessione e raggruppi in base a questo valore. La conversione dei valori interi (0=lunedì, 6=domenica) nei nomi dei giorni rende l'output più leggibile nei report e nei grafici.

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)

Creazione di una tabella riepilogativa a livello di sessione

Riunisca tutte le metriche calcolate — durata, numero di eventi, evento di ingresso, evento di uscita e giorno della settimana — in un unico DataFrame riepilogativo a livello di sessione. Questa tabella costituisce la base per l'analisi del funnel, la modellazione della retention e la generazione di feature per il machine learning. Ogni riga rappresenta una sessione, non un evento grezzo.

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

Verifica rapida

Verifichi la Sua comprensione dei concetti di analisi dei dati trattati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato a: ordinare cronologicamente gli eventi e dedurre i confini delle sessioni dagli intervalli temporali, calcolare la durata delle sessioni e il numero di eventi per sessione e creare una tabella riepilogativa a livello di sessione per le analisi successive. Ora esploreremo l'analisi del funnel per misurare la conversione tra le diverse fasi del prodotto.

Domande Frequenti

La lezione «Sessionizzazione e sequenza degli eventi» è gratuita?

Sì — il testo completo di «Sessionizzazione e sequenza degli eventi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Cosa imparerò in «Sessionizzazione e sequenza degli eventi»?

Raggruppi gli eventi per utente e sessione, calcoli la durata della sessione con l'aritmetica dei timestamp e ordini gli eventi cronologicamente. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?

Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Sessionizzazione e sequenza degli eventi»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?

Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Sessionizzazione e sequenza degli eventi
  2. Analisi del funnel
  3. Tabella di retention per coorte
  4. Visualizzare i percorsi degli utenti
← Torna a Pandas & NumPy Academy