Análise exploratória de dados
Este documento fornece alguns exemplos básicos e práticas recomendadas para usar o Data Distiller para explorar e analisar dados de um bloco de anotações Python.
Introdução
Antes de continuar com este guia, verifique se você criou uma conexão com o Data Distiller no bloco de anotações Python. Consulte a documentação para obter instruções sobre como conectar um bloco de anotações Python ao Data Distiller.
Adquirir estatísticas básicas basic-statistics
Use o código abaixo para recuperar o número de linhas e perfis distintos em um conjunto de dados.
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
Exemplo de saída
Criar uma versão de amostra de conjuntos de dados grandes create-dataset-sample
Se o conjunto de dados que você deseja consultar for muito grande, ou se os resultados exatos das consultas exploratórias não forem necessários, use a funcionalidade de amostragem disponível para consultas do Data Distiller. Este é um processo de duas etapas:
- Primeiro, analise o conjunto de dados para criar uma versão de amostra com uma taxa de amostragem especificada
- Em seguida, consulte a versão de amostra do conjunto de dados. Dependendo das funções aplicadas ao conjunto de dados de amostra, talvez você queira dimensionar a saída para os números para o conjunto de dados completo
Criar uma amostra de 5% create-sample
O exemplo abaixo analisa o conjunto de dados e cria uma amostra 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")
Veja suas amostras view-sample
Você pode usar a função sample_meta
para exibir quaisquer amostras que foram criadas a partir de um determinado conjunto de dados. O trecho de código abaixo demonstra como usar a função 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
Exemplo de saída:
Consulte sua amostra query-sample-data
Você pode consultar sua amostra diretamente referenciando o nome da tabela de exemplo dos metadados retornados. Você pode multiplicar os resultados pela taxa de amostragem para obter uma estimativa.
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")
Exemplo de saída
Approximate count: 1284600.0 using 5.0% sample
Análise de funil de email email-funnel-analysis
Uma análise de funil é um método para entender as etapas necessárias para atingir um resultado desejado e quantos usuários passam por cada uma dessas etapas. O exemplo abaixo ilustra uma simples análise de funil das etapas que levam um usuário a assinar um boletim informativo. A assinatura é representada por um tipo de evento de web.formFilledOut
.
Primeiro, execute uma query para obter o número de usuários em cada etapa.
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
Exemplo de saída
Plotar resultados da consulta plot-results
Em seguida, plote os resultados da consulta usando a 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()
Exemplo de saída
Correlações de evento event-correlations
Outra análise comum é calcular correlações entre tipos de evento e um tipo de evento de conversão de destino. Neste exemplo, o evento de assinatura é representado por web.formFilledOut
. Este exemplo usa as funções Spark disponíveis nas consultas do Data Distiller para realizar as seguintes etapas:
- Conte o número de eventos para cada tipo de evento por perfil.
- Agregar as contagens de cada tipo de evento nos perfis e calcular as correlações de cada tipo de evento com
web,formFilledOut
. - Transforme o quadro de dados de contagens e correlações em uma tabela de coeficientes de correlação Pearson de cada recurso (contagens do tipo de evento) com o evento de destino.
- Visualizar os resultados em um gráfico.
As funções Spark agregam os dados para retornar uma pequena tabela de resultados, de modo que você possa executar esse tipo de consulta no conjunto de dados completo.
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
Exemplo de saída:
Transformar linha em correlação de tipo de evento event-type-correlation
Em seguida, transforme a única linha de dados na saída de query acima, em uma tabela que mostre as correlações de cada tipo de evento com o evento de subscrição de target:
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)
Exemplo de saída:
webForms_EmailOpens
webForms_advertisingClicks
webForms_productViews
webForms_productPurchases
webForms_propositionDismisses
webForms_propositionInteracts
webForms_emailClicks
webForms_emailOpens
webForms_emailSends
webForms_webLinkClicks
webForms_webPageViews
Finalmente, você pode visualizar as correlações com a 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")
Próximas etapas
Ao ler este documento, você aprendeu a usar o Data Distiller para explorar e analisar dados de um bloco de anotações Python. A próxima etapa na criação de pipelines de recursos, do Experience Platform para alimentar modelos personalizados no ambiente de aprendizado de máquina, é projetar recursos para aprendizado de máquina.