Mineria de Texto de La Web Opinion Publica Hechos Referentes Al Barrio La Floresta
Mineria de Texto de La Web Opinion Publica Hechos Referentes Al Barrio La Floresta
Mineria de Texto de La Web Opinion Publica Hechos Referentes Al Barrio La Floresta
Certificamos que el presente trabajo fue desarrollado por Marlon Fabricio Vargas
Pulliquitín, bajo nuestra supervisión.
DIRECTORA DE PROYECTO
CODIRECTOR DE PROYECTO
II
DECLARACIÓN
Yo Marlon Fabricio Vargas Pulliquitín, declaro bajo juramento que el trabajo aquí descrito
es de mi autoría; que no ha sido previamente presentada para ningún grado o calificación
profesional; y, que he consultado las referencias bibliográficas que se incluyen en este
documento.
III
AGRADECIMIENTOS
Agradezco a Fabricio Vargas y Janeth Pulliquitín, por haberme educado con todo su amor
y dedicación. A Jeanneth Vargas y Samy Vargas, por ser siempre mi apoyo y fuente de
alegría infinita. A Nestor Pulliquitín y Teresa Jurado, por transmitirme su sabiduría y cariño
con mucha paciencia. A mi tía Azucena Jacho, por cuidarme y estar siempre pendiente de
mí. Y a los demás miembros de mi familia con los que crecí, todos forman parte de la
realización de esta meta.
Agradecimientos especiales a la Ing. Elisa Mena y al Ing. Iván Carrera, por su constancia
y por ser mi guía a lo largo de la realización de este trabajo. Al Ing. Gustavo Samaniego,
por sus sabios consejos. A la Facultad de Ingeniería de Sistemas y a la Escuela Politécnica
Nacional, por formarme como profesional.
IV
DEDICATORIA
Mis esfuerzos en alcanzar esta meta los dedico a Samy Vargas. Aunque no pude estar
todo el tiempo ahí para verte crecer, te llevé conmigo siempre.
V
ÍNDICE DE CONTENIDO
RESUMEN..................................................................................................................... XIII
1. INTRODUCCIÓN ........................................................................................................ 1
2. METODOLOGÍA......................................................................................................... 5
2.2.1 Twitter.........................................................................................................10
2.2.2 Facebook....................................................................................................12
VI
2.6.2 Descripción de datos ..................................................................................53
4. CONCLUSIONES ..................................................................................................... 83
5. REFERENCIAS ........................................................................................................ 86
6. ANEXOS .................................................................................................................. 93
VII
ÍNDICE DE ILUSTRACIONES
Ilustración 8. Extracto de respuesta de la búsqueda en The Culture Trip, usando la API .16
Ilustración 11. Identificación del elemento html, a recoger de Trip Advisor ......................20
Ilustración 14. Búsqueda por etiqueta “La Floresta” en sitio web de El Comercio ............22
Ilustración 17. Elemento de página que contiene enlace a una noticia en El Comercio ...24
Ilustración 18. Búsqueda por etiqueta “La Floresta” en sitio web de El Telégrafo. ...........26
Ilustración 20. Elemento que contiene el enlace a una noticia en página de El Telégrafo
........................................................................................................................................27
VIII
Ilustración 21. Ejemplo de estandarización de campos entre datos de Facebook y Twitter
........................................................................................................................................30
Ilustración 22. Ejemplo del uso de grep para limpieza de datos .......................................32
Ilustración 23. a) Modelo de bases de datos por fuente. b) Bases de datos en CouchDB 34
Ilustración 26. Exactitud y tiempo de ejecución del clasificador basado en Naïve Bayes .46
Ilustración 30. Gráfico comparativo de los modelos de clasificación, exactitud vs. tiempo de
ejecución .........................................................................................................................51
Ilustración 31. Tabla de frecuencias absolutas de las publicaciones según sus fuentes ..53
Ilustración 33. Tabla de frecuencias relativas de las publicaciones según sus temáticas .54
IX
Ilustración 38. Nube de palabras de publicaciones sobre La Floresta ..............................64
Ilustración 39. Mapa de concentración de sitios turísticos de interés, sector La Mariscal .65
Ilustración 47. Tablero de mando: Selección de temática para mostrar detalle ................71
Ilustración 52. La Floresta, análisis por temática arte. a) Histograma de emociones b) Nube
de palabras ......................................................................................................................76
X
Ilustración 56. La Floresta, análisis por temática inseguridad. a) Histograma de emociones
b) Nube de palabras ........................................................................................................80
ÍNDICE DE TABLAS
Tabla 2. Extracto de tabla resultado de web scraping de artículos de The Culture Trip ...18
ÍNDICE DE ECUACIONES
ÍNDICE DE CÓDIGOS
XI
Código 2. Ejemplo de programa en Python que extrae posts de página pública de Facebook
........................................................................................................................................13
Código 5. Funciones de web scraping para recoger datos de sitios turísticos de Trip Advisor
........................................................................................................................................21
Código 6. Funciones de web scraping para obtener datos de noticias de El Comercio ....25
Código 11. Cálculo de exactitud y tiempo de ejecución del clasificador basado en Naïve
Bayes ..............................................................................................................................46
Código 12. Cálculo de exactitud y tiempo de ejecución del clasificador basado en árboles
de decisión ......................................................................................................................48
Código 17. LDA iterativo para obtener tópicos de varios documentos según sus temáticas
........................................................................................................................................61
XII
RESUMEN
Los datos recolectados provienen de fuentes web como sitios de noticias, blogs y redes
sociales con respecto al barrio La Floresta, de Quito. El producto final de la ejecución del
proyecto es un sistema que tiene la capacidad de clasificar texto según la temática a la que
pertenece e identificar los sentimientos y las emociones expresadas en él. El sistema
presenta los resultados del análisis de forma gráfica en una interfaz web.
Los resultados del procesamiento de los datos en el sistema nos permiten observar que,
de acuerdo con las temáticas del texto y sus sentimientos, La Floresta es un barrio unido y
organizado con una oferta cultural y artística abundante.
XIII
ABSTRACT
The present project details the construction of a data analytics system oriented to text
mining. The data analysis focuses on determining the topics of the texts, with the feelings
and emotions expressed in them. This system is elaborated through a descriptive and
predictive analysis approach.
The data collected was gathered from web sources such as news web sites, blogs and
social media with about the neighborhood La Floresta of Quito. The final product of the
execution of the project is a system that has the functionality of classifying text according to
the topic to which it belongs to, and identifying the feelings and emotions expressed in it.
The system presents the results of the analysis graphically in a web interface.
The results of the processing of data in the system show us that, according to the topics
and the feelings of the texts, La Floresta is a united and organized neighborhood with a
great cultural and artistic offer.
XIV
1. INTRODUCCIÓN
1.1 Motivación
Actualmente, se estima que la cantidad de datos alojados en Internet se duplica cada dos
años; de dichas cantidades, sólo el 25% es considerado útil para el análisis. Sin embargo,
aproximadamente sólo el 3% es analizado (Gantz & Reinsel, 2012). Gran parte de estos
datos están disponibles para adquirirlos y analizarlos en busca de ideas de provecho.
Los medios sociales y de noticias son sitios donde se publica constantemente texto de
opinión pública y narración de hechos. Estos sitios son fuentes de datos que pueden ser
utilizados para averiguar de qué temas se habla y en qué cantidad, si se habla positiva o
negativamente, o qué emociones expresan o causan en sus lectores; todo a través de un
proceso de minería de texto en el cual se analizan datos textuales para descubrir patrones
y tendencias de interés (Liu, 2015). Al averiguar sobre qué temáticas se comentan, los
sentimientos y emociones que causan estas en las personas, se pueden estimar sus
necesidades. A su vez, “cada necesidad insatisfecha representa una oportunidad de
negocio” (Strategyn, 2017).
Respecto a este tema, se realizó un proyecto en el año 2016 en Corea, en el que se utilizó
minería de texto sobre posts de Twitter donde mencionaban a pequeños negocios locales
de comida. El objetivo fue implementar un sistema de descubrimiento automático de
conocimiento a partir de comentarios publicados en la red social; esto para determinar el
nivel de satisfacción de los clientes y ofrecer a dichas empresas una herramienta para la
toma de decisiones. Se utilizaron métodos como el web crawling y el consumo de servicios
a través de Application Programming Interfaces (APIs) para la adquisición de datos, junto
a técnicas de aprendizaje de máquina para el análisis. Como resultados, cuantificaron la
conformidad que expresaban las opiniones vertidas, clasificándolas por negocio e
identificando perfiles de su clientela según edad, sexo y ocupación (Sung-min & Sung-min,
2016).
1
todas las publicaciones, el 0,5 % se referían a México, y se encontró que los tres temas
más abordados fueron: en primer lugar, el fútbol, en segundo lugar, la delincuencia y otros
delitos en México, y en tercer lugar, noticias sobre artistas mexicanos (Cárcamo, Calva,
Ronquillo, & Nesbet, 2017).
De observar estos hechos, surge el desarrollo del presente trabajo, el cual abarca el
análisis de texto tomado de la web que contenga opinión pública y hechos referentes al
barrio La Floresta. Este barrio se encuentra en Quito - Ecuador, en la parroquia La Mariscal.
Esta parroquia y el Centro Histórico son consideradas las zonas especiales turísticas de
Quito (Quito Turismo, 2013). La Floresta es un barrio que despierta el interés turístico y
alberga una alta actividad económica; está en el puesto número 14 con mayor población
económicamente activa, de entre 147 barrios pertenecientes a la administración zonal
Eugenio Espejo (Gobierno Abierto Quito, 2017); alrededor de 14.500 contribuyentes al
Servicio de Rentas Internas, entre personas naturales y sociedades, residen o realizan
alguna actividad económica en el barrio (Servicio de Rentas Internas, 2017). También
posee una alta concentración de negocios propios de los moradores del barrio. Tiene
alrededor de 93 negocios dentro de un área de aproximadamente 1,1 km² (De La Floresta,
2016) (Secretaria de Territorio, Habitat y Vivienda - Municipio de Quito, 2013). El Colectivo
cultural barrial “De La Floresta”, conformado con el propósito de unir y organizar a los
vecinos y emprendedores del barrio, realiza eventos para promover el consumo de sus
productos y servicios (De La Floresta, 2016).
Los pequeños negocios locales del barrio han sido montados basándose en la experiencia
y conocimiento empírico de sus propietarios (Moshenek, 2017). En la web se encuentran
diversas publicaciones referentes al barrio, realizadas por residentes, negociantes,
visitantes nacionales e internacionales, y sitios de noticias (De La Floresta, 2016) (The
Culture Trip, 2017). Sin embargo, su uso para la toma de decisiones es dificultoso debido
a la falta de organización, procesamiento e interpretación de los datos.
2
1.2 Iniciativa
1. Identificación de datos
2. Adquisición y filtrado de datos
3. Extracción de datos
4. Validación y limpieza de datos
5. Agregación y representación de datos
6. Análisis de datos (Minería de texto)
7. Visualización de datos
Debido a que los datos a manejar son exclusivamente de texto, la fase de análisis
corresponde concretamente a minería de texto. Se propone realizar un análisis de tipo
exploratorio y descriptivo, sin partir de una hipótesis, sino examinando los datos en
3
búsqueda de patrones o anomalías. El análisis debe tener la capacidad de responder
preguntas sobre eventos pasados o presentes (Erl, Khattak, & Buhler, 2016). Los
resultados finales del proyecto son un sistema automático de analítica de texto, y un tablero
de mando, como herramienta web de visualización de los resultados del análisis.
4
2. METODOLOGÍA
El proceso empieza con la identificación de fuentes web de opinión pública y noticias, como
Facebook, Twitter, Trip Advisor, El Comercio, etc., de ellos se recolecta el texto mediante
un proceso de adquisición y filtrado, usando R y Python. Después de la recolección, los
datos son almacenados en bases de datos en CouchDB, por motivos de registro y para
1 Los datos no estructurados son aquellos datos sin estructuras bien definidas como las que se
tienen tradicionalmente en las bases de datos relacionales (Erl, Khattak, & Buhler, 2016).
5
otros posibles análisis futuros. De la recolección, los datos entran al escenario de
preprocesamiento de datos, donde, a través del uso de R, se realiza extracción, validación
y limpieza de los datos para su posterior almacenamiento en un nuevo conjunto de bases
de datos limpios, en CouchDB; estas tareas preparan los datos para el análisis.
El siguiente paso es llevar los datos a la fase de análisis, donde, utilizando R, se aplican
varias técnicas de clasificación y descripción de datos. Los resultados son almacenados
en archivos de texto plano en formato CSV, por su fácil lectura y almacenamiento. Estos
archivos son cargados al escenario de visualización, donde son leídos con R y presentados
a través de gráficos interactivos mediante una aplicación web, construida y publicada
usando Shiny, de R.
6
2.1 Identificación de datos
Los sitios web de viajes que ofrecen servicios de reservación e información sobre hoteles,
restaurantes y sitios por visitar, también contienen reseñas realizadas por sus usuarios;
esto las convierte en una fuente importante de opiniones de visitantes nacionales y
extranjeros. De dichos sitios, se escogió a Trip Advisor por poseer la más fuerte comunidad
de reseñas generadas por usuarios (Chen C. , 2017). Otra fuente, que brinda una visión
desde el punto de vista turístico, es The Culture Trip, un sitio web tipo blog, donde los
viajeros cuentan sus historias y experiencias después de visitar un destino. The Culture
7
Trip tiene 12,5 millones de seguidores y aportantes de contenido, y muestra del interés que
poseen turistas extranjeros en este barrio de Quito (Forbes, 2018) (The Culture Trip, 2018).
Barrio La Floresta -
Quito
Twitter
Redes Sociales De La Floresta
Páginas de Facebook
La Floresta Te
Enamora
The Culture Trip
Te Quiero Verde La
Blogs y reseñas
Floresta
Trip Advisor
El Comercio
Noticias
El Telégrafo
8
2.2 Adquisición y filtrado de datos
Durante la etapa de adquisición y filtrado de datos, estos se recolectan de todas las fuentes
identificadas en la fase de 2.1.Identificación de datos. Es probable que los conjuntos de
datos adquiridos traigan consigo datos que no son de interés para el análisis, por lo que es
preciso realizar operaciones de filtrado y preprocesamiento (Chen, Mao, & Liu, 2014).
Para la recolección de datos web, se utilizaron principalmente dos técnicas: web scraping,
basado en la descarga e interpretación de páginas web para recolectar datos específicos
como títulos, subtítulos, descripciones u otras zonas específicas de un sitio (Picot, 2016);
y el consumo de datos a través de APIs, que son interfaces a través de los cuales las
aplicaciones solicitan y comparten datos (Kwartler, 2017).
De acuerdo con la fuente de datos, se utilizaron técnicas con las que se adquirieron los
datos y se aplicaron los filtros. Así, las fuentes de datos fueron: Twitter, Facebook, The
Culture Trip, Trip Advisor, El Comercio y El Telégrafo.
9
2.2.1 Twitter
En un inicio se planeó utilizar la API oficial de Twitter para la recolección de datos, ya que
este método es efectivo para la captura de datos en tiempos cercanos al real. Sin embargo,
la API no ofrece una función para capturar tweets realizados antes de diez días, a menos
que se adquiera una suscripción pagada con funcionalidades adicionales y mejoradas
(Twitter Developers, 2017).
Al ser necesaria la recolección de tweets históricos, se encontró una librería abierta que
permite este trabajo. GetOldTweets, una librería disponible para Python y Java (Henrique,
2018). El mecanismo detrás de GetOldTweets es un web scraper orientado a obtener datos
históricos de Twitter (Henrique, 2018).
# Archivo: get_tw.py
# Autor: Marlon Vargas
# Fecha: noviembre 2017
# importar librería
import got
# Definir criterios de búsqueda
since = "2014-01-01"
until = (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%d")
point = "-0.202689,-78.496300"
radio = "15mi"
query = "La Floresta"
max_tweets = 3
tweetCriteria = got.manager.TweetCriteria()
.setSince(since)
.setUntil(until)
.setNear(point)
10
.setWithin(radio)
.setQuerySearch(query)
.setMaxTweets(max_tweets)
i = 0
while True:
# Obtener tweets
tweet = got.manager.TweetManager.getTweets(tweetCriteria)[i]
# Imprimir tweets
print('\n Tweet encontrado:')
print('id: '+ str(tweet.id))
print('user: '+ str(tweet.username))
print('text: '+ str(tweet.text))
print('date: '+ str(tweet.date))
i += 1
La ejecución del programa recoge los tweets y los despliega como se muestra en la
Ilustración 3.
11
(id), el nombre de usuario (user) y la fecha (date). El tweet original se muestra en la
Ilustración 4.
Una de las ventajas de GetOldTweets es que el acceso a los atributos de los tweets es
muy práctico; no sólo nos permite adquirir tweets, sino que los devuelve en forma semi-
estructurada. Otra de las ventajas de utilizar esta librería, es que prescinde el uso de un
token de acceso. Un token de acceso es una medida de seguridad de validez temporal,
para proteger el acceso de entidades no autorizadas. Por otro lado, la ventaja de la API
oficial de Twitter, son sus cortos tiempos de respuesta versus el tiempo que le toma a
GetOldTweets realizar web scraping.
2.2.2 Facebook
Para la adquisición de posts de Facebook se utilizó su API oficial. Esta herramienta permite
acceder a los datos de páginas, usuarios, publicaciones, grupos y eventos (Facebook,
2018), mediante un servicio que puede consumirse a través de peticiones http, en este
caso, generadas por un programa escrito en Python. La librería Facebook para Python se
encarga del manejo de las peticiones necesarias para conseguir los datos. Facebook
requiere también de un token de acceso temporal.
Para recolectar los posts de Facebook, se puede utilizar su API con el siguiente Código 2:
12
# Archivo: get_fb.py
# Autor: Marlon Vargas
# Fecha: noviembre 2017
# Importar librería
import facebook
# Obtener posts
posts = graph.get_connections(page, 'posts', fields = all_fields)
# Imprimir posts
for post in posts['data']:
print '\nPost encontrado'
print json.dumps(post, indent=4, sort_keys=True)
Código 2. Ejemplo de programa en Python que extrae posts de página pública de Facebook
En el Código 2, se observa que de antemano se deben tener dos cosas: el token de acceso
y la página identificada mediante su id, de la que queremos adquirir sus posts. Una vez
definido esto, se establece la conexión con la API, haciendo uso del token de acceso. Se
definen los campos que requerimos del post, y los enviamos junto con el identificador de la
página y el tipo de dato que queremos recoger dentro de la función get_connections. El
resultado de esta función es un arreglo de objetos tipo JSON, en este caso,
correspondientes a los posts encontrados en la página.
13
Ilustración 5. Posts de Facebook recolectados con la API
Los resultados indicados en la Ilustración 5 muestran que los datos entregados por la API
de Facebook llegan en un formato tipo JSON distinto de respuesta de GetOldTweets. Esto
nos da indicios de la necesidad de estandarizar el formato de los registros, en la siguiente
fase del proyecto, 2.3.Extracción de datos.
14
2.2.3 The Culture Trip
Para la recolección de datos desde The Culture Trip, se utilizó la técnica de web scraping
y el buscador propio del sitio para su filtrado. En esta fuente, se comenzó por emular una
búsqueda manual del patrón “La Floresta”. La búsqueda manual devolvió los resultados
como se muestran en la Ilustración 7:
El proceso de adquisición empezó, antes de usar web scraping, identificando una API que
utiliza la página al realizar una búsqueda manual. Esta API permitió que la consulta de
publicaciones pueda ser automatizada. Como se muestra en el Código 3, el criterio de
búsqueda (variable query) es pasado como parámetro con el valor “La Floresta Quito
Ecuador”, de esta forma se construye el enlace hacia la API. Mediante la función getURL,
se solicitan los datos a la API y se almacenan (en la variable out) y se interpretan según su
formato JSON con la función fromJSON.
15
# Archivo: get_ct.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
16
dato tipo tabla, conocido como dataframe2, que contiene la mayoría de los atributos de
cada artículo. Como se observa en la Tabla 1:
Debido a que la API no proporciona el texto del artículo, fue necesaria la creación de una
lista con los enlaces de todos los artículos encontrados, para acceder a cada uno de ellos
usando un bucle que extrae el texto mediante web scraping.
La librería de lenguaje R utilizada para web scraping fue rvest. Rvest posee alrededor de
15 funciones, de las cuales, tres fueron las más utilizadas para el desarrollo (CRAN Project,
2016):
Ø read_html: Lee un archivo .html. Recibe como parámetro el URL de la página a leer.
Ø html_nodes: Identifica y extrae un determinado elemento (nodo) del HTML de la página.
Recibe como parámetro el identificador del elemento (según XPath o selectores CSS).
Ø html_text: Extrae el contenido textual de un elemento del HTML de la página.
Usando su función read_html, se descarga el código de cada página web de los artículos.
Después, mediante las funciones html_nodes y html_text, se accede a las secciones donde
cada página aloja el contenido de texto, en este caso las etiquetas de párrafo (p), para irlo
17
recogiendo en una variable tipo texto. El extracto de la función que realiza el web scraping
se muestra en el Código 4.
# Archivo: get_ct.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
# Leer página
webpage <- read_html(as.character(url))
# Extraer contenido
content <- paste(webpage %>%
html_nodes('p') %>%
html_text(),
collapse = " ")
Tabla 2. Extracto de tabla resultado de web scraping de artículos de The Culture Trip
Trip Advisor ofrece una guía completa de sitios turísticos de interés. Cada uno de estos
posee una página informativa, en donde sus clientes comentan y califican diversos
aspectos del lugar. La idea inicial fue recopilar todos los comentarios posteados acerca de
18
los sitios del sector de La Floresta, con el objetivo de analizar los sentimientos de cada uno
y calcular un promedio agrupado por sitio de interés. Sin embargo, se notó que, junto con
cada reseña, los clientes realizan una calificación de entre excelente, muy bueno,
promedio, pobre y terrible. Esto se puede observar en la Ilustración 9.
Con el propósito de tener una visión general de los sitios turísticos de La Floresta, se
recogieron datos de Trip Advisor acerca de todos los lugares de interés de Quito: sus
nombres, sus calificaciones, número de comentarios y su ubicación geográfica para
desplegarlos en un mapa en la fase 2.7.Visualización de datos.
El primer paso fue identificar la API, de la que Trip Advisor obtiene todos los sitios turísticos
de una zona determinada. El mapa, de la Ilustración 10, de Trip Advisor ubica los sitios de
interés, que pueden ser hoteles y rentas (íconos azules y verdes), restaurantes (íconos
morados) o cosas por hacer (en inglés things to do) (íconos anaranjados). Los sitios de
interés con mayor número de reseñas se representan con un ícono con logo de color,
mientras los de menor número de reseñas se representan solamente con puntos de color.
19
Ilustración 10. Mapa de sitios turísticos de La Mariscal (Trip Advisor, 2017)
Al recoger los sitios de toda la ciudad mediante la API, se seleccionaron solamente los
campos de ubicación geográfica, enlace que lleva a la página web del sitio y el tipo, de
hotel, restaurante, o cosas por hacer (que en general representan lugares de visita
turística). Una vez construida una lista de los sitios con sus datos, se puede acceder,
mediante un bucle y una función de web scraping, a la página web de cada sitio y recoger
los otros tres datos faltantes: el nombre del lugar, la calificación y el número de comentarios
posteados. Las funciones que recolectan estos datos se muestran en el Código 5.
Mediante una inspección de las páginas de los sitios, se ubicaron los elementos que se
desean adquirir. Por ejemplo:
Ilustración 11. Identificación del elemento html, a recoger de Trip Advisor (Trip Advisor, 2017)
20
Ø Calificación: se ubicó en la etiqueta html de clase overallRating, como se observa
en la Ilustración 12.
Ilustración 12.Identificación del elemento html, a recoger de Trip Advisor (Trip Advisor, 2017)
Ilustración 13.Identificación del elemento html, a recoger de Trip Advisor (Trip Advisor, 2017)
Después de identificar los elementos donde se encuentran los datos adicionales, éstos se
recogen utilizando las funciones mostradas en Código 5.
# Archivo: get_ta.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
Código 5. Funciones de web scraping para recoger datos de sitios turísticos de Trip Advisor
Una vez recogidos todos los datos de los sitios y unificados en una sola tabla, el resultado
se puede visualizar en la Tabla 3. Esta tabla tiene de campos la latitud (lat), longitud (lng),
21
la URL (url), el tipo de sitio (type), el nombre (place_name), la calificación (rate) y el número
de comentarios (num_comments).
Tabla 3. Extracto de tabla de sitios turísticos de Quito con calificaciones y número de reseñas
2.2.5 El Comercio
La adquisición de noticias del sitio web de El Comercio se realizó también mediante web
scraping. Este sitio proporciona un método de búsqueda de artículos basado en etiquetas.
Como filtrado de datos se utilizó la búsqueda del patrón “La Floresta”, de acuerdo con la
Ilustración 14.
Ilustración 14. Búsqueda por etiqueta “La Floresta” en sitio web de El Comercio (El Comercio, 2018)
22
El proceso de recolección de noticias empieza con identificar la forma en que El Comercio
realiza la búsqueda por etiqueta. El patrón para buscar se inserta en una URL, a la que se
accede automáticamente y se muestran los artículos encontrados. En la misma página, el
sitio web despliega hasta veinte artículos encontrados, si existen más, el sitio web los divide
entre varias páginas. Al final de cada página se encuentra una sección de navegación entre
páginas, como se ve en la Ilustración 15, que se puede utilizar para obtener todas las
páginas de resultados, así como los enlaces para poder acceder a las noticias.
Ilustración 15. Sección de navegación entre páginas de resultados (El Comercio, 2018)
Mediante una función de web scraping que extrae el contenido del elemento, de clase
pagination, se pueden obtener un conjunto de URLs pertenecientes a las páginas de
resultados. Accediendo a cada URL del conjunto, se encuentran más URLs
correspondientes a las noticias. Esta estructura se puede representar mediante un árbol
de profundidad igual a 2, mostrado en la Ilustración 16.
noticia 1
noticia 20
Búqueda tag "La
Floresta"
noticia 21
noticia n
Para recoger los links de las noticias, se accede a cada página y se extrae el elemento html
que contiene la referencia (href), como aparece en la Ilustración 17.
23
Ilustración 17. Elemento de página que contiene enlace a una noticia en El Comercio (El Comercio, 2018)
Así, se pueden programar las funciones para recoger las URLs hacia cada noticia. El
siguiente paso es acceder a cada URL de noticias y extraer los datos deseados, en este
caso, la fecha, el título de la noticia y el texto. Después de examinar la estructura de las
páginas de noticias, se determinó que el título se encuentra en el elemento html de clase
title, el texto en elementos de clase paragraph y la fecha en el elemento publishDate. La
implementación de la función de web scraping que realiza este proceso de obtención de
noticias es la que se muestra en el Código 6.
# Archivo: get_ec.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
# Obtener título
title <- webartpage %>%
html_nodes('[class="title"]') %>%
html_nodes('h1') %>%
html_text()
# Obtener texto
parrafos <- webartpage %>%
html_nodes('[class="paragraphs"]') %>%
html_nodes('p') %>%
html_text()
# Obtener fecha
24
fecha <- webpage %>%
html_nodes('[class="article"]') %>%
html_nodes('[class="two-cols-article"]') %>%
html_nodes('[class="left-col"]') %>%
html_nodes('[class="publishDate"]') %>%
html_text()
Los datos adquiridos de las páginas de noticias, que se encuentran en todas las páginas
de resultados, se almacenaron en una tabla de cuatro campos donde se almacena la fecha
(date), la URL (link), el título de la noticia (title) y el texto (text). Un extracto de esta tabla
se muestra en la Tabla 4.
2.2.6 El Telégrafo
25
Ilustración 18. Búsqueda por etiqueta “La Floresta” en sitio web de El Telégrafo (El Telégrafo, 2018).
noticia 1
noticia n
Ilustración 19. Estructura de acceso a noticias en sitio web El Telégrafo
Así, sólo se realiza una recolección de URLs de noticias. En la página de búsqueda, las
URLs deseadas se encuentran en la referencia dentro del elemento de clase result-title,
como se ve en la Ilustración 20.
26
Ilustración 20. Elemento que contiene el enlace a una noticia en página de El Telégrafo (El Telégrafo, 2018)
Una vez recogidas las URLs, se puede usar un bucle para acceder a cada una y recoger
los datos de las noticias. En la página de cada noticia de El Telégrafo, el título se encuentra
en el elemento html de clase story-header-block.h1, la fecha en el elemento de clase story-
publishup y el texto en el elemento articleBody. Las recolección de estos elementos se
realiza mediante las funciones del Código 7.
# Archivo: get_et.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
# Obtener título
title <- webpage %>%
html_nodes('[class="story-header-block"]') %>%
html_nodes('h1') %>%
html_text()
# Obtener fecha
date <- webpage %>%
html_nodes('[class="story-publishup"]') %>%
html_text()
# Obtener texto
text <- webpage %>%
html_nodes('[itemprop="articleBody"]') %>%
html_nodes('p') %>%
html_text()
27
Después de capturadas, las noticias acerca de La Floresta del diario El Telégrafo, se
almacenan en una tabla de campos: fecha (date), URL (link), título de la noticia (title) y
texto (text). Tal como se muestra en la Tabla 5.
28
2.3 Extracción de datos
Al utilizar Python, para obtener posts de la API oficial de Facebook, el programa recibe un
objeto JSON. Python no procesa objetos JSON directamente, sino que los transforma a
una estructura de datos parecida en sintaxis, a estos datos se los llama diccionarios. Una
vez que se tienen los diccionarios en memoria, el programa carga los posts a la base de
datos no relacional en CouchDB, usando la librería oficial couchdb para Python. En Twitter,
por otro lado, al usar la librería GetOldTweets, se obtienen los atributos de cada tweet por
separado. A partir de esto, se construyen diccionarios de tweets que son subidos a la base
de datos.
Para la conversión de datos de las demás fuentes, en las que se utilizó R, la estructura de
datos utilizada fue el dataframe. Durante la adquisición, los programas tuvieron que recibir
datos en formatos JSON y HTML. JSON es fácilmente transformado a listas de R, las
cuales pueden manipularse de forma similar a los dataframes. Por otro lado, los datos en
HTML requieren de un proceso de interpretación. Esta interpretación de páginas HTML se
29
puede realizar con las librerías rvest y xml, con las que se puede acceder y extraer nodos
específicos de la página.
Es común que, al adquirir datos de diversas fuentes, éstos se encuentren con atributos
similares nombrados de forma diferente. Por ejemplo, al obtener un post de Facebook, el
campo fecha se denomina created_time, mientras que en Twitter se lo recibe como date,
como se muestra en la Ilustración 21. Otro campo en el que difieren es en el texto de la
publicación; en Facebook se denomina message, mientras que Twitter lo nombra text. Y
mientras en Facebook se llaman likes, en Twitter se denomina favorite_count. Todo este
tipo de inconsistencias fueron mitigadas mediante una estandarización en los nombres de
los campos. Además, las fechas fueron formateadas con la misma estructura año-mes-día.
30
2.4 Validación y limpieza de datos
En esta fase se configuraron reglas o criterios que se ejecutan automáticamente sobre los
datos y que aseguran que éstos llegarán íntegros y coherentes al análisis. En los datos
recogidos de todas las fuentes, se aplicaron los mismos criterios de validación y limpieza.
31
Ilustración 22. Ejemplo del uso de grep para limpieza de datos
Para el caso de los datos provenientes de The Culture Trip, tuvo que realizarse un paso
adicional. Todo el contenido publicado en esta fuente es texto en inglés, por lo que fue
necesario incorporar una función de traducción. Esta función se basa en el envío del texto
a la API de Google Translate, y la respuesta traducida es almacenada en lugar del texto en
inglés. La desventaja de Google Translate, en su versión gratuita, es que tiene un límite de
traducción de hasta 5000 caracteres. La solución a este problema fue la división del
documento en fracciones de menos de 5000 caracteres cada una. La función de traducción
se puede ver en el Anexo 2. Función de traducción usando R y la API de Google Translate.
Después de realizar la validación y limpieza, los datos limpios y validados son almacenados
en nuevas bases de datos. Un hecho observable, como se muestra en la Ilustración 23. b,
es que la cantidad de documentos en las bases de datos iniciales es, para todos los casos,
mayor a la cantidad de documentos en las bases de datos limpios. La forma en que se
encuentran almacenados, tanto los datos sin preprocesar como los datos limpios, se detalla
en la siguiente sección Agregación y representación de datos.
32
2.5 Agregación y representación de datos
El sistema de base de datos seleccionado para el proyecto fue CouchDB. La razón principal
es, que este gestor de bases de datos utiliza documentos JSON como formato nativo de
almacenamiento, lo que se adapta perfectamente con la solución de analítica propuesta.
CouchDB trabaja con documentos sin esquema fijo, lo que hace posible el almacenamiento
de registros que pueden o no compartir campos en común. Además, una característica de
CouchDB frente a otros sistemas de bases de datos NoSQL, es su facilidad de uso, lo que
permite al analista centrarse más en el análisis y menos en la configuración y uso de
ambientes complejos. CouchDB, a partir de su versión 2.0, puede trabajar sobre sistemas
distribuidos, en este aspecto, la fortaleza de CouchDB es la alta disponibilidad de datos y
tolerancia a distribuir la carga de datos entre varios servidores (Anderson, Lehnardt, &
Slater, 2010). Para el presente proyecto utilizó CouchDB 1.6; sin embargo, queda abierta
la posibilidad de escalar el proyecto a sistemas distribuidos en el futuro, siendo necesaria
la actualización de CouchDB a una versión más actual.
33
fb_data
Facebook
fb_clean
tw_data
Twitter
tw_clean
ct_data
The Culture Trip
ct_clean
ec_data
El Comercio
ec_clean
et_data
El Telégrafo
et_clean
a) b)
Ilustración 23. a) Modelo de bases de datos por fuente. b) Bases de datos en CouchDB
En la Ilustración 23, se muestra que para cada fuente fueron creadas dos bases de datos,
una donde se almacenan los datos recogidos antes del preprocesamiento (color naranja),
y otra para almacenar los datos preprocesados o limpios (color verde). En el caso de
Facebook, por ejemplo, fb_data es la base de datos previos al preprocesamiento y fb_clean
es la base de datos preprocesados.
Para el caso de los datos de Trip Advisor, los cuales son utilizados únicamente para graficar
los sitios en un mapa y no para análisis de texto, se construyó un archivo de texto plano en
formato Comma-Separated Values (CSV), que es leído directamente por la capa de
visualización, sección 2.7.Visualización de datos.
34
2.6 Análisis de datos (Minería de texto)
Existen varios métodos de minería de datos, cada uno orientado hacia diversos propósitos,
la minería de texto, al ser parte de minería de datos, utiliza adaptaciones de varias de sus
técnicas convencionales de análisis (Aggarwall, 2015). Se pueden clasificar los métodos
de minería de datos en dos grandes grupos: los orientados a verificación, que buscan
confirmar una hipótesis; y los orientados a descubrimiento, los cuales buscan patrones de
forma autónoma en los datos (Maimon & Rokach, 2010). En la Ilustración 24 se muestra la
taxonomía o clasificación de las técnicas de minería de datos, aquellas que son
exclusivamente de minería de texto se encuentran señaladas con (tm, de text mining).
3 Bolsa de palabras, inglés bag of words, es una forma de representación de texto en la que se
ignora el orden de las palabras (Aggarwall, 2015).
35
Paradigmas de Minería de Datos
Verificación Descubrimiento
Predicción Descripción
Para el desarrollo del presente proyecto, se utilizaron tanto técnicas de clasificación como
de descripción de datos, esto se muestra en las secciones 2.6.1.Clasificación de datos y
2.6.2.Descripción de datos. La clasificación de datos se basa en la construcción y
aplicación de un modelo predictivo, que utiliza lo que en aprendizaje de máquina4 se
conoce como aprendizaje supervisado, para la estimación de valores faltantes a partir de
un conjunto de datos de entrenamiento de valores conocidos. Respecto a clasificación, se
probaron algoritmos de aprendizaje de máquina como: los árboles de decisión, máquinas
de vectores de soporte y Naïve Bayes, en busca del mejor clasificador. Este clasificador
tiene la tarea de asignar etiquetas a los datos según la temática a la que pertenezcan. Por
otro lado, como métodos descriptivos de datos, se utilizó: análisis de sentimientos, para
determinar si los textos expresan sentimientos positivos o negativos, y para detectar
emociones; topic modeling, que permite el descubrimiento de tópicos en el texto; y otros
tipos de resúmenes de datos como las tablas de frecuencias, para contabilizar las
publicaciones analizadas.
4 Aprendizaje de máquina (en inglés machine learning) puede definirse como la capacidad de un
sistema de cómputo para detectar patrones y realizar tareas de forma autónoma.
36
La fase de análisis, durante el desarrollo de la aplicación, se basó en analizar los datos
históricos, que fueron recolectados hasta el 15 de octubre de 2017. Después, las técnicas
utilizadas en el proceso fueron modificadas para funcionar de manera automática cuando
el sistema sea puesto en recolección y análisis continuo de datos. El proceso de análisis
fue el siguiente:
El primer paso es la descarga de nuevos datos alojados en cada una de las bases de datos.
En el caso del primer análisis realizado con datos históricos, todos los datos recolectados
y limpios entraron en el proceso. En la descarga de datos a memoria, se utiliza la librería
RCurl para solicitar datos desde R a CouchDB, a través de un método GET enviado a sus
APIs. Una vez recibidos los documentos del conjunto de bases de datos limpios de todas
las fuentes, se aplica una función que se creó para construir una versión unificada y
simplificada de estos; dicha función guarda en un dataframe los datos junto a sus tres
atributos de mayor importancia: el texto (text), la fuente (source) y la fecha de creación
(date), tal como se observa en la Tabla 6.
37
2. Limpieza de texto
# Archivo: topic_SVM.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
# Quitar tildes y ñ
for( n in 1:length(dict)){
texts_vect <- gsub(names(dict)[n],dict[[n]],texts_vect)
n=n+1
}
# Quitar URLs
texts_vect <- gsub("(f|ht)tp(s?)://(.*)[.][a-z]+", "", texts_vect)
38
texts_vect <- gsub("www+", '', texts_vect, perl=TRUE)
return(texts_vect)
}
La función recibe como parámetro un arreglo de textos. Además de quitar tildes y las “ñ”,
se quitan URLs alojadas en el texto, y cualquier carácter extraño o que no pueda ser
procesado por RTextTools. Un ejemplo del resultado de esta función se puede observar en
la Ilustración 25.
a) b)
Ilustración 25. a) Texto antes de la limpieza b) Texto después de la limpieza
# Archivo: topic_SVM.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
# Crear el corpus
source <- VectorSource(textArray)
corpus <- Corpus(source)
39
corpus <- tm_map(corpus, removeNumbers)
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, stripWhitespace)
corpus <- tm_map(corpus, removeWords, stopwords('spanish'))
# Conversión a minúsculas
corpus <- tm_map(corpus, content_transformer(tolower))
Como se puede observar, se necesita crear un objeto de tipo corpus, que contiene todos
los documentos, para poder usar tm. Cabe señalar que, de todas las funciones aplicadas,
la función stopWords es la única que recibe como parámetro el idioma del texto, esto es,
para reconocer las conjunciones correspondientes a dicho idioma y removerlas.
40
2017, se seleccionó aleatoriamente el 20% de ellos para cumplir el rol de datos de
entrenamiento; 344 datos. El propósito de usar clasificación en el sistema, es el de
categorizar cada documento de entre las temáticas que más se hablan acerca del barrio
La Floresta.
41
etiquetados con una categoría lo más general posible. Al final se determinó que todos los
documentos del conjunto de entrenamiento podían clasificarse según siete categorías.
Las categorías a clasificar los datos y sus respectivos ejemplos, extraídos del conjunto de
datos, se muestran a continuación:
“Por lo menos una vez a la semana, después del trabajo y antes de ir a la casa,
con los compañeros buscamos huecas de comida típica. Desde hace muchos
años no íbamos a La Floresta, al famoso Parque de las Tripas.”
Fuente: Twitter.
Ø Arte: textos con temáticas referentes a música, pintura, baile, teatro o cultura. Por
ejemplo:
Ø Ambiente: textos con temáticas referentes al cuidado del medio ambiente. Por
ejemplo:
“Vecinos, si tienen desechos especiales que no saben dónde botar como pilas,
baterías, focos, lacas y pinturas, medicinas caducadas, aparatos eléctricos o
electrónicos. Emaseo 24 horas contigo ha colocado un punto móvil de
recolección en el parqueadero del Supermaxi 12 de Octubre.”
Fuente: Facebook.
42
“Iglesia La Floresta en peligro apóyanos mañana en la recolección de firmas
para salvarla, a las 9h en el Parque del Sector”
Fuente: Twitter.
Fuente: El Comercio.
Fuente: Facebook.
Ø Otro: textos que no encajan en ninguna de las anteriores categorías. Por ejemplo:
Fuente: Twitter.
Una vez asignadas las etiquetas al conjunto de datos de entrenamiento, se pueden probar
varios modelos de aprendizaje supervisado, para comparar sus exactitudes y seleccionar
el mejor. Un extracto de los datos etiquetados se muestra en la Tabla 8. Donde en el campo
source, los códigos fb, tw y ec corresponden a las fuentes Facebook, Twitter y El Comercio,
respectivamente.
43
Tabla 8. Extracto del conjunto de datos de entrenamiento
# Archivo: topic_SVM.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
A continuación, se muestran los resultados de probar tres de las técnicas más utilizadas
en aprendizaje de máquina. Todas mediante funciones de una librería llamada e1071, que
es una librería de R para generar modelos de clasificación, realizar clustering, cálculo de
44
la ruta más corta, entre otras aplicaciones. Al final, el modelo de mayor exactitud se utilizará
para implementarlo dentro del sistema de minería de texto.
# Archivo: topic_bayes.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
# Inicio ejecución
t_ejec <- Sys.time()
45
classifier <- naiveBayes(mat4[1:275,], x$topic[1:275])
# Calcular exactitud
bayes_accuracy <- recall_accuracy(as.character(x$topic[276:344]),
as.character(predicted))
# Fin ejecución
t_ejec <- Sys.time() - t_ejec
Código 11. Cálculo de exactitud y tiempo de ejecución del clasificador basado en Naïve Bayes
Ilustración 26. Exactitud y tiempo de ejecución del clasificador basado en Naïve Bayes
Este resultado quiere decir que aproximadamente el 25.04% de las etiquetas del conjunto
de datos de prueba, fueron estimadas de forma correcta. El tiempo estimado de ejecución
fue de 35.66 segundos.
Los árboles de decisión, son clasificadores que se basan en la división recursiva del
conjunto de datos de entrenamiento, al cual se le aplica una serie de condiciones sobre los
46
valores de los atributos del texto. Las condiciones, en clasificación de texto, corresponden
normalmente a la evaluación de presencia o ausencia de una o más palabras en el
documento (Ashish & Avinash, 2016).
Para este caso, se utilizaron los mismos datos de prueba y entrenamiento que en Naïve
Bayes, el cálculo de la exactitud del modelo generado mediante árboles de decisión se
realiza como se muestra en el Código 12.
# Archivo: topic_tree.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
# Inicio ejecución
t_ejec <- Sys.time()
# Aplicar el modelo
results <- classify_model(container, model)
# Calcular exactitud
tree_accuracy <- recall_accuracy(x$topic[276:344],
results[,"TREE_LABEL"])
# Fin ejecución
t_ejec <- Sys.time() - t_ejec
47
print(paste('tree_accuracy =',round(tree_accuracy,4)))
print(paste('tiempo_ejec =', round(t_ejec,2), 's'))
Código 12. Cálculo de exactitud y tiempo de ejecución del clasificador basado en árboles de decisión
Ilustración 27. Exactitud y tiempo de ejecución del clasificador basado en árboles de decisión
Este resultado quiere decir que, del total de datos de prueba, aproximadamente el 53.82%
se logró predecir de forma correcta. La ejecución tardó aproximadamente 56.7 segundos.
48
Ilustración 28. Máquinas de vectores de soporte aplicado a un problema de dos categorías (Alpaydin, 2014)
El ejemplo muestra un problema donde las instancias pertenecen a dos clases, una clase
representada con cruces y la otra con puntos. La línea gruesa continua representa el límite
entre clases, y las líneas punteadas a cada lado son los márgenes. El límite corresponde
a un hiperplano de separación, que equidista de las instancias más cercanas entre cada
clase. Para determinar los márgenes y el límite, SVM toma en cuenta solamente los datos
que pertenecen a las fronteras de las clases, esto hace de SVM un modelo altamente
eficiente y potente (Alpaydin, 2014).
# Archivo: topic_SVM.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
# Inicio ejecución
t_ejec <- Sys.time()
7El kernel, en SVM, es la función utilizada para dividir el conjunto de datos en clases. Las funciones
de kernel pueden ser lineales, polinomiales, radiales o sigmoidales (Gromski, Xu, Turner, & Ellis,
2015). En la Ilustración 28 se muestra un kernel lineal.
49
# Crear contenedor del conjunto de datos de prueba y entrenamiento
container <- create_container(mat, x$topic,
trainSize=1:275,testSize=276:344, virgin=FALSE)
# Aplicar el modelo
results <- classify_model(container, model)
# Calcular exactitud
svm_accuracy <- recall_accuracy(x$topic[276:344],
results[,"SVM_LABEL"])
# Fin ejecución
t_ejec <- Sys.time() - t_ejec
Código 13. Cálculo de la exactitud y tiempo de ejecución de un clasificador basado en máquinas de vectores
de soporte
Ilustración 29. Exactitud y tiempo de ejecución del clasificador basado en máquinas de vectores de soporte
50
2.6.1.4 Selección del clasificador
En base a las pruebas de los tres tipos de clasificadores, se determinó que Naïve Bayes
es el clasificador de menor exactitud para nuestro caso. El clasificador basado en árboles
de decisión tiene la segunda mejor exactitud, pero tiene el mayor tiempo de ejecución.
Mientras que el clasificador de máquinas de vectores de soporte, logró la mejor exactitud
y con el mejor tiempo. Estos resultados se pueden evidenciar en el gráfico comparativo de
la Ilustración 30.
60
50 30
40
30 20
20 10
10
0 0
Máquinas de
Naïve Bayes Árboles de decisión
vectores de soporte
Exactitud 25,04 53,82 75,17
Tiempo de Ejecución 35,66 56,7 1,04
Ilustración 30. Gráfico comparativo de los modelos de clasificación, exactitud vs. tiempo de ejecución
# Archivo: topic_SVM.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
51
# Crear clasificador definiendo el tipo y el kernel
model <- train_model(container, 'SVM',kernel='linear')
# Aplicar el modelo
results <- classify_model(container, model)
Código 14. Etiquetado de datos usando un clasificador basado en máquinas de vectores de soporte
52
2.6.2 Descripción de datos
La librería base de R, que es la que viene instalada por defecto, provee dos funciones con
las que se construyeron las tablas de frecuencias en el proyecto. Estas funciones son table
y prop.table. La primera recibe como parámetro la columna de una tabla o dataframe y
agrupa sus elementos entre iguales, para realizar un conteo de elementos por cada clase
o lo que se conoce como frecuencias absolutas. La segunda función, prop.table, recibe
como parámetro una tabla de frecuencias absolutas y a partir de ella construye una de
frecuencias relativas, o lo que es lo mismo, una tabla que lleva el porcentaje de elementos
agrupados por clase.
La función table, se utilizó para calcular el número de posts según su fuente. El ejemplo en
código y el resultado se observan en la Ilustración 31.
Ilustración 31. Tabla de frecuencias absolutas de las publicaciones según sus fuentes
53
Como se observa, se ha contabilizado el número de publicaciones alojadas en el dataframe
de la Tabla 9, agrupados según sus fuentes (source). En la Ilustración 31, al igual que en
las tablas del conjunto de datos, los códigos ct, ec, et, fb y tw corresponden a las fuentes
The Culture Trip, El Comercio, El Telégrafo, Facebook y Twitter respectivamente. En la
Ilustración 32 se puede visualizar los datos de la tabla 8 en forma de histograma.
Ilustración 33. Tabla de frecuencias relativas de las publicaciones según sus temáticas
54
En este caso, como se muestra en la Ilustración 33, primero se calcula la tabla de
frecuencias absolutas (abs_freq) de las publicaciones según sus tópicos, para a partir de
ésta, generar la tabla de frecuencias relativas (rel_freq). El último paso es mostrar las
frecuencias en forma de porcentajes y con un solo dígito decimal, a través de la función
round. Esta información, representada mediante un histograma, se muestra en la
Ilustración 34.
A partir de estas tablas, se pueden generar gráficos con la capacidad de proveer de una
visión general del conjunto de datos y sus características. Más técnicas de representación
gráfica de datos se detallan en la fase de 2.7.Visualización de datos.
55
que pueden ser organizaciones, servicios, productos, personas, problemáticas o tópicos.
La RAE (Real Academia Española) (2014), define sentimiento como un “estado afectivo
del ánimo”. A su vez, la emoción es un sentimiento más intenso y de corta duración,
causado por un objeto en concreto, como un suceso, una persona, una cosa o un tópico.
Las oraciones que expresamente muestran un sentimiento, generalmente son subjetivas,
a diferencia de las oraciones que plantean hechos. Sin embargo, las oraciones objetivas
pueden comunicar hechos deseables y no deseables, que implican sentimientos positivos
y negativos en sus autores o en los receptores de dicho mensaje (Liu, 2015).
Una librería de R que permite, entre otras cosas, extraer sentimientos y emociones a partir
de texto, es Syuzhet, la cual utiliza una variedad de diccionarios, entre ellos NRC Word-
Emotion Lexicon (CRAN Project, 2017). El diccionario de NRC es una lista que actualmente
contiene 14182 etiquetas asignadas entre 6468 palabras diferentes, que corresponden a
la polaridad del sentimiento y la emoción que expresan. NRC ofrece versiones de su
diccionario para aproximadamente cuarenta idiomas incluido el español, ayudándose de
Google Translate para la traducción de palabras (Mohammad & Turney, 2017). Las
etiquetas asignadas son puntuaciones; marcadores dicotómicos que especifican si una
determinada palabra corresponde o no a cada tipo de emoción o sentimiento. Para
determinar las emociones y polaridad sentimental, se toma cada palabra del texto a
analizar que existe en el diccionario y se marca con 1 en cada tipo de emoción a la que
corresponde, y con 0 en aquellas a las que no; de igual manera, son marcadas con 0 las
palabras que no existen en el diccionario. Al final se determinan las emociones mediante
tablas de frecuencias absolutas (Munezero, Montero, & Mozgovoy, 2015), similar a la
Ilustración 31.
# Archivo: sent_analysis.R
# Autor: Marlon Vargas
# Fecha: noviembre 2017
56
# Graficar emociones
qplot(sentiment, data=abs_freq[1:8,], weight=count,
geom="bar",fill=sentiment)
# Graficar sentimientos
qplot(sentiment, data=abs_freq[9:10,], weight=count,
geom="bar",fill=sentiment)
A partir de la Tabla 10, se puede generar una tabla de frecuencias absolutas. Ésta nos
permite saber el número de palabras totales del corpus (count), agrupadas por emociones
(emotions) o sentimientos (sentiment), como se observa en la Tabla 11.
57
a) b)
Tabla 11. Tabla de frecuencias absolutas de palabras según a) emociones y b) sentimientos
De la Tabla 11, se pueden graficar los resultados mediante histogramas, como los que se
muestran en Ilustración 35.
a) b)
Ilustración 35. a) Histograma de emociones. b) Histograma de sentimientos.
58
2.6.2.3 Modelado de Tópicos
Uno de los métodos más utilizados de clustering8 para documentos de texto, es topic
modeling o modelado de tópicos. Éste se basa en un modelo probabilístico generativo para
los documentos del corpus, es decir, un modelo que define un proceso simple de
probabilidad por el cual las palabras de un documento están siendo generadas en base a
un pequeño número de variables latentes o tópicos. Mediante técnicas estadísticas, topic
modeling invierte este proceso para lograr inferir las variables latentes responsables de
generar tales documentos (Berry & Kogan, 2010).
Latent Dirichlet Allocation (LDA), es un modelo generativo ampliamente usado para estimar
tópicos generados a partir de documentos. LDA recibe como entrada un corpus o conjunto
de documentos, representados como bags of words, y un número de tópicos, de los cuales
se asume que se encuentran distribuidos entre los documentos. LDA toma a los
documentos como una mezcla de varios tópicos y a cada tópico como una variedad de
términos, donde cada término contribuye al tópico del documento. Al considerar cada
documento como una combinación de varios tópicos, LDA busca determinar cuáles son y
en qué proporciones se encuentran dentro de cada documento (Ashish & Avinash, 2016).
# Archivo: topic_LDA.R
# Autor: Marlon Vargas
# Fecha: diciembre 2017
59
k <- num_topics
Tema Tópicos
Arte cultural talleres junio casa feria
Otro hoy parque another plaza juntos
Organización parque ciudad iglesia vecinos espacio
Movilidad silencio velocidad lugar vizcaya ciudad
Gastronomia romolo tacos comida tripas parque
Ambiente ecuador arbolado huerta pichincha llamas
Inseguridad vecinos robos comedy zona cuidado
Tabla 12. Resultados de LDA sobre datos de mismas temáticas
El código responsable de generar los tópicos de la Tabla 12, se muestra en el Código 17.
# Archivo: topic_LDA.R
# Autor: Marlon Vargas
# Fecha: diciembre 2017
60
"tema" = tema,
"topics" = paste0(tmp_topics, collapse = ", "))
topics <- rbind(topics, topic)
}
# Imprimir dataframe de resultados
topics
Código 17. LDA iterativo para obtener tópicos de varios documentos según sus temáticas
Existe una amplia variedad de gráficos, unos más sofisticados que otros, y nuevos tipos
son creados todo el tiempo. Sin embargo, los gráficos más utilizados son aquellos que por
su simplicidad, facilitan al usuario su comprensión. Los tipos de gráficos, poseen distintos
enfoques según los tipos de preguntas que se deseen resolver mediante su interpretación
(Meyer & Fisher, 2018).
https://marlon.shinyapps.io/WebTextMiningLaFloresta/
A continuación se detallan los componentes gráficos utilizados en Shiny para visualizar los
resultados de la minería de texto.
61
2.7.1 Representación de frecuencias absolutas
Para brindar una visión general del número de documentos analizados, en lugar de optar
por histogramas, se seleccionaron cajas de texto propias de Shiny, mostradas en la
Ilustración 36, que publican los valores de las frecuencias absolutas o cantidad de
documentos del conjunto de datos.
Esta técnica funciona ya que, en este caso, no se posee una gran cantidad de clases. Se
construyeron cinco cajas, de las cuales a Facebook y a Twitter se le asignaron una a cada
una debido a la cantidad de documentos que aportaron al análisis. Y se agruparon las
noticias en un conjunto y los blogs en otro. Se creó una caja principal para mostrar la
cantidad total de documentos procesados.
62
El gráfico circular, en la aplicación, se utilizó para representar las frecuencias de los
documentos clasificados según las temáticas identificadas, como se muestra en la
Ilustración 37. El origen de los datos es el etiquetado automático de los documentos y su
posterior cálculo de frecuencias relativas, como se muestra en la Ilustración 33 en la
sección de 2.6.2.1.Tablas de frecuencias.
De este tipo de gráfico se pueden sacar conclusiones como, por ejemplo, que el tema de
la Organización barrial es el tema del que más se publica en las fuentes de datos, seguido
del Arte, Gastronomía, Movilidad y Ambiente; y que el tema del que menos se publica es
la Inseguridad.
Para la creación del gráfico de la Ilustración 37, se utilizó highcharter, que es una librería
de Javascript adaptada para utilizarse con R y Shiny, para generar gráficos web
interactivos.
63
2.7.3 Nube de palabras
En minería de texto, visualizar documentos es una tarea necesaria. Al no existir una técnica
definitiva de visualización de texto, la mayoría de métodos caen dentro de un enfoque
similar. Uno de los enfoques más utilizados se basa en el conteo de las frecuencias de
palabras o frases, y representar dichos datos mediante gráficos de barras, líneas o nubes
de palabras. Las nubes de palabras o word clouds, son otro tipo de gráficos que
actualmente se utilizan en gran cantidad dentro de analítica de texto. Al igual que un gráfico
de barras o un histograma, el conteo de ítems es representado mediante la variación del
tamaño de los componentes del gráfico; en el caso de las nubes de palabras, los tamaños
de fuente son proporcionales a las frecuencias de las palabras que contiene un texto
(Meyer & Fisher, 2018).
64
La aplicación tiene la capacidad de generar nubes de palabras según la temática. Esto se
muestra más adelante en la presentación de la aplicación, en el capítulo 3.RESULTADOS
Y DISCUSIÓN.
Los mapas geográficos utilizan variedades de colores y símbolos para representar datos
referentes a lugares. Este tipo de gráficos se utilizan para simbolizar similitudes y
variaciones entre regiones. Los mapas tienen la ventaja de ser muy familiares para las
personas, muchas veces no se requiere el etiquetado para que un usuario sepa cuál es el
lugar en cuestión (Meyer & Fisher, 2018).
En el proyecto, se utilizaron mapas para ubicar los sitios turísticos de Quito y con esto
lograr comparaciones, como se muestra en la Ilustración 39. Se pretende determinar la
concentración de lugares de interés para tener una idea de la aceptación comercial que
puede tener La Floresta en relación con otros sectores de la ciudad.
65
La Ilustración 39 muestra mediante burbujas las agrupaciones según el número de sitios
de interés, las de color amarillo corresponden a las de mayor número y las verdes a las de
menor número. En el gráfico se puede observar que el mayor número de sitios de interés
se encuentran cerca al centro de La Mariscal, seguido de La Floresta junto a Guápulo y
finalmente el sector de La Carolina.
Se ubicaron también los sitios turísticos según su popularidad y junto a sus calificaciones
extraídas de Trip Advisor. Este y otros resultados se ven con mayor detalle en la siguiente
sección de RESULTADOS Y DISCUSIÓN.
66
3. RESULTADOS Y DISCUSIÓN
3.1 Resultados
El producto final del desarrollo del proyecto es un sistema de análisis de datos textuales de
las fuentes web: El comercio, El Telégrafo, Facebook, Twitter, Trip Advisor y The Culture
Trip. El sistema realiza un tratamiento de los datos, de tal forma que asegura su validez;
estos son introducidos a varios procesos de análisis, con el fin de transformar el texto en
ideas. Después del análisis, se tendrán documentos clasificados según las temáticas que
tratan junto a los sentimientos y emociones que expresan. Los resultados de dichos análisis
son presentados finalmente mediante un tablero de mando de acceso público.
https://marlon.shinyapps.io/WebTextMiningLaFloresta/
67
El tablero de mando consta dos páginas principales: el reporte general y el detalle.
Reporte general
68
Ø Una entrada de rango de fechas que controla el intervalo de tiempo en el que se
quieren observar los resultados. Este control tiene efecto sobre todos los gráficos
excepto sobre el mapa, debido a que los datos de ubicación geográfica
provenientes de Trip Advisor no poseen información de fechas de publicación. En
la Ilustración 42 también se observa el gráfico circular, con el porcentaje de
documentos según cada temática.
69
Ø Un par de botones de selección que permiten escoger entre visualizar el análisis
por sentimientos o por emociones. Esto se muestra en la Ilustración 44.
Ø Y otro par de botones de selección que permiten escoger el tipo de mapa a mostrar,
de entre puntos de interés o según los comentarios y popularidad de los sitios
turísticos. Esto se puede ver en la Ilustración 45.
70
Detalle
En esta página se muestran los resultados del análisis, organizados por temática. Al
ingresar por primera vez, se desplegará el mensaje que se muestra en la Ilustración 46.
71
Ilustración 48. Tablero de mando: Página de detalle
72
3.1.2 Resultados del análisis
Se determinó que las temáticas de las que más se hablan en la web respecto a La Floresta,
de mayor a menor son: la organización barrial, con un 47.5%; el arte, con un 29.4%; y la
gastronomía, con 9.4%. Mientras que las temáticas con menor publicaciones son: la
movilidad, con 5.5%; el medio ambiente, con un 3.7%; de otros temas, un 2.7%; y de la
que menos se habla es la inseguridad, con 1.7%. Esta información se muestra en el gráfico
de la Ilustración 37. Gráfico circular de frecuencias de documentos según su temática.
El análisis de sentimientos reveló que el tema del medio ambiente es del que más
positivamente se habla, seguido del arte, y la movilidad. El tema de la inseguridad es del
que más negativamente se habla, después le sigue la movilidad y la organización. La
gastronomía es el tema que menos negatividad tiene, al mismo tiempo, es del que más se
habla neutralmente. Esto se puede observar en la Ilustración 49. Gráfico de análisis de
sentimientos por temática.
Entre las palabras más mencionadas en las publicaciones se tienen: vecinos, sábado,
espacio, feria, cultural, parque, público, municipio, arte, entre otras. Éstas pueden
73
observarse en la Ilustración 38. Nube de palabras de publicaciones sobre La Floresta. Este
conjunto de palabras demuestra la unión de la gente del barrio para organizarse, así como
su apoyo a las actividades artísticas.
La ubicación de los sitios turísticos, según datos de Trip Advisor (2017), en el mapa de
Quito demostró que las mayores concentraciones se encuentran principalmente en tres
sectores: el Centro Histórico, La Carolina y La Mariscal, parroquia que contiene al barrio
La Floresta. La mayor concentración de negocios de La Floresta, registrados en Trip
Advisor, se encuentra en las zonas más cercanas a Guápulo y la Av. González Suárez.
Hacia el norte existen algunos puntos de interés registrados y en el sur la cantidad es
mínima. Esto se puede evidenciar en la Ilustración 39. Mapa de concentración de sitios
turísticos de interés, sector La Mariscal y en la Ilustración 50. Mapa de concentración de
sitios turísticos según su popularidad.
La Carolina
La Mariscal
Centro Histórico
La Floresta
74
3.1.2.2 Resultados por temática Organización
Respecto a la organización, que es el tema más hablado, 41.69% de las publicaciones son
positivas, 12.84% son negativas y tiene un 45.48% de publicaciones que no expresan una
polaridad de sentimientos, como se muestra en la Ilustración 49. Gráfico de análisis de
sentimientos por temática.
a) b)
Ilustración 51. La Floresta, análisis por temática organización. a) Histograma de emociones b) Nube de
palabras
Las emociones expresadas, con respecto a Organización, son diversas. Sin embargo,
23.55% corresponde a publicaciones que expresan alegría, seguida del 20.7% de temor,
un 19.35% de tristeza, 13.51% de ira, 12.55% de disgusto y 10.33% de sorpresa, como se
puede ver en la Ilustración 51.a.
Los tópicos o palabras más utilizadas fueron: municipio, comunidad, iglesia, vecinos y
comité, como se ve en Ilustración 51.b. En estos tópicos se nota la unión de los vecinos
del barrio para organizarse y hacerse escuchar ante las autoridades, en este caso el
municipio de Quito.
75
3.1.2.3 Resultados por temática Arte
a) b)
Ilustración 52. La Floresta, análisis por temática arte. a) Histograma de emociones b) Nube de palabras
Los tópicos detectados en la Ilustración 52.b fueron: cultural, verano, ochoymedio, música
y feria. Donde se mencionan palabras como “verano”, que hace referencia al espacio
artístico “Feria de verano”; y “ochoymedio” hace referencia a un cine popular del barrio,
llamado Ocho y Medio.
76
3.1.2.4 Resultados por temática Gastronomía
a) b)
Ilustración 53. La Floresta, análisis por temática gastronomía. a) Histograma de emociones b) Nube de
palabras
Los tópicos encontrados fueron: Romolo, cocina, comida, parque y verde; lo que se
muestra en la Ilustración 53.b. Donde se mencionan palabras como “Romolo”, que hace
referencia a un restaurante de comida italiana llamado “Romolo e Remo”; “parque”, que se
refiere al tradicional parque de La Floresta donde por las noches se vende comidas típicas;
y “verde”, que hace referencia a “Te Quiero Verde” , una tienda de productos alimenticios
artesanales.
77
3.1.2.5 Resultados por temática Movilidad
a) b)
Ilustración 54. La Floresta, análisis por temática movilidad. a) Histograma de emociones b) Nube de palabras
Los tópicos más relevantes encontrados fueron: calle, tráfico, centro, avenida y Guápulo.
Esto se ve en la Ilustración 54.b. Donde se puede notar que se menciona a Guápulo, debido
al tráfico que se produce por los automóviles que pasan por allí para llegar a la Av. Simón
Bolivar.
78
3.1.2.6 Resultados por temática Ambiente
a) b)
Ilustración 55. La Floresta, análisis por temática ambiente. a) Histograma de emociones b) Nube de palabras
Los principales tópicos fueron: huerta, sábado, botánica, espacio y arbolado, como se ve
en la Ilustración 55.b. Donde se menciona a la “huerta”, que hace referencia a La Huerta,
un vivero donde se pueden adquirir plantas para huertos urbanos; y “botánica”, que es un
restaurante de comida orgánica, además se produce café artesanal.
79
3.1.2.7 Resultados por temática Inseguridad
a) b)
Ilustración 56. La Floresta, análisis por temática inseguridad. a) Histograma de emociones b) Nube de
palabras
Los cinco tópicos más relevantes fueron: robos, casos, policía, primer, stand y distrito. Esto
se ve en la Ilustración 56.b. Lo que junto con el análisis de emociones, muestran la
preocupación de la gente con respecto a la delincuencia.
80
3.1.2.8 Resultados por temática Otro
a) b)
Ilustración 57. La Floresta, análisis por otras temáticas. a) Histograma de emociones b) Nube de palabras
Las publicaciones que no caben dentro de las temáticas mencionadas fueron asignadas a
una categoría “otros”. Estas publicaciones muestran alegría en general, como lo indica la
Ilustración 57.a.
En esta categoría se encontró los tópicos: plaza, feliz, y palabras extrañas, que
posiblemente debido a ellas, los documentos no se lograron clasificar dentro de alguna de
las temáticas identificadas. Estas palabras se muestran en la Ilustración 57.b. Un dato
curioso es que muchas de las palabras que aparecen en esta categoría, no existen dentro
del lenguaje español.
81
3.2 Discusión
Las dos capacidades de análisis más valorables del proyecto son la clasificación de texto
y el análisis de sentimientos y emociones. Ambas tareas se llevaron a cabo con éxito y
obteniendo resultados bastante satisfactorios. Sin embargo, en el caso de la clasificación
de texto se tiene más control de la técnica que se está empleando. El hecho de poder
realizar pruebas o transformar los datos de entrenamiento mediante funciones de limpieza,
permite que el analista tenga la oportunidad de influir sobre la veracidad de los resultados
que busca obtener. Por otro lado, el uso de librerías prefabricadas, como es el caso de
Syuzhet, restringe el poder de mejorar los resultados que se obtienen de su aplicación. A
partir de ambas tareas principales del sistema de minería de texto, las oportunidades de
mejora están en aumentar la exactitud del modelo utilizado para la clasificación y buscar
alternativas al uso de librerías prefabricadas para la determinación de los sentimientos y
emociones.
Un punto adicional de mejora es la detección automática del idioma. Esto puede ser
necesario, debido a que muchas publicaciones, sobre todo en redes sociales, incluyen
palabras o frases completas en inglés. Entre los datos se pueden tener publicaciones en
otros idiomas de tal manera que, por ejemplo, para el análisis de sentimientos basado en
diccionarios, este texto no podrá ser procesado.
82
4. CONCLUSIONES
83
en un instante de tiempo. El conocido análisis en tiempo real, en la práctica, no existe como
tal. Toda tarea requiere de un tiempo para ser ejecutada con éxito, por más corto que éste
sea. Esto deja solamente la posibilidad de construir sistemas que se aproximen al análisis
en tiempo real. Además, el aprovechamiento de un sistema en tiempo real debe ir de la
mano de la rapidez para captar cada cambio y tomar acciones basadas en los resultados
del análisis. En el caso de minería de texto web acerca del barrio La Floresta,
aproximadamente llegan dos registros cada día. Por lo que la implementación de sistemas
de análisis cercanos al tiempo real en este caso, sería un gasto excesivo de recursos que
no serían aprovechados. Esto se cumple debido a los requerimientos actuales del proyecto;
sin embargo, para futuros trabajos, si se quisiera minar texto acerca de objetos sobre los
que la afluencia de datos en la web es mucho mayor, se podría considerar el uso de
sistemas de análisis que se acerquen al tiempo real.
84
Ø El uso de métodos descriptivos y predictivos de minería de datos, dentro del mismo
proyecto, funcionaron complementándose los unos con los otros. El análisis de
sentimientos y el modelado de tópicos se llevaron a cabo mediante un enfoque descriptivo
del texto. Por otro lado, de los métodos predictivos, las técnicas de clasificación o de
aprendizaje supervisado se utilizaron para categorizar los textos en temáticas.
Ø Para seleccionar el modelo de clasificación a utilizar, se probaron tres de los más básicos
modelos de aprendizaje supervisado, Naïve Bayes, árboles de decisión y máquinas de
vectores de soporte. En las pruebas realizadas, se observó que Naïve Bayes, para nuestro
conjunto de datos de entrenamiento y prueba, nunca superó el 30% de exactitud, aunque
su tiempo de ejecución fue el segundo mejor. El modelo basado en árboles de decisión
superó el 50% pero con el más largo tiempo de ejecución. Finalmente, el modelo basado
en máquinas de vectores de soporte superó el 75% de exactitud, y con un tiempo de
ejecución aproximadamente 60 veces menor que el tiempo de ejecución del modelo
basado en árboles de decisión, y 30 veces menor al tiempo de ejecución del clasificador
de Bayes. Se concluyó que, para nuestro conjunto de datos, el modelo de máquinas de
vectores de soporte fue el más indicado.
85
5. REFERENCIAS
Aggarwall, C. (2015). Data Mining: The Textbook (Primera ed., Vol. I). Yorktown Heights,
New York, U.S.A.: Springer. doi:10.1007/978-3-319-14142-8
Alpaydin, E. (2014). Introduction to Machine Learning (Tercera ed.). (T. Dietterich, Ed.)
London, England: MIT Press. Recuperado el 12 de Abril de 2018, de
https://mitpress.mit.edu/books/introduction-machine-learning-third-edition
Anderson, C., Lehnardt, J., & Slater, N. (2010). CouchDB: The Definitive Guide (Primera
ed., Vol. I). Sebastopol, Rusia: O’Reilly. Recuperado el 28 de Abril de 2018, de
http://guide.couchdb.org/
Ashish, K., & Avinash, P. (2016). Mastering Text Mining with R (Primera ed., Vol. I).
Birmingham, U.K.: Packt Publishing. Recuperado el 12 de Abril de 2018, de
https://www.packtpub.com/big-data-and-business-intelligence/mastering-text-
mining-r
Berry, M., & Kogan, J. (2010). Text Mining - Applications and Theory (Primera ed., Vol. I).
Chichester, U.K.: Wiley. Recuperado el 18 de Abril de 2018, de
https://www.wiley.com/en-us/Text+Mining%3A+Applications+and+Theory-p-
9780470749821
Brase, C., & Brase, C. (2013). Understanding Basic Statistics (Sexta ed., Vol. I). Boston,
Massachusetts, U.S.A.: Cengage Learning. Recuperado el 20 de Abril de 2018, de
http://www.nxtbook.com/nxtbooks/ngsp/basicstatistics6/
Cárcamo, L., Calva, D., Ronquillo, N., & Nesbet, F. (24 de Mayo de 2017). México, en la
prensa chilena: análisis basado en minería de datos textuales en Twitter. Revista
Latina CS, 897-914. Recuperado el 06 de Febrero de 2018, de
http://www.revistalatinacs.org/072paper/1199/RLCS-paper1199.pdf
86
Chen, C. (25 de Julio de 2017). We compared 7 travel-booking sites to show you what each
is best at. (Insider ) Recuperado el 30 de Abril de 2018, de Insider Web Site:
http://www.thisisinsider.com/expedia-tripadvisor-priceline-travel-booking-site-
comparison/#bookingcom-1
Chen, M., Mao, S., & Liu, Y. (22 de Enero de 2014). Big Data: A Survey. Mobile Networks
and Applications, 19, 171–209. doi:10.1007/s11036-013-0489-0
CRAN Project. (19 de Febrero de 2015). Package ‘RTextTools’. (T. Jurka, Ed.) Recuperado
el 16 de Mayo de 2018, de Comprehensive R Archive Network (CRAN) Project:
https://cran.r-project.org/web/packages/RTextTools/RTextTools.pdf
CRAN Project. (29 de Agosto de 2016). Package 'rvest'. (H. Wickham, Ed.) Recuperado el
15 de Mayo de 2018, de Comprehensive R Archive Network (CRAN) Project:
https://cran.r-project.org/web/packages/rvest/rvest.pdf
CRAN Project. (14 de Diciembre de 2017). Package 'syuzhet'. (M. Jockers, Ed.)
Recuperado el 6 de Abril de 2018, de Comprehensive R Archive Network (CRAN)
Project: https://cran.r-project.org/web/packages/syuzhet/syuzhet.pdf
CRAN Project. (6 de Diciembre de 2017). Package 'tm'. (I. Feinerer, Ed.) Recuperado el 15
de Mayo de 2018, de Comprehensive R Archive Network (CRAN) Project:
https://cran.r-project.org/web/packages/tm/tm.pdf
87
Erl, T., Khattak, W., & Buhler, P. (2016). Big Data Fundamentals, Concepts, Drivers &
Techniques (Primera ed., Vol. I). New Jersey, United States: Prentice Hall.
Recuperado el 29 de Noviembre de 2017, de https://www.pearson.com/us/higher-
education/program/Erl-Big-Data-Fundamentals-Concepts-Drivers-
Techniques/PGM328866.html
Forbes. (30 de Abril de 2018). Culture Trip: How A Former Shrink Found Millennial Travel
Success. (Forbes Europe) Recuperado el 7 de Marzo de 2018, de Forbes Web Site:
https://www.forbes.com/sites/kittyknowles/2018/03/07/culture-trip-travel-app-for-
millennials/#32baf38cf4ad
Ganis, M., & Kohirkar, A. (2016). Social Media Analytics - Techniques and Insights for
Extracting Business Value Out of Social Media (Primera ed., Vol. I). Crawfordsville,
Indiana, United States: IBM Press. Recuperado el 6 de Febrero de 2018, de
http://www.pearson.com.au/products/D-G-Ganis-Kohirkar/Social-Media-Analytics-
Techniques-and-Insights-for-Extracting-Business-Value-Out-of-Social-Media-
VitalSource-eText/9780133892949?R=9780133892949
Gantz, J., & Reinsel, D. (December de 2012). THE DIGITAL UNIVERSE IN 2020: Big Data,
Bigger Digital Shadows, and Biggest Growth in the Far East. Recuperado el
Diciembre de 2016, de Dell EMC: https://www.emc.com/collateral/analyst-
reports/idc-the-digital-universe-in-2020.pdf
88
Gromski, P., Xu, Y., Turner, M., & Ellis, D. (Febrero de 2015). A tutorial review:
Metabolomics and partial least squares-discriminant. Analytica Chimica Acta, 10-
23. doi:10.1016/2015.02.012
Interactive Advertising Bureau (IAB) Ecuador. (13 de Noviembre de 2017). Consumo Digital
Ecuador 2017. Recuperado el 30 de Abril de 2018, de IAB Ecuador:
http://iabecuador.com/doc/EstudioDigital2017_IAB.pdf
Kwartler, T. (2017). Text Mining in Practice with R (Primera ed., Vol. I). Hoboken, New
Jersey, U.S.A.: Wiley. Recuperado el 3 de Abril de 2018, de
https://www.wiley.com/en-us/Text+Mining+in+Practice+with+R-p-9781119282013
Liu, B. (2015). Sentiment Analysis - Mining Opinions, Sentiments, and Emotions (Primera
ed., Vol. I). New York, U.S.A.: Cambridge University Press.
doi:10.1017/CBO9781139084789
Maimon, O., & Rokach, L. (2010). Data Mining and Knowledge Discovery Handbook
(Primera ed., Vol. I). Beerseba, Israel: Springer. doi:10.1007/978-0-387-09823-4
Meyer, M., & Fisher, D. (2018). Making Data Visual - A Practical Guide to Using
Visualization for Insight (Primera ed., Vol. I). Sebastopol, Rusia: O’Reilly.
Recuperado el 26 de Abril de 2018, de
http://shop.oreilly.com/product/0636920041320.do
89
Mohammad, S. M., & Turney, P. (Noviembre de 2017). NRC Emotion Lexicon. Recuperado
el 6 de Abril de 2018, de NRC Word-Emotion Association Lexicon:
http://saifmohammad.com/WebPages/NRC-Emotion-Lexicon.htm
Moshenek, A. (24 de Abril de 2017). Entrevista telefónica con Representante del Colectivo
"De La Floresta". Quito, Pichincha, Ecuador.
Plutchik, R. (2003). Emotions and Life: Perspectives From Psychology, Biology, and
Evolution (Primera ed., Vol. I). Washington, DC, U.S.A.: American Psychological
Association. Obtenido de http://psycnet.apa.org/record/2003-04005-000
Runkler, T. A. (2016). Data Analytics. Models and Algorithms for Intelligent Data Analysis
(Segunda ed., Vol. I). Munich, Germany: Springer. doi:10.1007/978-3-8348-2589-6
90
https://www.sangakoo.com/es/temas/frecuencia-absoluta-relativa-acumulada-y-
tablas-estadisticas
Servicio de Rentas Internas. (10 de Marzo de 2017). Guía Básica Tributaria - RUC.
Recuperado el 28 de Febrero de 2017, de Base de datos del Registro Único de
Contribuyentes de Personas Naturales y Sociedades:
http://www.sri.gob.ec/DocumentosAlfrescoPortlet/descargar/fc895695-4548-4c5e-
91a8-47ca67943739/PICHINCHA.zip
Srivastava, A. N., & Mehran, S. (2009). Text Mining: Classification, Clustering, and
Applications (Primera ed., Vol. I). Boca Raton, Florida, U.S.A.: CRC Press.
Recuperado el 10 de Abril de 2018, de https://www.crcpress.com/Text-Mining-
Classification-Clustering-and-Applications/Srivastava-
Sahami/p/book/9781420059403
Sung-min, K., & Sung-min, K. (2016). Automated Discovery of Small Business Domain
Knowledge Using Web Crawling and Data Mining. 2016 International Conference
on Big Data and Smart Computing (BigComp) (pág. 4). Hong Kong: IEEE.
Recuperado el 10 de Enero de 2018, de ieee.org:
http://ieeexplore.ieee.org/document/7425974
91
The Culture Trip. (2018). Quito Ecuador Searching Results. Recuperado el 6 de Enero de
2018, de The Culture Trip: https://theculturetrip.com/?s=quito%20ecuador
Trip Advisor. (2017). Search results for: La Floresta near Quito Ecuador. Recuperado el 25
de Julio de 2017, de TripAdvisor.com:
https://www.tripadvisor.com/Search?geo=294308&latitude=&longitude=&searchNe
arby=&pid=3826&redirect=&startTime=&uiOrigin=&q=la+floresta
Twitter Developers. (Noviembre de 2017). Get tweets older than 10 days with twitter API.
(Twitter) Recuperado el 1 de Mayo de 2018, de Twitter Developers Forums:
https://twittercommunity.com/t/get-tweets-older-than-10-days-with-twitter-
api/97456
Wiley, J. (2015). Data Science & Big Data Analytics: Discovering, Analyzing, Visualizing
and Presenting Data (Primera ed., Vol. I). Indianapolis, Indiana, U.S.A.: EMC
Education Services. Recuperado el 10 de Febrero de 2018, de
https://www.wiley.com/en-
ec/Data+Science+and+Big+Data+Analytics:+Discovering,+Analyzing,+Visualizing+
and+Presenting+Data-p-9781118876138
Zhai, C., & Aggarwal, C. (2014). Mining Text Data (Primera ed., Vol. I). New York, U.S.A.:
Springer. doi:10.1007/978-1-4614-3223-4
92
6. ANEXOS
Estandarización de campos
93
6.2 Anexo 2. Función de traducción usando R y la API de Google
Translate
# Archivo: translate.R
# Autor: Marlon Vargas
# Fecha: diciembre 2017
library(RJSONIO)
library(RCurl)
for (n in 1:(nvt+1)) {
tmp_tslt <- vector(mode="character", length=0)
tmp_json <- fromJSON(getURL(
paste0(
"https://translate.googleapis.com/translate_a/single?client=gtx&sl=e
n&tl=es&dt=t&q=",
curlEscape(substr(toTranslate, (n-1)*div, (n*div)-1 ))
)))
for (m in 1:length(tmp_json[[1]])) {
tmp_tslt <- paste(tmp_tslt, tmp_json[[1]][[m]][[1]], sep = " ",
collapse = " ")
}
translated <- c(translated,tmp_tslt)
}
translated <- paste(translated, sep = " ", collapse = " ")
return(translated)
}
94