Analyse exploratoire des données
Créé pour :
- Utilisateur ou utilisatrice
- Développeur
Ce document fournit quelques exemples de base et des bonnes pratiques pour utiliser Data Distiller afin d’explorer et d’analyser les données d’un notebook Python.
Prise en main
Avant de poursuivre avec ce guide, assurez-vous d’avoir créé une connexion à Data Distiller dans votre notebook Python. Consultez la documentation pour obtenir des instructions sur la façon de connecter un Python notebook à Data Distiller.
Acquisition des statistiques de base
Utilisez le code ci-dessous pour récupérer le nombre de lignes et de profils distincts dans un jeu de données.
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
Exemple de sortie
Création d’une version échantillonnée de jeux de données volumineux
Si le jeu de données que vous souhaitez interroger est très volumineux ou si les résultats exacts des requêtes exploratoires ne sont pas nécessaires, utilisez la fonctionnalité d’échantillonnage disponible pour les requêtes Data Distiller. Il s’agit d’un processus en deux étapes :
- Tout d’abord, analysez le jeu de données pour créer une version échantillonnée avec un taux d’échantillonnage spécifié.
- Ensuite, interrogez la version échantillonnée du jeu de données. Selon les fonctions que vous appliquez au jeu de données échantillonné, vous pouvez mettre à l’échelle la sortie avec les nombres dans le jeu de données complet.
Création d’un échantillon de 5 %
L’exemple ci-dessous analyse le jeu de données et crée un exemple de 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")
Afficher vos exemples
Vous pouvez utiliser la fonction sample_meta
pour afficher les exemples qui ont été créés à partir d’un jeu de données donné. Le fragment de code ci-dessous montre comment utiliser la fonction 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
Exemple de sortie :
Interrogation de votre exemple
Vous pouvez directement interroger votre exemple en référençant le nom de l’exemple de tableau à partir des métadonnées renvoyées. Vous pouvez ensuite multiplier les résultats par le ratio d’échantillonnage pour obtenir une estimation.
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")
Exemple de sortie
Approximate count: 1284600.0 using 5.0% sample
Analyse de l’entonnoir des emails
Une analyse d’entonnoir est une méthode permettant de comprendre les étapes nécessaires pour atteindre un résultat cible et le nombre d’utilisateurs qui passent par chacune de ces étapes. L’exemple ci-dessous illustre une analyse simple de l’entonnoir des étapes menant à un utilisateur s’abonnant à une newsletter. Le résultat de l’abonnement est représenté par un type d’événement web.formFilledOut
.
Commencez par exécuter une requête pour obtenir le nombre d’utilisateurs à chaque étape.
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
Exemple de sortie
Traiter les résultats des requêtes
Ensuite, tracez les résultats de la requête à l’aide de la bibliothèque 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()
Exemple de sortie
Corrélations des événements
Une autre analyse courante consiste à calculer les corrélations entre les types d’événement et un type d’événement de conversion cible. Dans cet exemple, l’événement d’abonnement est représenté par web.formFilledOut
. Cet exemple utilise les fonctions Spark disponibles dans les requêtes Data Distiller pour réaliser les étapes suivantes :
- Comptez le nombre d’événements pour chaque type d’événement par profil.
- Agrégez le nombre de chaque type d’événement sur les profils et calculez les corrélations de chaque type d’événement avec
web,formFilledOut
. - Transformez le cadre de données des nombres et des corrélations en un tableau des coefficients de corrélation Pearson de chaque fonctionnalité (nombre de types d’événement) avec l’événement cible.
- Visualisez les résultats dans un graphique.
Les fonctions Spark regroupent les données pour renvoyer un petit tableau de résultats, de sorte que vous pouvez exécuter ce type de requête sur le jeu de données complet.
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
Exemple de sortie :
Transforme une ligne en corrélation de type d’événement
Ensuite, transformez la seule ligne de données dans la sortie de requête ci-dessus, en un tableau présentant les corrélations de chaque type d’événement avec l’événement d’abonnement cible :
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)
Exemple de sortie :
webForms_EmailOpens
webForms_advertisingClicks
webForms_productViews
webForms_productPurchases
webForms_propositionDismisses
webForms_propositionInteracts
webForms_emailClicks
webForms_emailOpens
webForms_emailSends
webForms_webLinkClicks
webForms_webPageViews
Enfin, vous pouvez visualiser les corrélations avec la bibliothèque 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")
Étapes suivantes
En lisant ce document, vous avez appris à utiliser Data Distiller pour explorer et analyser les données d’un notebook Python. L’étape suivante de la création de pipelines de fonctionnalités à partir d’Experience Platform pour alimenter les modèles personnalisés dans votre environnement d’apprentissage automatique est de créer des fonctionnalités pour l’apprentissage automatique.