0% encontró este documento útil (0 votos)
35 vistas40 páginas

Análisis de Sentimiento en E-commerce

Proyecto Final Big Data

Cargado por

rayo1211
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
35 vistas40 páginas

Análisis de Sentimiento en E-commerce

Proyecto Final Big Data

Cargado por

rayo1211
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

PROGRAMA DE MAESTRÍA Y DOCTORADO EN INGENIERÍA


INGENIERÍA DE SISTEMAS – OPTIMACIÓN FINANCIERA

POYECTO FINAL

Análisis de sentimiento aplicado en los comentarios del comercio


electrónico

PRESENTA:

Ricardo Javier Martínez Suástegui

PROFESOR:
Jorge Rodríguez Rubio
Facultad de Ingeniería, UNAM
Contenido
I.- INTRODUCCIÓN. ...................................................................................................................................... 3

II.- ANTECEDENTES ....................................................................................................................................... 4

III.- PROBLEMÁTICA. .................................................................................................................................... 7

IV.- OBJETIVO PRINCIPAL Y OBJETIVOS ESPECÍFICOS. ................................................................................... 8

V.- ESTADO DEL ARTE ................................................................................................................................... 9

VI.- MARCO CONCEPTUAL .......................................................................................................................... 10

VII.- PLAN DE TRABAJO Y PRODUCTOS TANGIBLES ESPERADOS ................................................................. 13

VIII.- REFERENCIAS. .................................................................................................................................... 15

IX.- ANEXOS (CÓDIGO EN PYTHON) ............................................................................................................ 15

2
I.- INTRODUCCIÓN.

EL análisis de texto cada vez ha cobrado mayor importancia y relevancia en la vida


actual debido a que permite conocer y perfilar a las personas. Además, esto nos
permite en ámbitos empresariales conocer cosas como la perspectiva de la empresa o
de un producto en específico. Para esto es necesario usar una subrama del análisis de
texto conocida como el análisis de sentimientos.

La técnica de análisis de sentimientos se define como el campo de estudio que analiza


las opiniones de las personas, sentimientos, evaluaciones, apreciaciones, actitudes y
emociones sobre entidades tales como productos, servicios, organizaciones,
individuos, cuestiones, eventos, tópicos y sus atributos según lo expresa Liu (2012).

El análisis de sentimientos constituye una de las aplicaciones de la Lingüística


Computacional más activas actualmente y en la que las empresas están realizando una
importante inversión económica por el impacto que tiene en su funcionamiento y
obtención de beneficios el conocer la opinión de los clientes o potenciales clientes
acerca de sus productos (Amarouche et al., 2015). Sin embargo, existen todavía
importantes limitaciones que hacen necesario continuar con la investigación y
desarrollo de sistemas de análisis de sentimientos con resultados mejores tanto en
precisión como en cobertura.

En la actualidad, la transformación digital se ha convertido en una necesidad acuciante


para todas las organizaciones. Este mensaje puede ser escuchado alta y claramente en
cada discusión o artículo donde se intenta aclarar qué pueden hacer las empresas para
seguir siendo relevantes en un mundo cada vez más digitalizado y globalizado. Como
suele ocurrir, son las pequeñas y medianas empresas las que más dificultades
experimentan para enfrentar nuevos retos. Mientras que las grandes compañías ya
han adquirido tecnología y contratado personal especializado para tratar con esta
problemática, algunos pequeños negocios ni siquiera son conscientes de la magnitud
del cambio que les espera.

Sin embargo, aunque haya empresas mejor preparadas que otras, todas deben
alcanzar el mismo destino y para ello cada una debe encontrar su propio camino. En
2018 el ITRE encargó un estudio para obtener información sobre cómo la Unión
Europea puede aprovechar la oportunidad que plantea el uso de la inteligencia
artificial. Uno de los puntos que trata esta investigación es la aceptación de la IA en las
empresas europeas. En él se refleja que tan sólo un 20 % de las organizaciones usan
esta tecnología actualmente. El porcentaje de pymes es mucho más bajo, únicamente

3
supone un 5 % sobre el total. A continuación, se muestra un gráfico donde se recoge el
porcentaje de empresas que hacen uso de soluciones o servicios de IA:

Figura 1.- Uso de servicios/soluciones de IA en Europa (Total de empresas frente a pymes)

Las pymes pueden encontrar una magnífica solución para cumplir con sus necesidades
en el Cloud Computing. Los servicios en la nube que ofrecen grandes proveedores
como Google, Microsoft o Amazon ponen al alcance de estas empresas la tecnología
que antes sólo se podían permitir las grandes organizaciones. Además, al ser recursos
completamente gestionados por las empresas proveedoras, las organizaciones
pueden centrarse más en su negocio y abstraerse de la infraestructura o la
disponibilidad de su sistema.

La integración de herramientas de IA mediante computación en la nube, en un negocio


electrónico, puede ayudar a conseguir los objetivos que persigue la transformación
digital. La transformación digital lidera un enfoque de negocio centrado en el cliente
que busca comprender correctamente los cambios en los comportamientos de los
clientes y cómo hacerles llegar los servicios adecuadamente. Se trata además de
digitalizar los procesos de negocio y los canales de comunicación, mejorando de esta
forma la experiencia de cliente. Para entender mejor a los clientes puede resultar muy
útil para las organizaciones analizar los sentimientos de los comentarios que éstos
publican.

II.- ANTECEDENTES

4
El campo de estudio del análisis de sentimientos o minería de opiniones se ha
convertido en un área de investigación muy activa a partir del año 2000. Antes de
dicho año, se habían realizado escasas investigaciones que no fueron concluyentes
respecto a su eficacia.

En las referencias bibliográficas sobre el tema se pueden encontrar diferentes


denominaciones para referirse al análisis de sentimientos, tales como minería de
opinión, minería de revisión, análisis de opinión de afectos, minería de sentimientos o
análisis de emociones, entre otras (Liu, 2012).

Fueron Nasukawa y Yi en 2003 los que utilizaron por primera vez el término análisis
de sentimientos en su trabajo sobre una técnica de extracción de sentimientos
asociados con polaridades positivas o negativas (polaridad, también conocida como
orientación, es la emoción expresada en la oración), para temas específicos de un
documento, y el término minería de opiniones, apareció por primera vez publicado en
las actas de la conferencia de la World Wide Web de 2003 por Dave et al. (2003), en
las cuales se propone una herramienta para procesar conjuntos de resultados de
búsqueda para un ítem específico, con el fin de obtener sus características y poder
valorarlas positiva o negativamente.

Existe un debate acerca de la diferencia o similitud de los términos análisis de


sentimientos y minería de opiniones ya que hay autores que los utilizan de forma
intercambiable y otros que opinan que los dos conceptos no son equivalentes. La
diferencia deriva del hecho de que el sentimiento se define como un estado afectivo
del ánimo, mientras que la opinión se define como una visión o juicio formado en la
mente sobre un asunto en particular (Real Academia Española, 2001).

Los primeros trabajos acerca la clasificación de sentimientos fueron llevados a cabo


por Turney (2002), quien propuso un enfoque informático basado en “aprendizaje
máquina no supervisado” que utilizaba la orientación semántica positiva o negativa de
algunas palabras para ayudar a la clasificación de las revisiones textuales sobre un
cierto producto basada en las opiniones que provocaba en los consumidores.

De forma diferente, Pang et al. (2002), implementaron un conjunto de enfoques de


“aprendizaje máquina supervisado” para la clasificación de las opiniones con el fin de
maximizar la precisión de dicha clasificación. Se entiende por precisión el número de
opiniones clasificadas correctamente en una clase (ej. opiniones positivas) dividido por
el número total de opiniones clasificadas en esa clase.

5
Figura 2- Clasificación de los algoritmos más populares del Machine Learning

El aprendizaje supervisado se utiliza para realizar predicciones empleando un


conjunto de textos de entrenamiento, creados y clasificados previamente de forma
semiautomática. Basándose en estos conjuntos de textos el algoritmo de aprendizaje
supervisado desarrolla un modelo capaz de realizar predicciones acerca del tipo de
sentimiento u opinión expresado en los nuevos textos que se desean clasificar.

El aprendizaje supervisado se compone de dos categorías de algoritmos: de


clasificación y de regresión que difieren por el tipo de valores que utilizan para la
clasificación. En el primer caso se utilizan valores categóricos (eg. positivo, negativo y
neutro), y en el segundo caso, se utilizan valores continuos (eg. mediante números
reales). Ejemplos de algoritmos de clasificación ampliamente utilizados son el
clasificador Naïve Bayes, que es un clasificador probabilístico categórico
fundamentado en una simplificación del teorema de Bayes, o los algoritmos de
regresión, no categóricos o continuos, que aplican técnicas estadísticas de regresión
lineal y no lineal (Jurafsky y Martin, 2017).

El aprendizaje no supervisado, por otro lado, no utiliza textos de entrenamiento


previamente clasificados, sino que agrupa los textos por su similitud en clases que no
están predefinidas. Este tipo de aprendizaje utiliza “algoritmos de agrupamiento”

6
(clustering, en inglés), que tienen como objetivo intentar encontrar patrones de
similitud en los textos y agruparlos por sus características comunes. Ejemplos de
algoritmo de agrupamiento son el clasificador jerárquico y modelos de mezclas
gaussianas (Liu, 2010).

Cualquiera de estos dos tipos de analizadores de opinión necesita utilizar lo que se


denominan lexicones “de opinión” como SentiWordNet que han tenido que ser
etiquetados previamente de forma manual con un peso sobre su polaridad semántica
(Baccianella et al., 2010). En las últimas dos décadas se ha desarrollado de forma
significativa el campo del análisis de sentimientos o minería de opiniones como
prueban los numerosos trabajos de investigación publicados con nuevas técnicas e
ideas para mejorar la tarea del análisis de sentimientos. Sin embargo, es un campo que
todavía necesita investigación y que sigue en continua evolución (Singh et al., 2017).

Para ilustrar lo anteriormente dicho caben destacar algunos trabajos sobre el análisis
de sentimientos relacionados con el desarrollo de las redes sociales como el de Asur y
Huberman (2010), en el que se propone un nuevo procedimiento para calcular la
polaridad de un corpus de mensajes de Twitter, con el propósito de averiguar si la
taquilla de los próximos estrenos cinematográficos tendrá éxito o no. La idea es
recoger automáticamente los mensajes publicados sobre una determinada película y
asignar un peso positivo, negativo o neutro a determinadas palabras que expresan
opinión o sentimiento. Posteriormente, para cada mensaje, se calcula su polaridad
mediante la suma total de los pesos individuales de las palabras del texto del mensaje.
Así mismo, trabajos más recientes, como por ejemplo el de Kiritchenko et al. (2014),
en el cual se describe un sistema de análisis de sentimientos de última generación que
detecta el sentimiento de los mensajes de texto informales, en particular tweets y
mensajes SMS, los evalúa y los clasifica. Esta tarea se lleva a cabo a través un sistema
supervisado que se basa en un enfoque de aprendizaje automático empleando léxicos
generados automáticamente usando tweets con hashtags y tweets con emoticonos
precedentemente clasificados. Estos ejemplos de trabajos son una muestra del tipo de
estrategias, herramientas y recursos utilizados actualmente para el análisis
automático de opinión.

III.- PROBLEMÁTICA.

A pesar de que hoy en día se cuenta con la tecnología necesaria para realizar el análisis
de sentimientos, la mayoría de las pymes aun no hacen uso de esta tecnología para
explotar los datos de sus clientes o de empresas que tengan sus datos abiertos a todo
publico y que puedan explotarse, además a partir de ello se puede obtener una ventaja
competitiva en el mercado. La baja demanda en estas empresas se piensa que es

7
debido a que se tiene una idea errónea de que es muy costosa o laboriosa la
implementación.

El trabajo más difícil en el momento de realizar el análisis de sentimientos es la


correcta integración con las fuentes de datos y la calibración del modelo. Esto se
complica, primero por las diferentes posibilidades que hay en la nube (Azure, AWS y
Google), el costo asociado al uso de esta tecnología y el conocer cómo debe de
calibrarse el modelo para obtener los insights correctos.

Existen diferentes maneras de realizar correctamente un análisis de sentimientos con


un sinfín de herramientas en el mercado, sin embargo, se ha extendido y popularizado
el uso de lenguajes open source como Python o R para el mismo, debido a su alta
versatilidad, escalabilidad, facilidad de uso e implementación.

IV.- OBJETIVO PRINCIPAL Y OBJETIVOS ESPECÍFICOS.

Objetivo Principal

• Realizar un desarrollo para mostrar que es posible realizar una integración low
cost de análisis de sentimientos que pueda ser escalable y nos ayude en la toma
de decisiones.

Objetivos Específicos

1- Describir la técnica de análisis de sentimientos mediante su concepto,


antecedentes, características y enfoques, aplicaciones, problemas y
limitaciones.

2- Implementar el uso del análisis de sentimientos en un caso de estudio concreto:


aplicado en los comentarios de los usuarios de una página de videojuegos con
tienda electrónica.

3- Realizar un tablero de control (dashboard) que permita comprender la data de


salida de la implementación de una mejor manera y que esto ayude a enfocarse
en los insights más relevantes para la toma de decisiones y ayude en el
perfilamiento del cliente final y sus gustos.

8
V.- ESTADO DEL ARTE

Actualmente, resulta muy sencillo enseñar a una IA a ganar una partida de ajedrez, en
cambio, el reto está en conseguir que pueda emular un sistema tan complejo como la
mente humana. Como dijo Alan Winfield, profesor de robótica en la UWE (Bristol):
"Hoy en día hemos aceptado que, 60 años más tarde del nacimiento de la IA, las cosas
que originalmente asumíamos como fáciles, en realidad han resultado ser muy difíciles
y lo que pensábamos que era difícil, como jugar al ajedrez, es en realidad muy fácil".

Los científicos llevan muchos años intentando imitar la mente humana mediante
sistemas "inteligentes". Desde que John McCarthy y Marvin Minsky fundaran la
Inteligencia Artificial en 1956 se han conseguido resultados, inimaginables en ese
entonces, que han demostrado la utilidad social, intelectual y cultural que tiene para
la sociedad esta tecnología.

La inteligencia emocional es una capacidad inherente al ser humano, si bien es cierto


que algunas personas son más sensibles, todas pueden interpretar las emociones y los
sentimientos del resto. Por tanto, ¿es posible enseñar esta capacidad a una máquina?
Con esta idea en mente surgió la Computación Afectiva, una rama de la IA destinada a
procesar, comprender y replicar las emociones humanas. Este campo data al menos
del 1995 cuando Rossalin Picard, profesora en el MIT, publicó "Affective Computing".

Para las máquinas, al igual que el ser humano, resulta más sencillo obtener información
sobre las emociones a partir de un vídeo o una conversación hablada. El análisis de
sentimientos, un subcampo del procesamiento del lenguaje natural se ocupa de
identificar opiniones, emociones y evaluaciones positivas o negativas respecto a
diferentes temas. En este sentido la Inteligencia Artificial tiene una serie de obstáculos
por delante, ya que, la comunicación humana va acompañada de principios difíciles de
recrear artificialmente como son el humor, los dobles sentidos, la ironía o los
sentimientos que añade el comunicador.

Además de los intereses comerciales, el uso de este tipo de aplicaciones se está


extendiendo en organismos gubernamentales. Los gobiernos monitorean las redes
sociales para descubrir sentimientos y preocupaciones de los ciudadanos. Este hecho
es especialmente reseñable en China. También se han publicado muchos trabajos de
investigación orientados a diversas aplicaciones del análisis de sentimientos.

9
Algunas de éstas se han centrado en el análisis de opiniones sobre productos y
películas (Hu y Liu, 2004; Popescu y Etzioni, 2005). Estos textos cuentan con la ventaja
de que ya tienen un tema claramente especificado. Muchos investigadores también
han analizado las opiniones públicas durante una campaña electoral, como Chung y
Mustafaraj (2011) y Gayo-Avello et al. (2011) que discuten sobre las limitaciones de
utilizar datos obtenidos de Twitter para predecir las elecciones políticas. Otra área
popular de aplicación es la predicción del mercado de valores. Por ejemplo, Zhang et
al. (2010) identifica estados de ánimo positivos y negativos en Twitter y hace uso de
esta información para predecir el movimiento de los índices bursátiles.

VI.- MARCO CONCEPTUAL

Conceptos

El análisis de sentimiento consiste en evaluar las emociones, actitudes y opiniones. Las


organizaciones utilizan este método para obtener información que les permita
comprender la forma en la que los clientes reaccionan respecto a un producto o
servicio específico.

El análisis de sentimientos es la técnica que se encarga del estudio de los elementos


subjetivos mencionados en textos. Trata de clasificar de manera automática y masiva
las opiniones volcadas en los textos analizados de modo que se puedan agrupar de
manera clara y concisa. Con el big data como elemento facilitador crean multitud de
oportunidades para desarrollar nuevas aplicaciónes, debido en gran parte aumento
de fuentes de información y capacidad de procesamiento de las mismas. Esta sinergia
provoca un gran impacto en el ámbito empresarial donde empresas de todo tipo,
grandes y pequeñas, quieren conocer quién y qué es lo que se está diciendo sobre
ellos con la finalidad de definir claramente una imagen de marca diferenciadora de
sus competidores.

Problemas y Limitaciones

Al ser el análisis de sentimientos un campo de estudio relativamente reciente todavía


presenta varios problemas y limitaciones que no permiten que la precisión de los
resultados alcance el 100%. El rango de precisión de los sistemas actuales es,
aproximadamente, de un 70% lo cual puede considerarse como satisfactorio, pero no
muy satisfactorio (Li, 2015).

Entre estos problemas destacan:

10
a) La dificultad para establecer una escala objetiva para describir la polaridad de
sentimientos y opiniones. Las dificultades están fundamentalmente en que: no
todas las palabras tienen un significado preciso por lo que puede resultar difícil
clasificarlos como totalmente positivos o negativos; y, en que para establecer
objetivamente la polaridad a nivel léxico es necesario resolver cómo calcularla
en los distintos niveles del texto: frase, párrafo, sección, etc. (Liu, 2010).

b) La dificultad de detectar opiniones explicitas e implícitas. Por opinión explicita


se entiende una afirmación subjetiva que da una opinión simple o comparativa
utilizando una o varias palabras que indican esa opinión, por ejemplo, en la frase
"La Coca-Cola tiene un buen sabor" y "La Coca-Cola sabe mejor que la Pepsi".
Por opinión implícita se entiende una opinión que una persona no expresa de
forma directa, sino sugerida. El lector habrá de saber leer entre líneas y captar
la información que no ha sido dada explícitamente en el texto, por ejemplo,
"Compré el colchón hace una semana, y se ha formado un valle". En este caso
no se dice explícitamente que el colchón se ha estropeado, aunque un lector
humano sabe, normalmente, captarlo. Claramente las opiniones explícitas son
más fáciles de detectar y clasificar que las opiniones implícitas por lo que son,
actualmente, las que se pueden abordar con razonable éxito (Liu, 2010).

c) La importancia del contexto de palabra para determinar su significado, en


particular, son especialmente sensibles los adjetivos, los cuales pueden tener
diferentes polaridades. Por ejemplo, la palabra “decepcionado”, analizada por
una herramienta de detección de sentimientos que no considera el contexto,
sería clasificada con connotación negativa, pero en una frase como “No me has
decepcionado”, “decepcionado” tendría que clasificarse como positivo. Un
problema similar se encuentra a la hora de detectar sarcasmo, ironía,
negaciones, bromas y exageraciones (Carvalho et al., 2009).

d) Destacar la subjetividad. Una oración subjetiva expresa sentimientos o


creencias personales, y se puede producir en diferentes formas, por ejemplo,
opiniones, alegaciones, deseos, creencias, sospechas y especulaciones, por eso
es difícil clasificar los sentimientos de las personas del mismo modo debido al
hecho de que no siempre se puede detectar una opinión positiva o negativa (Liu,
2010).

e) Evaluar la intensidad de las opiniones. En un foro, por ejemplo, la intensidad de


opinión puede cambiar a medida que la discusión se desarrolla, es decir, los
argumentos utilizados durante la discusión son lo suficientemente fuertes
como para cambiar la fuerza de las opiniones. Para resolver este problema se
ha desarrollado una herramienta denominada SentiWordNet, un recurso
léxico para apoyar la clasificación de sentimientos y las aplicaciones de minería
de opinión (Pang y Lee, 2008).

11
f) La aparición, en una misma frase, de una opinión o sentimiento positivo y otro
negativo. Detectar ambas opiniones es un reto bastante complicado para el
análisis de sentimientos, pero se dispone de algunas técnicas específicas como
el resumen comparativo de opiniones contrastadas (COS por su sigla en inglés)
que extrae frases comparables de cada conjunto de opiniones y generar una
síntesis comparativa con los pares de frases contrastadas (Kim y Zhai, 2009).
En definitiva, estos son algunos de los retos del análisis de sentimientos. Son las
razones por las cuales las herramientas actuales no logran trabajar con una
precisión del 100%.

Tipos de Análisis

El análisis estadístico es importante para descubrir las nuevas tendencias. Existen


varios tipos de análisis estadísticos de datos diferentes que a continuación se
presentan:

• Análisis descriptivo - Se trata del tipo de análisis estadístico de datos más


sencillo. Su objetivo final es describir un conjunto de datos, lo que le permite
obtener parámetros que distinguen las características de un conjunto de datos.
• Análisis inferencial. Se basa en demostrar hipótesis, ofreciendo conclusiones
con una probabilidad concreta o nivel de confianza, pero no da una certeza
total.
• Análisis exploratorio. El objetivo de este tipo de análisis estadístico de datos es
la comprensión básica de los datos para detectar características concretas o
anormales.
• Análisis predictivo. Como bien indica su nombre, trata de identificar las
relaciones que existen entre las variables en eventos pasados para luego
explotarlas y predecir lo que puede ocurrir en el futuro.
• Análisis causal. Su objetivo es relacionar las causas con los efectos y cómo se
afectan entre ellos. Así, puede predecir e identificar las razones de las
actuaciones o situaciones.
• Análisis mecanicista. Se trata del tipo de análisis estadístico de datos más
complejo, ya que con él se puede predecir y comprender cómo se afectan entre
ellas varias variables.

Ventajas del Análisis de Sentimientos

Las ventajas del análisis de sentimiento sin numerosas, aquí mostraremos las más
relevantes:

12
• Permite mantenerte al tanto de lo que le gusta y de lo que no les gusta a los
consumidores de tus productos y servicios.
• Permite enfocarte en los diferentes segmentos del mercado y crear productos
y servicios que los atraigan.
• Favorece el análisis de las revisiones o de la retroalimentación del cliente y
compararlos con la competencia para comprender en qué puntos hay que
realizar mejoras.
• Ayuda a abordar rápidamente los problemas que enfrentan los clientes al usar
tus productos o servicios.
• Favorece la reputación de la marca y la percepción de los clientes.
• Ayuda a comprender el estado de ánimo de los clientes, así como los efectos
que ocurren alrededor de las opiniones de los clientes a lo largo del tiempo.

VII.- PLAN DE TRABAJO Y PRODUCTOS TANGIBLES ESPERADOS

El desarrollo de este proyecto se divide en cuatro etapas generales:

1. Etapa de extracción de la Información. En esta etapa se obtendrá la


información de los comentarios de un videojuego en específico de una
plataforma de e-commerce para medir el sentimiento y la polaridad de cada
comentario.
2. Etapa de análisis de la información. En esta etapa se llevará a cabo la limpieza
de la data y el análisis exploratorio de la misma con el objetivo de asegurar la
calidad de la información y entender la misma.
3. Etapa de desarrollo. En esta etapa se realizará el modelo de análisis de
sentimientos con el lenguaje open source Python y se calibrará y validará dicho
modelo. Generando una base con los resultados.
4. Etapa de visualización. Con la salida del punto anterior se generará un tablero
de control que servirá para interpretar el sentimiento de los usuarios a través
del tiempo e identificar de mejor manera su comportamiento.

13
En la siguiente tabla se especifican las etapas de este trabajo, así como los entregables
esperados en cada uno:

# Etapa Entregable
1 Extracción de la información Base input
2 Análisis de la información Código con EDA e
ingeniería de
características
3 Desarrollo Modelo y base output
4 Visualización Tablero de control

Tabla 1.- Relación entre las etapas y los entregables previsto.

• Polaridad
• EDA
• Nube de Tablero de
Extracción Base input Análisis • Ingenieria de Desarrollo Visualización
Palabras Control
Caracteristicas
• Base Output

Figura 3.- Esquema del flujo de información y las etapas del proyecto.

14
VIII.- REFERENCIAS.

• Panico, Chiara (2018). La eficacia del análisis de sentimientos para la empresa:


el caso de estudio Dell Technologies Inc. 34 pp.

• Moreno Jiménez, Jonathan (2019). Estudio e implementación de un servicio de


análisis de sentimientos para una tienda electrónica. 108 pp.

• Amarouche, K., Benbrahim, H., & Kassou, I. (2015). Product opinion mining for
competitive intelligence. Proceedings of the Computer Science, 73, 358–365.

• Asur, S., & Huberman, B. (2010). Predicting the future with social media.
International. Conference on Web Intelligence and Intelligent Agent
Technology (WIIAT), 1, 492-499.

• Baccianella, S., Esuli, A. & Sebastiani, F. (2010). SentiWordNet 3.0: an enhances


lexical resource for sentiment analysis and opinion mining. Istituto di Scienza e
Tecnologie dell’Informazione Consiglio Nazionale delle Ricerche. Pisa, Italy.

• B. Cetelem, “Observatorio cetelem de ecommerce 2019,” Recuperado 15 junio


2020 [Link]
ecommerce2019, 2019.

• R. Kats, “Retail sales in spain will fall nearly 13 % in 2020, the biggest drop in
western europe,” Recuperado 4 agosto 2020
[Link]
2020-biggest-drop-western-europe, 12 julio 2020.

• E. Cramer-Flood, “Global ecommerce 2020,” Recuperado 4 agosto 2020


[Link] 12 julio 2020.

IX.- ANEXOS (Código en Python)

15
Proyecto Final Big Data

December 11, 2022

Ing. Ricardo Javier Martínez Suástegui

1 Poyecto Final Big Data.- Análisis de sentimiento aplicado en los


comentarios del comercio electrónico
Este proyecto tiene como objetivo realizar un desarrollo para mostrar que es posible realizar una
integración low cost de análisis de sentimientos que pueda ser escalable y nos ayude en la toma de
decisiones.
Se realizara en cuatro etapas:
1. Etapa de extracción de la Información
2. Etapa de análisis de la información
3. Etapa de desarrollo
4. Etapa de visualización (fuera del alcance de este notebook pues se realizara en Tableau)

1.1 Etapa de extracción de la información


[192]: pip install googletrans==4.0.0-rc1

Looking in indexes: [Link] [Link]


wheels/public/simple/
Requirement already satisfied: googletrans==4.0.0-rc1 in
/usr/local/lib/python3.8/dist-packages (4.0.0rc1)
Requirement already satisfied: httpx==0.13.3 in /usr/local/lib/python3.8/dist-
packages (from googletrans==4.0.0-rc1) (0.13.3)
Requirement already satisfied: hstspreload in /usr/local/lib/python3.8/dist-
packages (from httpx==0.13.3->googletrans==4.0.0-rc1) (2022.12.1)
Requirement already satisfied: httpcore==0.9.* in /usr/local/lib/python3.8/dist-
packages (from httpx==0.13.3->googletrans==4.0.0-rc1) (0.9.1)
Requirement already satisfied: rfc3986<2,>=1.3 in /usr/local/lib/python3.8/dist-
packages (from httpx==0.13.3->googletrans==4.0.0-rc1) (1.5.0)
Requirement already satisfied: certifi in /usr/local/lib/python3.8/dist-packages
(from httpx==0.13.3->googletrans==4.0.0-rc1) (2022.9.24)
Requirement already satisfied: sniffio in /usr/local/lib/python3.8/dist-packages
(from httpx==0.13.3->googletrans==4.0.0-rc1) (1.3.0)
Requirement already satisfied: chardet==3.* in /usr/local/lib/python3.8/dist-
packages (from httpx==0.13.3->googletrans==4.0.0-rc1) (3.0.4)
Requirement already satisfied: idna==2.* in /usr/local/lib/python3.8/dist-

1
packages (from httpx==0.13.3->googletrans==4.0.0-rc1) (2.10)
Requirement already satisfied: h2==3.* in /usr/local/lib/python3.8/dist-packages
(from httpcore==0.9.*->httpx==0.13.3->googletrans==4.0.0-rc1) (3.2.0)
Requirement already satisfied: h11<0.10,>=0.8 in /usr/local/lib/python3.8/dist-
packages (from httpcore==0.9.*->httpx==0.13.3->googletrans==4.0.0-rc1) (0.9.0)
Requirement already satisfied: hpack<4,>=3.0 in /usr/local/lib/python3.8/dist-
packages (from h2==3.*->httpcore==0.9.*->httpx==0.13.3->googletrans==4.0.0-rc1)
(3.0.0)
Requirement already satisfied: hyperframe<6,>=5.2.0 in
/usr/local/lib/python3.8/dist-packages (from
h2==3.*->httpcore==0.9.*->httpx==0.13.3->googletrans==4.0.0-rc1) (5.2.0)

[193]: # Importación de librerias


import pandas as pd
import numpy as np
import pylab
import [Link] as stats
import seaborn as sns
import itertools
import [Link] as plt
import re
import ipywidgets as widgets
from ipywidgets import interact, interact_manual
import nltk
from [Link] import SentimentIntensityAnalyzer
from wordcloud import WordCloud, ImageColorGenerator
from [Link] import stopwords
from langdetect import detect
from googletrans import Translator
[Link]("stopwords")
stop = [Link]('english')
[Link]('vader_lexicon')

[nltk_data] Downloading package stopwords to /root/nltk_data…


[nltk_data] Package stopwords is already up-to-date!
[nltk_data] Downloading package vader_lexicon to /root/nltk_data…
[nltk_data] Package vader_lexicon is already up-to-date!

[193]: True

[194]: # Conexión a Google Drive


from [Link] import drive
[Link]('/content/drive')

Drive already mounted at /content/drive; to attempt to forcibly remount, call


[Link]("/content/drive", force_remount=True).

2
[195]: # La data fue extraida de una pagina de videojuegos en linea [Link]
'''
El dataset, es una muestra de diferentes reseñas del videojuego GoW Ragnarok,␣
,→las columnas son las siguientes:

Rating - Hace referencia a la puntuación del videojuego.


Name - Hace referencia al nombre de usuario o "nickname" que publico en la␣
,→plataforma

Date - Hace referencia a la fecha de la publicación


Text - Hace referencia al comentario hecho por el usuario
Usefulnes - Indica cuatos usuarios de la platarorma de un cierto número total␣
,→les parecio util ese comentario.

'''

# Carga de la data
ruta = '/content/drive/MyDrive/'

archivo = "GOW_revieW_Fin.xlsx"
archivo_out = "Review_Tableau.xlsx"

path = ruta + archivo


path_out = ruta + archivo_out

gow = pd.read_excel(path)
[Link]()

[195]: Rating Name Date \


0 10 ARMENHAMMER18 Nov 13, 2022
1 10 Atres Nov 13, 2022
2 10 stipex Nov 12, 2022
3 10 Exc-Enthusiast Nov 11, 2022
4 10 Darkula666 Nov 13, 2022

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness
0 21\nof \n27\nusers found this helpful
1 20\nof \n26\nusers found this helpful
2 19\nof \n25\nusers found this helpful
3 19\nof \n25\nusers found this helpful
4 17\nof \n23\nusers found this helpful

3
[196]: # Validar los tipos de dato
[Link]

[196]: Rating int64


Name object
Date object
Text object
Usefulness object
dtype: object

[197]: # Convertir la fecha a tipo fecha


gow["Date"] = pd.to_datetime(gow["Date"])

1.2 Etapa de análisis de la información


• Exploratory Data Analysis

[198]: # Primero validaremos el número total de columnas y de registros

[Link]

[198]: (170, 5)

[199]: # Eliminaremos duplicaos


gow = gow.drop_duplicates()
[Link]

[199]: (106, 5)

[200]: # Tenemos 170 registros y 5 columnas, ahora haremos un breve análisis␣


,→estadistico de sus columnas

[Link]()

[200]: Rating
count 106.000000
mean 8.141509
std 3.127265
min 0.000000
25% 7.000000
50% 10.000000
75% 10.000000
max 10.000000

[201]: # Creamos la columna de identificador con el nombre y la fecha

gow["id_row"] = gow['Date'].astype(str) + gow['Name']


[Link]()

4
[201]: Rating Name Date \
0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

[202]: # Preprocesamiento del Textp

def text_cleaner(x):
text=[Link]("[@&][A-Za-z0-9_]+","", x) # Remover caracteres
text=[Link](r"http\S+","", text) # Remover links
return [Link]([text])

gow[['plain_text']] = [Link](text_cleaner)

# Convertir todo el texto a minusculas


gow.plain_text = gow.plain_text.[Link]()

#Remover los caracteres de nueva linea


gow.plain_text = gow.plain_text.[Link]('\n', '')

# Remplazar lineas vacias con nulos


gow = [Link](r'^\s*$', [Link], regex=True)
if [Link]().sum().plain_text == 0:
print ('No hay lineas vacias')
else:
[Link](inplace=True)

[Link]()

No hay lineas vacias

5
[202]: Rating Name Date \
0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row \
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

plain_text
0 just simply a masterpiece. don't know how they…
1 , click expand to view|o jogo em si é uma evol…
2 , click expand to view|dawno się tak dobrze ni…
3 , click expand to view|the best game i've ever…
4 wow. just one of the most perfect sequels, hon…

[203]: # Detectar el idioma del texto

def detect_textlang(text):
try:
src_lang = detect(text)
if src_lang =='en':
return 'en'
else:
#return "NA"
return src_lang
except:
return "NA"
gow['text_idiom'] = gow.plain_text.apply(detect_textlang)
[Link]()

[203]: Rating Name Date \


0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12

6
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row \
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

plain_text text_idiom
0 just simply a masterpiece. don't know how they… en
1 , click expand to view|o jogo em si é uma evol… pt
2 , click expand to view|dawno się tak dobrze ni… pl
3 , click expand to view|the best game i've ever… en
4 wow. just one of the most perfect sequels, hon… en

[204]: # Agrupar el dataframe por lenguaje. Y traer el Top 10

[Link](figsize=(4,3))
[Link](gow.text_idiom).plain_text.count().sort_values(ascending=False).
,→head(10).[Link]()

[Link]()

7
Como podemos observar la mayoria de los comentarios estan en inglés, por lo cual para homologar,
haremos traduccion de los textos a este idioma

[205]: # Traducir a inglés

def translate_text(lang,text):
translator= Translator()
trans_text = [Link](text, src=lang).text
return trans_text

gow['Translated_text']=[Link](lambda x: x.plain_text if x.text_idiom == 'en'␣


,→else translate_text(x.text_idiom, x.plain_text), axis=1)

gow.Translated_text = gow.Translated_text.[Link]()

[206]: [Link]()

[206]: Rating Name Date \


0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row \
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

plain_text text_idiom \
0 just simply a masterpiece. don't know how they… en
1 , click expand to view|o jogo em si é uma evol… pt
2 , click expand to view|dawno się tak dobrze ni… pl
3 , click expand to view|the best game i've ever… en
4 wow. just one of the most perfect sequels, hon… en

Translated_text

8
0 just simply a masterpiece. don't know how they…
1 , click expand to view | the game itself is an…
2 , click expand to view | i haven't had so much…
3 , click expand to view|the best game i've ever…
4 wow. just one of the most perfect sequels, hon…

[207]: # Creamos la columna para contar el número de palabras

gow["Count_Words"] = gow['Translated_text'].[Link]().[Link]()
[Link]()

[207]: Rating Name Date \


0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row \
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

plain_text text_idiom \
0 just simply a masterpiece. don't know how they… en
1 , click expand to view|o jogo em si é uma evol… pt
2 , click expand to view|dawno się tak dobrze ni… pl
3 , click expand to view|the best game i've ever… en
4 wow. just one of the most perfect sequels, hon… en

Translated_text Count_Words
0 just simply a masterpiece. don't know how they… 49
1 , click expand to view | the game itself is an… 134
2 , click expand to view | i haven't had so much… 209
3 , click expand to view|the best game i've ever… 142
4 wow. just one of the most perfect sequels, hon… 13

9
[208]: # Creamos una columna que elimine las "stop_words"
gow['Text_Without_Stop_Words'] = gow['Translated_text'].apply(lambda x: ' '.
,→join([word for word in [Link]() if word not in (stop)]))

[Link]()

[208]: Rating Name Date \


0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row \
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

plain_text text_idiom \
0 just simply a masterpiece. don't know how they… en
1 , click expand to view|o jogo em si é uma evol… pt
2 , click expand to view|dawno się tak dobrze ni… pl
3 , click expand to view|the best game i've ever… en
4 wow. just one of the most perfect sequels, hon… en

Translated_text Count_Words \
0 just simply a masterpiece. don't know how they… 49
1 , click expand to view | the game itself is an… 134
2 , click expand to view | i haven't had so much… 209
3 , click expand to view|the best game i've ever… 142
4 wow. just one of the most perfect sequels, hon… 13

Text_Without_Stop_Words
0 simply masterpiece. know 2018 beat highest exp…
1 , click expand view | game evolution first, in…
2 , click expand view | much fun game 29 hours t…
3 , click expand view|the best game i've ever pl…
4 wow. one perfect sequels, honestly fantastic g…

10
[209]: # Creamos una columna que elimine los signos de puntuación

gow["Text_Clean"] = gow['Text_Without_Stop_Words'].[Link]('[^\w\s]','')
[Link]()

<ipython-input-209-a2a6e1fba5f6>:3: FutureWarning: The default value of regex


will change from True to False in a future version.
gow["Text_Clean"] = gow['Text_Without_Stop_Words'].[Link]('[^\w\s]','')

[209]: Rating Name Date \


0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row \
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

plain_text text_idiom \
0 just simply a masterpiece. don't know how they… en
1 , click expand to view|o jogo em si é uma evol… pt
2 , click expand to view|dawno się tak dobrze ni… pl
3 , click expand to view|the best game i've ever… en
4 wow. just one of the most perfect sequels, hon… en

Translated_text Count_Words \
0 just simply a masterpiece. don't know how they… 49
1 , click expand to view | the game itself is an… 134
2 , click expand to view | i haven't had so much… 209
3 , click expand to view|the best game i've ever… 142
4 wow. just one of the most perfect sequels, hon… 13

Text_Without_Stop_Words \
0 simply masterpiece. know 2018 beat highest exp…
1 , click expand view | game evolution first, in…
2 , click expand view | much fun game 29 hours t…

11
3 , click expand view|the best game i've ever pl…
4 wow. one perfect sequels, honestly fantastic g…

Text_Clean
0 simply masterpiece know 2018 beat highest expe…
1 click expand view game evolution first innov…
2 click expand view much fun game 29 hours try…
3 click expand viewthe best game ive ever playe…
4 wow one perfect sequels honestly fantastic gam…

[210]: # Creamos la columna para contar el número de palabras

gow["Count_Text_Clean"] = gow['Text_Clean'].[Link]().[Link]()
[Link]()

[210]: Rating Name Date \


0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row \
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

plain_text text_idiom \
0 just simply a masterpiece. don't know how they… en
1 , click expand to view|o jogo em si é uma evol… pt
2 , click expand to view|dawno się tak dobrze ni… pl
3 , click expand to view|the best game i've ever… en
4 wow. just one of the most perfect sequels, hon… en

Translated_text Count_Words \
0 just simply a masterpiece. don't know how they… 49
1 , click expand to view | the game itself is an… 134
2 , click expand to view | i haven't had so much… 209

12
3 , click expand to view|the best game i've ever… 142
4 wow. just one of the most perfect sequels, hon… 13

Text_Without_Stop_Words \
0 simply masterpiece. know 2018 beat highest exp…
1 , click expand view | game evolution first, in…
2 , click expand view | much fun game 29 hours t…
3 , click expand view|the best game i've ever pl…
4 wow. one perfect sequels, honestly fantastic g…

Text_Clean Count_Text_Clean
0 simply masterpiece know 2018 beat highest expe… 23
1 click expand view game evolution first innov… 70
2 click expand view much fun game 29 hours try… 97
3 click expand viewthe best game ive ever playe… 88
4 wow one perfect sequels honestly fantastic gam… 8

[211]: # Como la unica columna númerica es Rating, solo nos aparecio esa columna, sin␣
,→embargo haremos un poco de Feature Enginering

# De la ultima columna extraeremos los números con exprexiones regulares

digits = r"\d+"
gow["Digits"] = gow["Usefulness"].[Link](digits)
[Link]()

[211]: Rating Name Date \


0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row \
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

13
plain_text text_idiom \
0 just simply a masterpiece. don't know how they… en
1 , click expand to view|o jogo em si é uma evol… pt
2 , click expand to view|dawno się tak dobrze ni… pl
3 , click expand to view|the best game i've ever… en
4 wow. just one of the most perfect sequels, hon… en

Translated_text Count_Words \
0 just simply a masterpiece. don't know how they… 49
1 , click expand to view | the game itself is an… 134
2 , click expand to view | i haven't had so much… 209
3 , click expand to view|the best game i've ever… 142
4 wow. just one of the most perfect sequels, hon… 13

Text_Without_Stop_Words \
0 simply masterpiece. know 2018 beat highest exp…
1 , click expand view | game evolution first, in…
2 , click expand view | much fun game 29 hours t…
3 , click expand view|the best game i've ever pl…
4 wow. one perfect sequels, honestly fantastic g…

Text_Clean Count_Text_Clean \
0 simply masterpiece know 2018 beat highest expe… 23
1 click expand view game evolution first innov… 70
2 click expand view much fun game 29 hours try… 97
3 click expand viewthe best game ive ever playe… 88
4 wow one perfect sequels honestly fantastic gam… 8

Digits
0 [21, 27]
1 [20, 26]
2 [19, 25]
3 [19, 25]
4 [17, 23]

[212]: # Creamos la columna de Usuarios que consideraron util ese comentario

gow["Users_Usefulness_Review"] = gow["Digits"].str[0]
[Link]()

[212]: Rating Name Date \


0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

14
Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row \
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

plain_text text_idiom \
0 just simply a masterpiece. don't know how they… en
1 , click expand to view|o jogo em si é uma evol… pt
2 , click expand to view|dawno się tak dobrze ni… pl
3 , click expand to view|the best game i've ever… en
4 wow. just one of the most perfect sequels, hon… en

Translated_text Count_Words \
0 just simply a masterpiece. don't know how they… 49
1 , click expand to view | the game itself is an… 134
2 , click expand to view | i haven't had so much… 209
3 , click expand to view|the best game i've ever… 142
4 wow. just one of the most perfect sequels, hon… 13

Text_Without_Stop_Words \
0 simply masterpiece. know 2018 beat highest exp…
1 , click expand view | game evolution first, in…
2 , click expand view | much fun game 29 hours t…
3 , click expand view|the best game i've ever pl…
4 wow. one perfect sequels, honestly fantastic g…

Text_Clean Count_Text_Clean \
0 simply masterpiece know 2018 beat highest expe… 23
1 click expand view game evolution first innov… 70
2 click expand view much fun game 29 hours try… 97
3 click expand viewthe best game ive ever playe… 88
4 wow one perfect sequels honestly fantastic gam… 8

Digits Users_Usefulness_Review
0 [21, 27] 21
1 [20, 26] 20
2 [19, 25] 19
3 [19, 25] 19

15
4 [17, 23] 17

[213]: # Creamos la columna de Usuarios totales que vieron ese comentario

gow["Users_Total_Review"] = gow["Digits"].str[1]
[Link]()

[213]: Rating Name Date \


0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row \
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

plain_text text_idiom \
0 just simply a masterpiece. don't know how they… en
1 , click expand to view|o jogo em si é uma evol… pt
2 , click expand to view|dawno się tak dobrze ni… pl
3 , click expand to view|the best game i've ever… en
4 wow. just one of the most perfect sequels, hon… en

Translated_text Count_Words \
0 just simply a masterpiece. don't know how they… 49
1 , click expand to view | the game itself is an… 134
2 , click expand to view | i haven't had so much… 209
3 , click expand to view|the best game i've ever… 142
4 wow. just one of the most perfect sequels, hon… 13

Text_Without_Stop_Words \
0 simply masterpiece. know 2018 beat highest exp…
1 , click expand view | game evolution first, in…
2 , click expand view | much fun game 29 hours t…
3 , click expand view|the best game i've ever pl…

16
4 wow. one perfect sequels, honestly fantastic g…

Text_Clean Count_Text_Clean \
0 simply masterpiece know 2018 beat highest expe… 23
1 click expand view game evolution first innov… 70
2 click expand view much fun game 29 hours try… 97
3 click expand viewthe best game ive ever playe… 88
4 wow one perfect sequels honestly fantastic gam… 8

Digits Users_Usefulness_Review Users_Total_Review


0 [21, 27] 21 27
1 [20, 26] 20 26
2 [19, 25] 19 25
3 [19, 25] 19 25
4 [17, 23] 17 23

[214]: # Creamos la columna de Ratio_Review que dividira el numero de usuarios que␣


,→consideran util la reseña entre el total

gow["Users_Usefulness_Review"] = gow["Users_Usefulness_Review"].astype(int)
gow["Users_Total_Review"] = gow["Users_Total_Review"].astype(int)

gow["Ratio_Review"] = gow["Users_Usefulness_Review"] / gow["Users_Total_Review"]


[Link]()

[214]: Rating Name Date \


0 10 ARMENHAMMER18 2022-11-13
1 10 Atres 2022-11-13
2 10 stipex 2022-11-12
3 10 Exc-Enthusiast 2022-11-11
4 10 Darkula666 2022-11-13

Text \
0 Just simply a masterpiece. Don't know how they…
1 , click expand to view|O jogo em si é uma evol…
2 , click expand to view|Dawno się tak dobrze ni…
3 , click expand to view|The best game I've ever…
4 Wow. Just one of the most perfect sequels, hon…

Usefulness id_row \
0 21\nof \n27\nusers found this helpful 2022-11-13ARMENHAMMER18
1 20\nof \n26\nusers found this helpful 2022-11-13Atres
2 19\nof \n25\nusers found this helpful 2022-11-12stipex
3 19\nof \n25\nusers found this helpful 2022-11-11Exc-Enthusiast
4 17\nof \n23\nusers found this helpful 2022-11-13Darkula666

plain_text text_idiom \

17
0 just simply a masterpiece. don't know how they… en
1 , click expand to view|o jogo em si é uma evol… pt
2 , click expand to view|dawno się tak dobrze ni… pl
3 , click expand to view|the best game i've ever… en
4 wow. just one of the most perfect sequels, hon… en

Translated_text Count_Words \
0 just simply a masterpiece. don't know how they… 49
1 , click expand to view | the game itself is an… 134
2 , click expand to view | i haven't had so much… 209
3 , click expand to view|the best game i've ever… 142
4 wow. just one of the most perfect sequels, hon… 13

Text_Without_Stop_Words \
0 simply masterpiece. know 2018 beat highest exp…
1 , click expand view | game evolution first, in…
2 , click expand view | much fun game 29 hours t…
3 , click expand view|the best game i've ever pl…
4 wow. one perfect sequels, honestly fantastic g…

Text_Clean Count_Text_Clean \
0 simply masterpiece know 2018 beat highest expe… 23
1 click expand view game evolution first innov… 70
2 click expand view much fun game 29 hours try… 97
3 click expand viewthe best game ive ever playe… 88
4 wow one perfect sequels honestly fantastic gam… 8

Digits Users_Usefulness_Review Users_Total_Review Ratio_Review


0 [21, 27] 21 27 0.777778
1 [20, 26] 20 26 0.769231
2 [19, 25] 19 25 0.760000
3 [19, 25] 19 25 0.760000
4 [17, 23] 17 23 0.739130

[215]: # Volvemos a aplicar el describe

[Link]()

[215]: Rating Count_Words Count_Text_Clean Users_Usefulness_Review \


count 106.000000 106.000000 106.000000 106.000000
mean 8.141509 125.641509 68.433962 7.254717
std 3.127265 183.671611 96.864168 10.151295
min 0.000000 13.000000 6.000000 0.000000
25% 7.000000 22.250000 13.000000 2.000000
50% 10.000000 39.000000 21.000000 4.000000
75% 10.000000 140.000000 82.000000 7.750000
max 10.000000 828.000000 416.000000 65.000000

18
Users_Total_Review Ratio_Review
count 106.000000 104.000000
mean 15.226415 0.675051
std 32.897325 0.189031
min 0.000000 0.000000
25% 3.000000 0.600000
50% 6.000000 0.666667
75% 12.500000 0.750000
max 255.000000 1.000000

[216]: #INTERACTIVA
#Crreación función con un for que recorra todas las variables numerocas del df␣
,→y nos muestre su histograma, percentiles y datos relevantes

@interact
def stats_vars(bins = [10,20,30,40,50,60,70,80,90,100],
facecolor = ['grey','lightblue','orange','green','red']
):

# Lista de variables numericas


numericas=[
'Rating',
'Users_Usefulness_Review',
'Users_Total_Review',
'Ratio_Review'
]

print('-------------------------------------------- VARIABLES␣
,→NUMERICAS-------------------------------------------------------')

var_num = numericas
cont = 1

for c in var_num:
print('\n///////////////////////////////////////',cont,")",c,'//////////
,→//////////////////////////////////////////////////')

gow[c] = gow[c].astype(float)
#N° de vacíos
print('N° nulos:', [Link][gow[c].isna()==True].shape[0])
# contar el número de categorías únicas
num_cat = len(gow[c].unique())
cont += 1
print('N° de valores distintos:', num_cat)

# Mostrar dataframe con los valores


g_aux = 100*gow[c].value_counts(normalize=True).to_frame().head(10)

19
g_aux.rename(columns={c : 'Porcentaje'}, inplace=True)
g_aux.reset_index(inplace=True)
g_aux.rename(columns={'index' : c}, inplace=True)
display(g_aux)

gow[c].plot(kind='hist', bins= bins, figsize=(12,6), facecolor=␣


,→ facecolor,edgecolor='black')
#[Link](figsize=(30, 10))
#[Link](df[c], bins=20)
display(gow[c].describe())
deciles = [Link](1, 10) * 10
deciles_dist = [[Link](gow[c], dec) for dec in deciles]
print('percentiles ' + str(deciles_dist))
[Link]()

interactive(children=(Dropdown(description='bins', options=(10, 20, 30, 40, 50,␣


,→60, 70, 80, 90, 100), value=10…

[217]: # Crear un dataframe vacio para empezar el analisis


df1=[Link]()
df1['id_row']=['99999999999']
df1['sentiment_type']='NA999NA'
df1['sentiment_score']=0
[Link]()

[217]: id_row sentiment_type sentiment_score


0 99999999999 NA999NA 0

1.3 Etapa de desarrollo


[218]: # Crear una nube de palabras con las palabras que más se repiten

wc=WordCloud(stopwords=stop, collocations=False, max_font_size=55,␣


,→max_words=25, background_color="black")

[Link](' '.join(gow.Text_Clean))
[Link](figsize=(10,12))
[Link](wc, interpolation="bilinear")
[Link]("off")

[218]: (-0.5, 399.5, 199.5, -0.5)

20
1.3.1 Análisis de Sentimientos
La clase SentimentIntensityAnalyzer() utiliza el diccionario Valence Aware y el sEntiment Reasoner
(VADER) en NLTK. El léxico de sentimientos en VADER es una lista de características léxicas
como palabras y frases etiquetadas como positivas o negativas según su orientación semántica. Su
enfoque basado en reglas es especialmente bueno para detectar opiniones en aplicaciones comunes
como publicaciones en redes sociales, reseñas de productos o servicios y respuestas a encuestas.
VADER también genera una puntuación numérica en el rango de uno negativo (-1) a uno positivo
(+1) para indicar la intensidad de cuán negativo o positivo es el sentimiento. Esto se denomina
puntaje de polaridad y se implementa mediante el método polarity_score de la clase SentimentIn-
tensityAnalyzer.
• La puntuación de polaridad en el rango de -1 a -0.5 generalmente indica un sentimiento
negativo
• La puntuación de polaridad superior a -0,5 e inferior a +0,5 suele indicar un sentimiento
neutral
• La puntuación de polaridad en el rango de +0,5 a 1 generalmente indica un sentimiento
positivo
Los siguientes pasos implican crear una instancia de un objeto de la clase SentimentIntensityAna-
lyzery ejecutar un ciclo for para iterar el polarity_scoresmétodo sobre cada fila del marco de datos
de texto de entrada df_subset. Otro bucle for está incrustado con el bucle anterior para escribir
la puntuación de polaridad del sentimiento para cada tipo de sentimiento en un marco de datos
intermedio. Los tres valores de tipo de sentimiento son.
• neg para sentimiento negativo
• neu para sentimiento neutral
• pos para sentimiento positivo

21
• compound para un puntaje general que combina sentimientos negativos, positivos y neutrales
en un solo puntaje.

[219]: # Polaridad de los sentimientos

"""
Para nuestro caso de estudio consideraremos que:

* Si compound < 0 --> Negativo


* Si compound > 0.2 --> Positivo
* Si compound ente [0, 0.2] --> Neutral
"""
analyzer=SentimentIntensityAnalyzer()
gow['Polarity']=[analyzer.polarity_scores(text)['compound'] for text in gow.
,→Text_Clean]

def get_sentiment(polarity):
if polarity < 0.0:
return 'Negativo'
elif polarity > 0.2:
return 'Positivo'
else:
return 'Neutral'

# Graficar la polaridad
gow['Sentiment'] = [Link](get_sentiment)
[Link](figsize=(3,3))
[Link].value_counts().[Link]()

[219]: <[Link]._subplots.AxesSubplot at 0x7f3653fb9880>

22
[220]: [Link]

[220]: (106, 19)

[221]: # Filtrar el dataset con Sentimiento Negativo y ver la nube de palabras

fil_neg = gow["Sentiment"] == "Negativo"


gow_neg = gow[fil_neg]
print("El número de comentarios negativos es de: ", len(gow_neg))

wc=WordCloud(stopwords=stop, collocations=False, max_font_size=55,␣


,→max_words=25, background_color="black")

[Link](' '.join(gow_neg.Text_Clean))
[Link](figsize=(10,12))
[Link](wc, interpolation="bilinear")
[Link]("off")

El número de comentarios negativos es de: 20

[221]: (-0.5, 399.5, 199.5, -0.5)

[222]: # Filtrar el dataset con Sentimiento Positivo y ver la nube de palabras

fil_pos = gow["Sentiment"] == "Positivo"


gow_pos = gow[fil_pos]
print("El número de comentarios positivos es de: ", len(gow_pos))

23
wc=WordCloud(stopwords=stop, collocations=False, max_font_size=55,␣
,→max_words=25, background_color="black")

[Link](' '.join(gow_pos.Text_Clean))
[Link](figsize=(10,12))
[Link](wc, interpolation="bilinear")
[Link]("off")

El número de comentarios positivos es de: 80

[222]: (-0.5, 399.5, 199.5, -0.5)

[223]: # Filtrar el dataset con Sentimiento Neutros y ver la nube de palabras

fil_neu = gow["Sentiment"] == "Neutral"


gow_neu = gow[fil_neu]
print("El número de comentarios positivos es de: ", len(gow_neu))

wc=WordCloud(stopwords=stop, collocations=False, max_font_size=55,␣


,→max_words=25, background_color="black")

[Link](' '.join(gow_neu.Text_Clean))
[Link](figsize=(10,12))
[Link](wc, interpolation="bilinear")
[Link]("off")

El número de comentarios positivos es de: 6

[223]: (-0.5, 399.5, 199.5, -0.5)

24
[225]: # Crear Excel de Salida que sera la entrada del tablero de control de Tableau

out = gow.to_excel(path_out)

1.4 Conclusiones
• Se logro crear un script en un lenguaje open source, escalable y fácil de implementar que si
bien solo recibio en esta ocacion 170 registros podria procesar muchisimos más registros en
cada ejecución.
• El script es capaz de detectar el idioma del comentario y taducirlo al ingles para posteri-
ormente hacer el análisis de sentimiento y valuar la polaridad de los comentarios de cada
usuario.
• Realizamos ingenieria de caracteristicas en el script para dar como salida una base con más
columnas que servira para usar en el tablero y generar visualizaciones más potentes.

25

También podría gustarte