Análisis exploratorio de datos
Este documento proporciona algunos ejemplos básicos y prácticas recomendadas para utilizar Data Distiller con el fin de explorar y analizar datos de un bloc de notas de Python.
Primeros pasos
Antes de continuar con esta guía, asegúrese de haber creado una conexión con Data Distiller en el bloc de notas Python. Consulte la documentación para obtener instrucciones sobre cómo conectar un bloc de notas Python a Data Distiller.
Adquisición de estadísticas básicas basic-statistics
Utilice el siguiente código para recuperar el número de filas y perfiles distintos en un conjunto de datos.
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
Salida de ejemplo
Creación de una versión de muestra de conjuntos de datos grandes create-dataset-sample
Si el conjunto de datos que desea consultar es muy grande o si no se necesitan resultados exactos de consultas exploratorias, utilice la funcionalidad de muestreo disponible para las consultas de Data Distiller. Este es un proceso de dos pasos:
- En primer lugar, analice el conjunto de datos para crear una versión muestreada con una proporción de muestreo especificada
- A continuación, consulte la versión muestreada del conjunto de datos. Según las funciones que aplique al conjunto de datos muestreado, es posible que desee escalar la salida a los números del conjunto de datos completo
Crear una muestra al 5 % create-sample
El ejemplo siguiente analiza el conjunto de datos y crea una muestra 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")
Ver sus muestras view-sample
Puede utilizar la función sample_meta
para ver cualquier muestra que se haya creado a partir de un conjunto de datos determinado. El siguiente fragmento de código muestra cómo utilizar la función 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
Salida de ejemplo:
Consulte la muestra query-sample-data
Puede consultar directamente el ejemplo haciendo referencia al nombre de la tabla de ejemplo a partir de los metadatos devueltos. A continuación, puede multiplicar los resultados por la proporción de muestreo para obtener una estimación.
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")
Salida de ejemplo
Approximate count: 1284600.0 using 5.0% sample
Análisis de canal de correo electrónico email-funnel-analysis
Un análisis de canal es un método para comprender los pasos necesarios para alcanzar un resultado objetivo y cuántos usuarios pasan por cada uno de esos pasos. El ejemplo siguiente ilustra un análisis de canal sencillo de los pasos que llevan a que un usuario se suscriba a un boletín informativo. El resultado de la suscripción está representado por un tipo de evento de web.formFilledOut
.
En primer lugar, ejecute una consulta para obtener el número de usuarios en cada paso.
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
Salida de ejemplo
Trazar resultados de consulta plot-results
A continuación, trace los resultados de la consulta utilizando la biblioteca 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()
Salida de ejemplo
Correlaciones de eventos event-correlations
Otro análisis común es calcular las correlaciones entre los tipos de evento y un tipo de evento de conversión de destino. En este ejemplo, el evento de suscripción está representado por web.formFilledOut
. Este ejemplo utiliza las funciones Spark disponibles en las consultas de Data Distiller para realizar los pasos siguientes:
- Contar el número de eventos para cada tipo de evento por perfil.
- Agregue los recuentos de cada tipo de evento entre perfiles y calcule las correlaciones de cada tipo de evento con
web,formFilledOut
. - Transforme el marco de datos de recuentos y correlaciones en una tabla de coeficientes de correlación de Pearson de cada función (recuentos de tipo de evento) con el evento de destino.
- Visualice los resultados en un diagrama.
Las funciones Spark agregan los datos para devolver una pequeña tabla de resultados, de modo que puede ejecutar este tipo de consulta en todo el conjunto de datos.
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
Salida de ejemplo:
Transformar fila en correlación de tipo de evento event-type-correlation
A continuación, transforme la única fila de datos de la salida de consulta anterior en una tabla que muestre las correlaciones de cada tipo de evento con el evento de suscripción de destino:
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)
Salida de ejemplo:
webForms_EmailOpens
webForms_advertisingClicks
webForms_productViews
webForms_productPurchases
webForms_propositionDismisses
webForms_propositionInteracts
webForms_emailClicks
webForms_emailOpens
webForms_emailSends
webForms_webLinkClicks
webForms_webPageViews
Finalmente, puede visualizar las correlaciones con la biblioteca 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")
Pasos siguientes
Al leer este documento, ha aprendido a utilizar Data Distiller para explorar y analizar datos de un bloc de notas Python. El siguiente paso para crear canalizaciones de características de Experience Platform para alimentar modelos personalizados en su entorno de aprendizaje automático es crear funciones de ingeniería para aprendizaje automático.