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

totalRows
distinctUsers
0
1276563
1276563

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:

sample_table_name
sample_dataset_id
parent_dataset_id
sample_type
sampling_rate
filter_condition_on_source_dataset
sample_num_rows
created
0
cmle_synth_data_experience_event_dataset_c…
650f7a09ed6c3e28d34d7fc2
64fb4d7a7d748828d304a2f4
uniforme
0,5
6427
23/09/2023
11:51:37

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

eventType
distinctUsers
distinctEvents
0
directMarketing.emailSent
598840
598840
1
directMarketing.emailOpened
239028
239028
2
web.webpagedetails.pageViews
120118
120118
3
advertising.impressions
119669
119669
4
directMarketing.emailClicked
51581
51581
5
commerce.productViews
37915
37915
6
decisioning.propositionDisplay
37650
37650
7
web.webinteraction.linkClicks
37581
37581
8
web.formFilledOut
17860
17860
9
advertising.clicks
7610
7610
10
decisioning.propositionInteract
2964
2964
11
decisioning.propositionDismiss
2889
2889
12
commerce.purchases
2858
2858

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

Infografía del canal de correo electrónico eventType.

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:

  1. Contar el número de eventos para cada tipo de evento por perfil.
  2. Agregue los recuentos de cada tipo de evento entre perfiles y calcule las correlaciones de cada tipo de evento con web,formFilledOut.
  3. 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.
  4. 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:

webFormsFilled_totalUsers
advertisingClicks_totalUsers
productViews_totalUsers
productPurchases_totalUsers
propositionDismisses_totalUsers
propositionDisplay_totalUsers
propositionInteracts_totalUsers
emailClicks_totalUsers
emailOpens_totalUsers
webLinksClicks_totalUsers
webForms_advertisingClicks
webForms_productViews
webForms_productPurchases
webForms_propositionDismisses
webForms_propositionInteracts
webForms_emailClicks
webForms_emailOpens
webForms_emailSends
webForms_webLinkClicks
webForms_webPageViews
0
17860
7610
37915
0
2889
37650
2964
51581
239028
37581
0,026805
0,2779
Ninguna
0,06014
0,143656
0,305657
0,218874
0,192836
0,259353
Ninguna

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:

variable
valor
característica
pearsonCorrelation
0
webForms_EmailOpens
0,218874
EmailOpens
0,218874
1
webForms_advertisingClicks
0,026805
advertisingClicks
0,026805
2
webForms_productViews
0,277900
productViews
0,277900
3
webForms_productPurchases
0,000000
productPurchases
0,000000
4
webForms_propositionDismisses
0,060140
propositionDismisses
0,060140
5
webForms_propositionInteracts
0,143656
propositionInteracts
0,143656
6
webForms_emailClicks
0,305657
emailClicks
0,305657
7
webForms_emailOpens
0,218874
emailOpens
0,218874
8
webForms_emailSends
0,192836
emailSends
0,192836
9
webForms_webLinkClicks
0,259353
webLinkClicks
0,259353
10
webForms_webPageViews
0,000000
webPageViews
0,000000

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")

Gráfico de barras de la correlación de Pearson de eventos de resultados de eventos

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.

recommendation-more-help
ccf2b369-4031-483f-af63-a93b5ae5e3fb