- Descripción general del proyecto
- Equipo de trabajo
- Metodología de trabajo
- Cronograma a la fecha
- Objetivo General
- Descripción y diccionario de los datos originales
- Solución: Data Pipeline
- Diccionario de los datos - Data Analytics
- Diccionario de los datos - Machine Learning
La compañía Amazon contrataron los servicios de ingeniería y análisis de datos de la empresa Skaivu Insights con el objetivo de apoyar el desarrollo de nuevas perspectivas para mejorar ventas y experiencia al usuario.
La empresa se encargará de almacenar, transformar, estructurar, analizar y modelar la información proporcionada para crear un reporte de inteligencia empresarial, y adicionalmente un sistema automático de recomendación de productos relevantes, basado en la información de opiniones provenientes de otros usuarios.
Skaivu Insights consta con un grupo de profesionales en diferentes áreas que estarán encargados del desarrollo del proyecto. El equipo de trabajo asignado a este proyecto estará conformado por:
- Ingmar Orta - Data Scientist ( Project Manager )
- Tomás Astrada - Data Engineer
- Jean Fabra - Data Engineer
- Jorge Fonseca - Data Scientist
- Daniela Hugueth - Data Analytic
Se utilizará un método de trabajo ágil con enfoque en la metodología de gestión de proyectos Kanban utilizando el software de administración de proyectos Trello, en donde los integrantes del proyecto dividiremos y asignaremos las actividades a realizar y mantendremos un seguimiento a todo el proyecto.
La unión de estas metodologías nos dará:
- Gestión de trabajo colaborativo
- Resoluciones rápidas y efectivas
- Visualización del flujo de trabajo
- Simplicidad
Realizar un análisis de reseñas y ventas de productos a partir de la información proporcionada por el cliente Amazon, así, extraer información objetiva y concisa de indicadores claves de desempeño e idear un sistema de recomendaciones de productos.
Se recibieron 24 tablas con datos de reviewes hecho por clientes sobre artículos comprados en su tienda virtual, una (1) tabla por categoría de producto, y una tabla de metadata con informacion de los producto ofrecidos en la plataforma.
- El rango de fecha presente en las tablas de reviews data desde 1996 hasta 2014
- Se poseen alrededor de 20gb con un total de 17 millones de reviews
- 10 gb de metadata
Nombre de las categorías:
Books
Electronics
Movies and TV
CD and Vinyl
Clothing
Shoes and Jewelry
Home and Kitchen
Kindle Store
Sports and Outdoors
Cell Phones and Accessories
Health and Personal Care
Toys and Games
Video Games
Tools and Home Improvment
Beauty
Apps for Android
Office Products
Office Products
Pet Supplies
Automotive
Grocery and Gourmet Food
Patio
Lawn and Garden
Baby
Digital Music
Musical Instruments
Amazon Instant Video
Diccionario de los datos originales
reviewerID ---> ID del usuario, ejemplo: A2SUAM1J3GNN3B
asin ---> ID del producto, ejemplo: 0000013714
reviewerName ---> nombre del usuario
helpful ---> Puntaje de utilidad de la reseña (votos externos), e.g. 2/3
reviewText ---> Texto de la reseña
overall ---> Puntaje dado al producto
summary ---> Resumen de la reseña
unixReviewTime ---> Fecha de la reseña (unix time)
reviewTime ---> Fecha de la reseña
asin ---> ID del producto, ejemplo: 0000031852
title ---> Nombre del producto
price ---> Precio en dólares
imUrl ---> URL de la imagen del producto
related ---> Productos relacionados (comprados juntos, también revisados, comprados por el mismo usuario, comprados luego de verlos)
salesRank ---> Información sobre cómo rankea en ventas
brand ---> Nombre de la marca del producto
categories ---> Lista de la categoría a la que pertenece el producto.
La gran cantidad de volumen y variedad de dato son indicativos para emplear herramientas de Big Data
Se realizo un análisis exploratorio no gráfico de los datos originales para describir los datos, encontrar los patrones que existen en ellos e Identificar valores atípicos. El análisis se realizó en el entorno de trabajo colaborativo Apache Spark de Azure Databricks por la facilidad que nos daba para manejas grandes cantidades de datos.
Las observaciones y características resultantes del análisis son las siguientes:
reviewerID :
- Tipo de dato "string" alfanumérico.
- No presenta valores faltantes.
- Hay repetición de códigos, lo cual no representa un error ya que un mismo usuario puede hacer más de una recomendación a productos distintos.
asin :
- Tipo de dato "string" alfanumérico.
- No presenta valores faltantes.
- Hay repetición de códigos, lo cual no representa un error ya que un producto puede tener varias reseñas
reviewerName :
- Tipo de dato "string".
- Tiene algunos valores faltantes (null)
helpful :
- Tipo de dato "string" alfanumérico.
- No presenta valores faltantes
- El primer valor del intervalo representa calificaciones positivas de la reseña y el ultimo representa el total de calificaciones a la reseña
reviewText :
- Tipo de dato "string" alfanumérico de gran longitud.
overall :
- Tipo de dato "float".
- No presenta valores faltantes.
- Sus valores varían desde 1.0 a 5.0
summary :
- Tipo de dato "string".
unixReviewTime :
- Tipo de dato "int".
- No presenta valores faltantes.
- Hay repetición de fechas, lo cual no representa un error ya que un mismo día se pudieron registrar varias reseñas
reviewTime :
- Tipo de dato "string" alfanumérico.
- No presenta valores faltantes.
- Hay repetición de fechas, lo cual no representa un error ya que que un mismo día se pudieron registrar varias reseñas
asin :
- Tipo de dato "string" alfanumérico.
- No presenta valores faltantes.
- No hay repetición de códigos.
title :
- Tipo de dato "string" alfanumérico.
price :
- Tipo de dato "float".
- Tiene algunos valores faltantes (null)
imUrl :
- Tipo de dato "string".
related :
- Tipo de dato "string".
salesRank :
- Tipo de dato "string".
- Tiene muchos valores faltantes (null).
brand :
- Tipo de dato "string" alfanumérico.
- Tiene muchos valores faltantes (null)
- Presenta muchos datos sucios, incoherentes y faltan referencias
categories :
- Tipo de dato "string".
Diagrama flujo del dato
En esta sección se estructurará el flujo del dato desde la recepción hasta la salida del ETL.
Los datasets entregados por el Product Owner, se descargaron y fueron almacenados de manera temporal en el localhost de la máquina.
Dado que trabajaremos sobre el esquema de Microsoft Azure se decidió crear un contenedor donde se almacenarán los datasets raw en la nube. Para esto, fue necesario crear una cuenta de trabajo en el portal de Azure. En dicha cuenta se crea un grupo de recursos donde incluímos una Storage Account con un contenedor.
Una vez almacenados los datasets en el contenedor de Azure se procede a realizar la conexión con Databricks, nuestro lugar de trabajo principal.
En el grupo de recursos previamente creado se añade un workspace de Databricks. Ahí se crea el clúster que permite computar nuestros datos (Single Node 10.4 LTS Apache Spark 14GB Memory, 4 Cores), el criterio de selección fue en base al alcance de nuestros recursos.
Dentro de Databricks creamos un Notebook y lo conectamos con el clúster. En dicho Notebook establecemos las variables necesarias para la conexión con el contenedor (Información detallada en el Notebook de ETL-Reviews)
El ETL de Reviews sigue los siguientes pasos:
- Extracción de los links de conexión al contenedor
- Definición de una función que permita crear un dataframe a partir de la URL de conexión
- Creación de los dataframes divididos por categorías
- Transformación de los datos:
- Unión de todos los datasets
- Cambio de nombre de columnas
- Eliminación de columnas
- Normalización
- Carga de los datos en la base de datos de Databricks. Se empleó el formato de datos "delta" que permite la rápida ejecución de querys.
El ETL para Metadata sigue los siguientes pasos:
- Extracción de los links de conexión al contenedor
- Definición del esquema para lectura en Pyspark
- Creación del dataframe a partir del esquema creado
- Transformación de los datos:
- Creación de la tabla de datos corruptos y no corruptos
- Normalización de los datos corruptos
- Unión de los datos corruptos transformados con datos de metadata no corruptos
- Normalización y limpieza de columnas
- Carga de los datos en la base de datos de Databricks. Se empleó el formato de datos "delta" que permite la rápida ejecución de querys.
Al no poseer Databricks premium no podemos realizar la conexión directa a PowerBI. Para esto, decidimos crear una base de datos en el portal de Azure y desde ahí crear la conexión. La creación de la base de datos en SQL se realiza de manera estándar, sin embargo, fue necesario cambiar la configuración de networking en donde se habilitan las IPs que trabajaran sobre esta.
Creada la SQL Database de Azure se realiza la conexión con Databricks por medio del protocolo jdbc.
Para aliviar la carga de los datos se establece una carga en delta por años:
- Año 2014
- Año 2013
- Año 2012
- Del 2010 y 2011
- Del 2005 al 2009
- Del 2000 al 2004
Para más información acerca del proceso de ETL por favor revisar los Notebooks dentro de la carpeta de Scripts.
La conexión se realizó mediante el conector de Azure SQL Database de PowerBI. Se ingresan las credenciales del servidor de base de datos y se cargan los datos ya sea por Direct Query o Import Data.
reviewID ---> ID unico de la reseña
reviewerID ---> ID del usuario, ejemplo: A2SUAM1J3GNN3B
asinID ---> ID del producto, ejemplo: 0000013714
overall ---> Puntaje dado al producto
positiveScore ---> Puntajes positivos de la reseña
TotalScore ---> Puntajes totales en reseña
helpfulness ---> Porcentaje de utilidad
groupHelpfulness ---> Descripción de utilidad
datetime ---> Fecha de la reseña
productID ---> ID de productos calificados
averageScore ---> Promedio de calificacion del producto
reviewerID ---> ID unicos de los usuarios
reviewerName ---> nombre del usuario
asinID ---> ID unico de productos
title ---> nombre del producto
price ---> precio
brand ---> marca
Categorie ---> categoria
scoreID ---> Calificaciones validas, numericas
ScoreName ---> Calificaciones validas, descripción
customerPercention ---> Equivalencia de calificacion segun percepcion del cliente
ranting helpfulness ---> Calificaciones validas, numericas
description ---> Calificaciones validas, descripción
Fecha ---> Fecha formato dd/mm/yyyy
year ---> año
Month ---> Mes
asinID ---> ID unico de productos
title ---> Nombre del producto
categories ---> Categorías del producto
reviewText ---> Texto de la reseña
summary ---> Resumen de la reseña
overall ---> Puntaje dado al producto
reviewerID ---> ID del usuario, ejemplo: A2SUAM1J3GNN3B
asinID ---> ID unico de productos
description ---> Descripción del producto
also_bought ---> Artículos relacionados: Este producto se compra con este otro producto
also_viewed ---> Artículos relacionados: A partir de este producto también miró este otro producto
bought_together ---> Artículos relacionados: Estos productos se compran juntos
buy_after_viewing ---> Artículos relacionados: Se compró este producto después de mirar este otro producto