Explorative Datenanalyse
Dieses Dokument enthält einige grundlegende Beispiele und Best Practices für die Verwendung von Data Distiller zur Untersuchung und Analyse von Daten aus einem Python -Notebook.
Erste Schritte
Bevor Sie mit diesem Handbuch fortfahren, stellen Sie sicher, dass Sie eine Verbindung zu Data Distiller in Ihrem Python -Notebook hergestellt haben. Anweisungen zum Verbinden eines Python Notebooks mit Data Distiller🔗 finden Sie in der Dokumentation .
Abrufen von Basisstatistiken basic-statistics
Verwenden Sie den unten stehenden Code, um die Anzahl der Zeilen und eindeutigen Profile in einem Datensatz abzurufen.
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
Beispielausgabe
Erstellen einer Stichprobenversion großer Datensätze create-dataset-sample
Wenn der Datensatz, den Sie abfragen möchten, sehr groß ist oder wenn keine genauen Ergebnisse aus explorativen Abfragen erforderlich sind, verwenden Sie die Sampling-Funktion, die für Data Distiller-Abfragen verfügbar ist. Dies ist ein zweistufiger Prozess:
- Analysieren Sie zunächst den Datensatz mit analyze , um eine Version mit einer Stichprobe mit einem bestimmten Stichprobenverhältnis zu erstellen.
- Abfragen Sie als Nächstes die beprobte Version des Datensatzes. Je nach den Funktionen, die Sie auf den Datensatz mit gesampelten Datensätzen anwenden, können Sie die Ausgabe auf die Zahlen auf den vollständigen Datensatz skalieren
Beispiel für 5 % erstellen create-sample
Im folgenden Beispiel wird der Datensatz analysiert und ein 5 %-Beispiel erstellt:
# 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")
Beispiele anzeigen view-sample
Mit der Funktion "sample_meta
"können Sie alle Samples anzeigen, die aus einem bestimmten Datensatz erstellt wurden. Der folgende Codeausschnitt zeigt die Verwendung der Funktion 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
Beispielausgabe:
Beispiel abfragen query-sample-data
Sie können Ihr Beispiel direkt abfragen, indem Sie auf den Namen der Beispieltabelle aus den zurückgegebenen Metadaten verweisen. Anschließend können Sie die Ergebnisse mit dem Stichprobenverhältnis multiplizieren, um eine Schätzung zu erhalten.
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")
Beispielausgabe
Approximate count: 1284600.0 using 5.0% sample
E-Mail-Trichteranalyse email-funnel-analysis
Eine Trichteranalyse ist eine Methode, um die Schritte zu verstehen, die zum Erreichen eines Zielergebnisses erforderlich sind, und wie viele Benutzer jeden dieser Schritte durchlaufen. Das folgende Beispiel zeigt eine einfache Trichteranalyse der Schritte, die zu einem Benutzer führen, der einen Newsletter abonniert. Das Abonnementergebnis wird durch den Ereignistyp web.formFilledOut
dargestellt.
Führen Sie zunächst eine Abfrage aus, um die Anzahl der Benutzer bei jedem Schritt abzurufen.
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
Beispielausgabe
Plotabfrageergebnisse plot-results
Zeichnen Sie anschließend die Abfrageergebnisse mithilfe der Bibliothek Python plotly
auf:
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()
Beispielausgabe
Ereigniskorrelationen event-correlations
Eine weitere gängige Analyse besteht darin, Korrelationen zwischen Ereignistypen und einem Zielkonversionsereignistyp zu berechnen. In diesem Beispiel wird das Abonnementereignis durch web.formFilledOut
dargestellt. In diesem Beispiel werden die in den Data Distiller-Abfragen verfügbaren Spark-Funktionen verwendet, um die folgenden Schritte durchzuführen:
- Zählen Sie die Anzahl der Ereignisse für jeden Ereignistyp nach Profil.
- Aggregieren Sie die Zählungen der einzelnen Ereignistypen über Profile hinweg und berechnen Sie die Korrelationen der einzelnen Ereignistypen mit
web,formFilledOut
. - Wandeln Sie den Dataframe der Zählungen und Korrelationen in eine Tabelle der Pearson-Korrelationskoeffizienten jeder Funktion (Ereignistypzählungen) mit dem Zielereignis um.
- Visualisieren Sie die Ergebnisse in einem Diagramm.
Die Spark -Funktionen aggregieren die Daten, um eine kleine Tabelle mit Ergebnissen zurückzugeben, sodass Sie diese Art von Abfrage für den vollständigen Datensatz ausführen können.
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
Beispielausgabe:
Umwandeln von Zeilen in Korrelationen von Ereignistypen event-type-correlation
Wandeln Sie anschließend die einzelne Datenzeile in der oben stehenden Abfrageausgabe in eine Tabelle um, die die Korrelationen der einzelnen Ereignistypen mit dem Zielabonnement-Ereignis anzeigt:
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)
Beispielausgabe:
webForms_EmailOpens
webForms_advertisingClicks
webForms_productViews
webForms_productPurchases
webForms_propositionDismisses
webForms_propositionInteracts
webForms_emailClicks
webForms_emailOpens
webForms_emailSends
webForms_webLinkClicks
webForms_webPageViews
Schließlich können Sie die Korrelationen mit der Bibliothek matplotlib
Python visualisieren:
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ächste Schritte
Durch Lesen dieses Dokuments haben Sie erfahren, wie Sie mit Data Distiller Daten aus einem Python -Notebook analysieren und analysieren können. Der nächste Schritt beim Erstellen von Funktions-Pipelines von Experience Platform, um benutzerdefinierte Modelle in Ihrer maschinellen Lernumgebung zu speisen, besteht darin, Funktionen für maschinelles Lernen zu entwickeln.