Analisi esplorativa dei dati
In questo documento vengono forniti alcuni esempi di base e best practice per l'utilizzo di Data Distiller per esplorare e analizzare i dati di un blocco appunti Python.
Guida introduttuva
Prima di continuare con questa guida, verificare di aver creato una connessione a Data Distiller nel blocco appunti Python. Per istruzioni su come collegare un blocco appunti Python a Data Distiller, vedere la documentazione.
Acquisire statistiche di base basic-statistics
Utilizza il codice seguente per recuperare il numero di righe e profili distinti in un set di dati.
table_name = 'ecommerce_events'
basic_statistics_query = f"""
SELECT
COUNT(_id) as "totalRows",
COUNT(DISTINCT _id) as "distinctUsers"
FROM {table_name}"""
df = qs_cursor.query(basic_statistics_query, output="dataframe")
df
Output di esempio
Creare una versione campionata di set di dati di grandi dimensioni create-dataset-sample
Se il set di dati che si desidera interrogare è molto grande o se non sono necessari risultati esatti da query esplorative, utilizzare la funzionalità di campionamento disponibile per le query di Data Distiller. Si tratta di un processo in due fasi:
- Innanzitutto, analizza il set di dati per creare una versione campionata con una proporzione di campionamento specificata
- Esegui quindi una query sulla versione campionata del set di dati. A seconda delle funzioni applicate al set di dati campionato, può essere opportuno scalare l’output in base ai numeri fino al set di dati completo
Creare un campione del 5% create-sample
L’esempio seguente analizza il set di dati e crea un campione del 5%:
# A sampling rate of 10 is 100% in Query Service, so for 5% use a sampling rate 0.5
sampling_rate = 0.5
analyze_table_query=f"""
SET aqp=true;
ANALYZE TABLE {table_name} TABLESAMPLE SAMPLERATE {sampling_rate}"""
qs_cursor.query(analyze_table_query, output="raw")
Visualizzare gli esempi view-sample
È possibile utilizzare la funzione sample_meta
per visualizzare tutti i campioni creati da un determinato set di dati. Il frammento di codice seguente illustra come utilizzare la funzione sample_meta
.
sampled_version_of_table_query = f'''SELECT sample_meta('{table_name}')'''
df_samples = qs_cursor.query(sampled_version_of_table_query, output="dataframe")
df_samples
Output di esempio:
Eseguire una query sull'esempio query-sample-data
Puoi eseguire direttamente una query sull’esempio facendo riferimento al nome della tabella di esempio dai metadati restituiti. È quindi possibile moltiplicare i risultati per il rapporto di campionamento per ottenere una stima.
sample_table_name = df_samples[df_samples["sampling_rate"] == sampling_rate]["sample_table_name"].iloc[0]
count_query=f'''SELECT count(*) as cnt from {sample_table_name}'''
df = qs_cursor.query(count_query, output="dataframe")
# Divide by the sampling rate to extrapolate to the full dataset
approx_count = df["cnt"].iloc[0] / (sampling_rate / 100)
print(f"Approximate count: {approx_count} using {sampling_rate *10}% sample")
Output di esempio
Approximate count: 1284600.0 using 5.0% sample
Analisi del funnel e-mail email-funnel-analysis
Un’analisi funnel è un metodo per comprendere i passaggi necessari per raggiungere un risultato target e quanti utenti passano attraverso ciascuno di questi passaggi. L’esempio seguente illustra una semplice analisi funnel dei passaggi che conducono l’utente ad abbonarsi a una newsletter. Il risultato della sottoscrizione è rappresentato da un tipo di evento web.formFilledOut
.
Innanzitutto, esegui una query per ottenere il numero di utenti a ogni passaggio.
simple_funnel_analysis_query = f'''SELECT eventType, COUNT(DISTINCT _id) as "distinctUsers",COUNT(_id) as "distinctEvents" FROM {table_name} GROUP BY eventType ORDER BY distinctUsers DESC'''
funnel_df = qs_cursor.query(simple_funnel_analysis_query, output="dataframe")
funnel_df
Output di esempio
Tracciare i risultati della query plot-results
Quindi, tracciare i risultati della query utilizzando la libreria Python plotly
:
import plotly.express as px
email_funnel_events = ["directMarketing.emailSent", "directMarketing.emailOpened", "directMarketing.emailClicked", "web.formFilledOut"]
email_funnel_df = funnel_df[funnel_df["eventType"].isin(email_funnel_events)]
fig = px.funnel(email_funnel_df, y='eventType', x='distinctUsers')
fig.show()
Output di esempio
Correlazioni tra eventi event-correlations
Un’altra analisi comune consiste nel calcolare le correlazioni tra i tipi di evento e un tipo di evento di conversione target. In questo esempio, l'evento di sottoscrizione è rappresentato da web.formFilledOut
. In questo esempio vengono utilizzate le funzioni Spark disponibili nelle query di Data Distiller per eseguire i passaggi seguenti:
- Conteggia il numero di eventi per ogni tipo di evento in base al profilo.
- Aggregare i conteggi di ciascun tipo di evento tra i profili e calcolare le correlazioni di ciascun tipo di evento con
web,formFilledOut
. - Trasforma il dataframe di conteggi e correlazioni in una tabella di coefficienti di correlazione Pearson di ogni funzione (conteggi dei tipi di evento) con l’evento target.
- Visualizzare i risultati in un plot.
Le funzioni Spark aggregano i dati per restituire una piccola tabella di risultati, in modo da poter eseguire questo tipo di query sull'intero set di dati.
large_correlation_query=f'''
SELECT SUM(webFormsFilled) as webFormsFilled_totalUsers,
SUM(advertisingClicks) as advertisingClicks_totalUsers,
SUM(productViews) as productViews_totalUsers,
SUM(productPurchases) as productPurchases_totalUsers,
SUM(propositionDismisses) as propositionDismisses_totaUsers,
SUM(propositionDisplays) as propositionDisplays_totaUsers,
SUM(propositionInteracts) as propositionInteracts_totalUsers,
SUM(emailClicks) as emailClicks_totalUsers,
SUM(emailOpens) as emailOpens_totalUsers,
SUM(webLinkClicks) as webLinksClicks_totalUsers,
SUM(webPageViews) as webPageViews_totalusers,
corr(webFormsFilled, emailOpens) as webForms_EmailOpens,
corr(webFormsFilled, advertisingClicks) as webForms_advertisingClicks,
corr(webFormsFilled, productViews) as webForms_productViews,
corr(webFormsFilled, productPurchases) as webForms_productPurchases,
corr(webFormsFilled, propositionDismisses) as webForms_propositionDismisses,
corr(webFormsFilled, propositionInteracts) as webForms_propositionInteracts,
corr(webFormsFilled, emailClicks) as webForms_emailClicks,
corr(webFormsFilled, emailOpens) as webForms_emailOpens,
corr(webFormsFilled, emailSends) as webForms_emailSends,
corr(webFormsFilled, webLinkClicks) as webForms_webLinkClicks,
corr(webFormsFilled, webPageViews) as webForms_webPageViews
FROM(
SELECT _{tenant_id}.cmle_id as userID,
SUM(CASE WHEN eventType='web.formFilledOut' THEN 1 ELSE 0 END) as webFormsFilled,
SUM(CASE WHEN eventType='advertising.clicks' THEN 1 ELSE 0 END) as advertisingClicks,
SUM(CASE WHEN eventType='commerce.productViews' THEN 1 ELSE 0 END) as productViews,
SUM(CASE WHEN eventType='commerce.productPurchases' THEN 1 ELSE 0 END) as productPurchases,
SUM(CASE WHEN eventType='decisioning.propositionDismiss' THEN 1 ELSE 0 END) as propositionDismisses,
SUM(CASE WHEN eventType='decisioning.propositionDisplay' THEN 1 ELSE 0 END) as propositionDisplays,
SUM(CASE WHEN eventType='decisioning.propositionInteract' THEN 1 ELSE 0 END) as propositionInteracts,
SUM(CASE WHEN eventType='directMarketing.emailClicked' THEN 1 ELSE 0 END) as emailClicks,
SUM(CASE WHEN eventType='directMarketing.emailOpened' THEN 1 ELSE 0 END) as emailOpens,
SUM(CASE WHEN eventType='directMarketing.emailSent' THEN 1 ELSE 0 END) as emailSends,
SUM(CASE WHEN eventType='web.webinteraction.linkClicks' THEN 1 ELSE 0 END) as webLinkClicks,
SUM(CASE WHEN eventType='web.webinteraction.pageViews' THEN 1 ELSE 0 END) as webPageViews
FROM {table_name}
GROUP BY userId
)
'''
large_correlation_df = qs_cursor.query(large_correlation_query, output="dataframe")
large_correlation_df
Output di esempio:
Trasforma riga in correlazione tipo evento event-type-correlation
Quindi, trasforma la singola riga di dati nell’output della query precedente in una tabella che mostra le correlazioni di ciascun tipo di evento con l’evento di abbonamento di destinazione:
cols = large_correlation_df.columns
corrdf = large_correlation_df[[col for col in cols if ("webForms_" in col)]].melt()
corrdf["feature"] = corrdf["variable"].apply(lambda x: x.replace("webForms_", ""))
corrdf["pearsonCorrelation"] = corrdf["value"]
corrdf.fillna(0)
Output di esempio:
webForms_EmailOpens
webForms_advertisingClicks
webForms_productViews
webForms_productPurchases
webForms_propositionDismisses
webForms_propositionInteracts
webForms_emailClicks
webForms_emailOpens
webForms_emailSends
webForms_webLinkClicks
webForms_webPageViews
Infine, è possibile visualizzare le correlazioni con la libreria matplotlib
Python:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(5,10))
sns.barplot(data=corrdf.fillna(0), y="feature", x="pearsonCorrelation")
ax.set_title("Pearson Correlation of Events with the outcome event")
Passaggi successivi
Dopo aver letto questo documento, hai imparato a utilizzare Data Distiller per esplorare e analizzare i dati di un blocco appunti Python. Il passaggio successivo nella creazione di pipeline di funzionalità da Experience Platform per alimentare modelli personalizzati nell'ambiente di apprendimento automatico è funzionalità di ingegneria per l'apprendimento automatico.