Förberedande dataanalys
Det här dokumentet innehåller några grundläggande exempel och metodtips för att använda Data Distiller för att utforska och analysera data från en Python-anteckningsbok.
Komma igång
Innan du fortsätter med den här guiden kontrollerar du att du har skapat en anslutning till Data Distiller i din Python-anteckningsbok. I dokumentationen finns instruktioner om hur du ansluter en Python anteckningsbok till Data Distiller.
Hämta grundläggande statistik basic-statistics
Använd koden nedan för att hämta antalet rader och distinkta profiler i en datauppsättning.
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
Exempelutdata
Skapa en provversion av stora datamängder create-dataset-sample
Om datauppsättningen som du vill fråga är mycket stor, eller om exakta resultat från undersökningsfrågor inte behövs, använder du samplingsfunktionen som är tillgänglig för Data Distiller-frågor. Detta är en tvåstegsprocess:
- Först analyserar datauppsättningen för att skapa en provversion med en angiven samplingsproportion
- Fråga sedan efter den samplade versionen av datauppsättningen. Beroende på vilka funktioner du använder för den samplade datauppsättningen kanske du vill skala utdata till siffrorna i hela datauppsättningen
Skapa ett prov på 5 % create-sample
Exemplet nedan analyserar datauppsättningen och skapar ett 5 %-prov:
# 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")
Visa dina exempel view-sample
Du kan använda funktionen sample_meta
för att visa alla exempel som har skapats från en viss datauppsättning. Kodfragmentet nedan visar hur du använder funktionen 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
Exempelutdata:
Fråga ditt exempel query-sample-data
Du kan skicka frågor direkt till exempeltabellen genom att referera till exempeltabellnamnet från returnerade metadata. Du kan sedan multiplicera resultatet med samplingsförhållandet för att få en uppskattning.
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")
Exempelutdata
Approximate count: 1284600.0 using 5.0% sample
E-posttrattanalys email-funnel-analysis
En trattanalys är ett sätt att förstå de steg som krävs för att nå ett målresultat och hur många användare som får igenom varje steg. Exemplet nedan visar en enkel trattanalys av de steg som leder till att en användare prenumererar på ett nyhetsbrev. Prenumerationsresultatet representeras av händelsetypen web.formFilledOut
.
Kör först en fråga för att hämta antalet användare i varje steg.
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
Exempelutdata
Resultat av ritningsfråga plot-results
Därefter anger du frågeresultaten med hjälp av biblioteket 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()
Exempelutdata
Händelsekorrelationer event-correlations
En annan vanlig analys är att beräkna korrelationer mellan händelsetyper och händelsetyp för målkonvertering. I detta exempel representeras prenumerationshändelsen av web.formFilledOut
. I det här exemplet används de Spark-funktioner som är tillgängliga i Data Distiller-frågor för att utföra följande steg:
- Räkna antalet händelser för varje händelsetyp per profil.
- Sammanställ antalet för varje händelsetyp i alla profiler och beräkna korrelationer för varje händelsetyp med
web,formFilledOut
. - Omvandla bildrutan med antal och korrelationer till en tabell med Pearson-korrelationskoefficienter för varje funktion (antal händelsetyper) med målhändelsen.
- Visualisera resultatet i en teckning.
Funktionerna Spark samlar in data för att returnera en liten resultattabell, så att du kan köra den här typen av fråga på den fullständiga datauppsättningen.
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
Exempelutdata:
Omvandla raden till händelsetyp event-type-correlation
Omvandla sedan den enstaka dataraden i frågerutdata ovan till en tabell som visar korrelationen mellan varje händelsetyp och målprenumerationshändelsen:
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)
Exempelutdata:
webForms_EmailOpens
webForms_advertisingClicks
webForms_productViews
webForms_productPurchases
webForms_propositionDismisses
webForms_propositionInteracts
webForms_emailClicks
webForms_emailOpens
webForms_emailSends
webForms_webLinkClicks
webForms_webPageViews
Slutligen kan du visualisera korrelationer med biblioteket 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")
Nästa steg
Genom att läsa det här dokumentet har du lärt dig att använda Data Distiller för att utforska och analysera data från en Python-anteckningsbok. Nästa steg med att skapa funktionsledningar från Experience Platform till anpassade modeller i maskininlärningsmiljön är att skapa maskininlärningsfunktioner.