Introducción

Antes de leer esta guía, revisa la JupyterLab guía del usuario para ver una introducción de alto nivel a JupyterLab y su función en Data Science Workspace. Además, si estás usando tus propios datos, revisa la documentación de acceso a datos en Jupyterlab blocs de notas. Esta guía contiene información importante sobre los límites de datos del bloc de notas.

Este bloc de notas usa un conjunto de datos de valores medios en forma de Adobe Analytics datos de eventos de experiencia encontrados en el Analytics Analysis Workspace. Para utilizar el cuaderno EDA, debe definir su tabla de datos con los siguientes valores target_table y target_table_id. Se pueden utilizar todos los valores medios conjunto de datos.

Para encontrar estos valores, seguir los pasos descritos en la sección escribir en un conjunto de datos en python del guía de acceso a datos de JupyterLab. El nombre conjunto de datos (target_table) se encuentra en el directorio conjunto de datos. Una vez que clic con el botón secundario la conjunto de datos de explorar o escribir datos en un bloc de notas, se proporciona un ID de conjunto de datos (target_table_id) en la entrada del código ejecutable.

Detección de datos

Esta sección contiene pasos de configuración y consultas de ejemplo que se utilizan para ver tendencias como las "diez ciudades principales por actividad de usuario" o los "diez productos más vistos".

Configuración de bibliotecas

JupyterLab admite varias bibliotecas. El siguiente código se puede pegar y ejecutar en una celda de código para recopilar e instalar todos los paquetes necesarios utilizados en este ejemplo. Puede utilizar paquetes adicionales o alternativos fuera de este ejemplo para su propio análisis de datos. Para obtener una lista de los paquetes admitidos, copie y pegue !pip list --format=columns en una celda nueva.

!pip install colorama
import chart_studio.plotly as py
import plotly.graph_objs as go
from plotly.offline import iplot
from scipy import stats
import numpy as np
import warnings
warnings.filterwarnings('ignore')
from scipy.stats import pearsonr
import matplotlib.pyplot as plt
from scipy.stats import pearsonr
import pandas as pd
import math
import re
import seaborn as sns
from datetime import datetime
import colorama
from colorama import Fore, Style
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
pd.set_option('display.width', 1000)
pd.set_option('display.expand_frame_repr', False)
pd.set_option('display.max_colwidth', -1)

Conectar con Adobe Experience Platform Query Service

JupyterLab en Platform le permite usar SQL en un bloc de notas Python para tener acceso a los datos a través de Servicio de consultas. El acceso a los datos a través de Query Service puede ser útil para tratar conjuntos de datos grandes debido a sus tiempos de ejecución superiores. Tenga en cuenta que la consulta de datos mediante Query Service tiene un límite de tiempo de procesamiento de diez minutos.

Antes de usar Query Service en JupyterLab, asegúrese de que tiene una comprensión de la Query Service sintaxis SQL.

Para utilizar el servicio de consultas en JupyterLab, primero debe crear una conexión entre su ordenador portátil de Python de trabajo y el servicio de consultas. Esto se puede lograr ejecutando la siguiente celda.

qs_connect()

Defina el conjunto de datos de valores medios para la exploración

Para comenzar a consultar y explorar datos, se debe proporcionar una tabla de conjuntos de datos de valores medios. Copie y reemplace los valores table_name y table_id con sus propios valores de tabla de datos.

target_table = "table_name"
target_table_id = "table_id"

Una vez completada, esta celda debería tener un aspecto similar al siguiente ejemplo:

target_table = "cross_industry_demo_midvalues"
target_table_id = "5f7c40ef488de5194ba0157a"

Explorar el conjunto de datos para las fechas disponibles

Con la celda proporcionada a continuación, puede ver el intervalo de fechas que abarca la tabla. El propósito de explorar la cantidad de días, la primera fecha y la última fecha, es ayudar a seleccionar un intervalo de fechas para un análisis posterior.

%%read_sql -c QS_CONNECTION
SELECT distinct Year(timestamp) as Year, Month(timestamp) as Month, count(distinct DAY(timestamp)) as Count_days, min(DAY(timestamp)) as First_date, max(DAY(timestamp)) as Last_date, count(timestamp) as Count_hits
from {target_table}
group by Month(timestamp), Year(timestamp)
order by Year, Month;

La ejecución de la celda produce el resultado siguiente:

resultado de fecha de consulta

Configurar fechas para la detección de conjuntos de datos

Después de determinar las fechas disponibles para la detección de conjuntos de datos, es necesario actualizar los parámetros siguientes. Las fechas configuradas en esta celda solo se utilizan para la detección de datos en forma de consultas. Las fechas se actualizan de nuevo a intervalos adecuados para el análisis de datos exploratorio más adelante en esta guía.

target_year = "2020" ## The target year
target_month = "02" ## The target month
target_day = "(01,02,03)" ## The target days

Descubrimiento de conjuntos de datos

Una vez que haya configurado todos sus parámetros, iniciado Query Servicey tenga un intervalo de fecha, estará listo para comenzar a leer filas de datos. Debe limitar el número de filas que lee.

from platform_sdk.dataset_reader import DatasetReader
from datetime import date
dataset_reader = DatasetReader(PLATFORM_SDK_CLIENT_CONTEXT, dataset_id=target_table_id)
# If you do not see any data or would like to expand the default date range, change the following query
Table = dataset_reader.limit(5).read()

Para vista el número de columnas disponibles en el conjunto de datos, utilice la celda siguiente:

print("\nNumber of columns:",len(Table.columns))

Para vista las filas del conjunto de datos, utilice la celda siguiente. En este ejemplo, el número de filas está limitado a cinco.

Table.head(5)

Salida de fila de tabla

Una vez que tenga una idea de qué datos contiene el conjunto de datos, puede ser valioso desglosar aún más el conjunto de datos. En este ejemplo, se enumeran los nombres de columna y los tipos de datos de cada una de las columnas, mientras que el resultado se utiliza para comprobar si el tipo de datos es correcto o no.

ColumnNames_Types = pd.DataFrame(Table.dtypes)
ColumnNames_Types = ColumnNames_Types.reset_index()
ColumnNames_Types.columns = ["Column_Name", "Data_Type"]
ColumnNames_Types

Nombre de columna y tipos de datos lista

Exploración de tendencias de conjuntos de datos

La sección siguiente contiene cuatro consultas de ejemplo que se usan para explorar tendencias y patrones en los datos. Los ejemplos que se proporcionan a continuación no son exhaustivos, pero cubren algunas de las características más comunes.

Recuento de actividad por hora para un día determinado

Este consulta analiza el número de acciones y clics a lo largo del día. El resultado se representa en forma de una tabla que contiene métricas en el recuento de actividad para cada hora del día.

%%read_sql query_2_df -c QS_CONNECTION

SELECT Substring(timestamp, 12, 2)                        AS Hour,
       Count(enduserids._experience.aaid.id) AS Count
FROM   {target_table}
WHERE  Year(timestamp) = {target_year}
       AND Month(timestamp) = {target_month}
       AND Day(timestamp) in {target_day}
GROUP  BY Hour
ORDER  BY Hour;

consulta 1 salida

Después de confirmar que el consulta funciona, los datos se pueden presentar en un gráfico univariado histograma para mayor claridad visual.

trace = go.Bar(
    x = query_2_df['Hour'],
    y = query_2_df['Count'],
    name = "Activity Count"
)

layout = go.Layout(
    title = 'Activity Count by Hour of Day',
    width = 1200,
    height = 600,
    xaxis = dict(title = 'Hour of Day'),
    yaxis = dict(title = 'Count')
)

fig = go.Figure(data = [trace], layout = layout)
iplot(fig)

gráfico de barras resultado para consulta 1

Las 10 páginas más vistas de un día determinado

Esta consulta analiza qué páginas son las más vistas de un día determinado. El resultado se representa en forma de tabla que contiene métricas sobre el nombre de página y el recuento de vistas de página.

%%read_sql query_4_df -c QS_CONNECTION

SELECT web.webpagedetails.name                 AS Page_Name,
       Sum(web.webpagedetails.pageviews.value) AS Page_Views
FROM   {target_table}
WHERE  Year(timestamp) = {target_year}
       AND Month(timestamp) = {target_month}
       AND Day(timestamp) in {target_day}
GROUP  BY web.webpagedetails.name
ORDER  BY page_views DESC
LIMIT  10;

Después de confirmar los trabajos de consulta, los datos se pueden presentar en un histograma de trazado univariado para una claridad visual.

trace = go.Bar(
    x = query_4_df['Page_Name'],
    y = query_4_df['Page_Views'],
    name = "Page Views"
)

layout = go.Layout(
    title = 'Top Ten Viewed Pages For a Given Day',
    width = 1000,
    height = 600,
    xaxis = dict(title = 'Page_Name'),
    yaxis = dict(title = 'Page_Views')
)

fig = go.Figure(data = [trace], layout = layout)
iplot(fig)

diez páginas más vistas

Diez ciudades principales agrupadas por actividad de usuario

Esta consulta analiza de qué ciudades se originan los datos.

%%read_sql query_6_df -c QS_CONNECTION

SELECT concat(placeContext.geo.stateProvince, ' - ', placeContext.geo.city) AS state_city,
       Count(timestamp)                                                     AS Count
FROM   {target_table}
WHERE  Year(timestamp) = {target_year}
       AND Month(timestamp) = {target_month}
       AND Day(timestamp) in {target_day}
GROUP  BY state_city
ORDER  BY Count DESC
LIMIT  10;

Después de confirmar los trabajos de consulta, los datos se pueden presentar en un histograma de trazado univariado para una claridad visual.

trace = go.Bar(
    x = query_6_df['state_city'],
    y = query_6_df['Count'],
    name = "Activity by City"
)

layout = go.Layout(
    title = 'Top Ten Cities by User Activity',
    width = 1200,
    height = 600,
    xaxis = dict(title = 'City'),
    yaxis = dict(title = 'Count')
)

fig = go.Figure(data = [trace], layout = layout)
iplot(fig)

diez ciudades principales

Los diez productos más vistos

Esta consulta proporciona una lista de los diez productos más vistos. En el ejemplo siguiente, se usa la función Explode() para devolver cada producto del objeto productlistitems a su propia fila. Esto le permite realizar una consulta anidada para agregado vistas de productos para diferentes unidad de almacén.

%%read_sql query_7_df -c QS_CONNECTION

SELECT Product_List_Items.sku AS Product_SKU,
       Sum(Product_Views) AS Total_Product_Views
FROM  (SELECT Explode(productlistitems) AS Product_List_Items,
              commerce.productviews.value   AS Product_Views
       FROM   {target_table}
       WHERE  Year(timestamp) = {target_year}
              AND Month(timestamp) = {target_month}
              AND Day(timestamp) in {target_day}
              AND commerce.productviews.value IS NOT NULL)
GROUP BY Product_SKU
ORDER BY Total_Product_Views DESC
LIMIT  10;

Después de confirmar que el consulta funciona, los datos se pueden presentar en un gráfico univariado histograma para mayor claridad visual.

trace = go.Bar(
    x = "SKU-" + query_7_df['Product_SKU'],
    y = query_7_df['Total_Product_Views'],
    name = "Product View"
)

layout = go.Layout(
    title = 'Top Ten Viewed Products',
    width = 1200,
    height = 600,
    xaxis = dict(title = 'SKU'),
    yaxis = dict(title = 'Product View Count')
)

fig = go.Figure(data = [trace], layout = layout)
iplot(fig)

Diez visualizaciones de producto principales

Después de explorar las tendencias y los patrones de los datos, debe tener una buena idea de qué características desea crear para una predicción de un objetivo. Al pasar por las tablas, se puede resaltar rápidamente la forma de cada atributo de datos, las representaciones erróneas obvias y los grandes valores periféricos, y comenzar a sugerir relaciones candidatas para explorar entre atributos.