scieee AI-readable full text Open interactive document viewer

Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter

Navarro Motos, José L.

Full text

UNIVERSIDAD DE ALMERIA ESCUELA SUPERIOR DE INGENIERÍA TRABAJO FIN DE GRADO Curso 2016/2017 Alumno/a: José Luis Navarro Motos Director/es: José del Sagrado Martínez “Andotter –Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter” 1 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Prólogo Durante los 4 años de carrera son muchas las asignaturas por las que pasamos. Resulta habitual, durante los primeros años, preguntarse si he elegido la titulación que realmente me gusta tras pasar asignatura y asignatura sin acabar con esa sensación de “esto es lo que realmente me gusta”. Pero al final, más tarde que temprano, llega el esperado momento, que en mi caso, no ha sido hasta el cuarto curso de carrera con la asignatura de Inteligencia de Negocio, asignatura con la cuál he descubierto que la rama que más me apasiona y en la que menos esfuerzo me cuesta trabajar es la Minería de Datos. Quizás una de las ramas menos “puramente” informáticas pero no por ello menos importante. Cuando, durante el transcurso de la asignatura saboree la capacidad que, junto a la Minería de Datos, tenemos para recoger una inmensa cantidad de datos, sin apenas información a priori, y convertirlos en un ente capaz de aportar una información tan potente como para plantearse un cambio en la política de una empresa es cuando descubrí que lo que tenía frente a mi tenía que ser el ámbito al que dedicar mi Trabajo de Fin de Grado. En ese momento comencé a darle vueltas a la cabeza sin conseguir establecer un tema específico dentro de la Minería de Datos sobre el que profundizar. Descubrí tal cantidad de temas que me abordaron y perdí el rumbo. Fue el momento de acudir a una persona con experiencia en el campo que me cogiera de la mano y me situara en el inicio del camino que yo realmente buscaba. Y que mejor persona que el profesor que me impartió la asignatura anteriormente citada. Durante una charla en su despacho, con solo hablar del tema, casi sin querer, se iba formalizando el tema del proyecto. Y ahora que lo tengo en mis manos pienso que no podría haber elegido otro mejor. Así que desde aquí, no me gustaría pasar al siguiente punto para entrar en materia sin agradecer su ayuda. José, mi más sincera gratitud por la colaboración prestada. He disfrutado y aprendido más de lo que nunca hubiera pensado durante la realización de este proyecto y gran parte de culpa es tuya. Sin más dilación, comencemos con el proyecto, que, espero guste a los leyentes igual o más que lo ha hecho a mí. 2 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Índice general Pr ´ ologo I ´ Indice general II 1. INTRODUCCIÓN 4 1.1 Presentación del problema 4 1.2 Objetivos del proyecto 5 1.2 Estructura del documento 6 2. ESTADO DEL ARTE 7 3. FASES DE DESARROLLO 11 4. ANÁLISIS 12 4.1 Descripción detallada de la solución 12 4.2 Análisis de requisitos 14 5. RECURSOS Y HERRAMIENTAS 15 5.1 RStudio 15 5.2 Shiny 16 5.3 TwitteR 16 5.4 Leaflet 17 5.5 Sentiment 18 5.6 Shinyapps.io 18 5.7 Léxico de polaridad 19 6. DISEÑO 22 6.1 Arquitectura del sistema 22 6.2 Conexión y extracción de tweets 23 6.3 Trending Topics 25 6.4 Limpieza de tweets 27 3 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería 6.5 Análisis basado en el léxico 28 6.6 Análisis con algoritmo Naïve Bayes 31 6.7 Nube de palabras (Wordcloud) 34 6.8 Diseño de la interfaz de usuario 35 6.9 Deploy con Shinyapps.io 39 7. RESULTADOS 40 7.1 Ejemplo de análisis basado en el léxico 40 7.2 Ejemplo de análisis con algoritmo Naive Bayes 42 7.3 Comparación de los 2 tipos de análisis 46 8. CONCLUSIONES 48 8.1 Desarrollo del proyecto 48 8.2 Conclusiones 49 8.3 Trabajo futuro 49 ANEXOS A. Análisis de requisitos 50 B. Diagrama de casos de uso 54 C. Cronograma de las fases del proyecto 55 D. Código en R de la aplicación 56 BIBLIOGRA F ´ IA 57 4 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Ca p ´ ıtulo 1 In troducc io ´ n 1.1 Presentación del problema. Resulta sencillo darse cuenta que las redes sociales son un campo en pleno auge en la sociedad actual. Según Facebook: casi un total de 1.230.000.000 usuarios de la plataforma inician sesión habitualmente en sus cuentas, llegando a pasar un promedio de 17 minutos al día conectados. Además, recientes estudios estadísticos revelan que el 72% de los hombres y el 80% de las mujeres poseen un perfil activo en alguna red social. Redes sociales como twitter suelen utilizarse para expresar opiniones acerca de una determinada temática, como podría ser una noticia sobre un caso de corrupción. Teniendo en cuenta la inmensa cantidad de usuarios que usan las redes sociales, estamos hablando de millones de opiniones diarias. Puede resultar más que interesante ser capaz de realizar un análisis de todas esas opiniones para obtener información acerca de los intereses de la sociedad en cada momento y ubicación geográfica. De esto precisamente se encarga la minería de datos aplicada a las redes sociales. Ésta consiste en la extracción no trivial de información que reside de manera implícita en los datos. En otras palabras, la minería de datos prepara, sondea y explora los datos para sacar información oculta de ellos. 5 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Los usos más habituales de la minería de datos, en el campo de las redes sociales, son los relacionados con servicios de publicidad personalizada (no es casualidad que en la red se nos muestren anuncios relacionados con nuestras aficiones o gustos) y con los procesos de contratación de personal en empresas (en la selección de personal, el estudio de los perfiles de las redes sociales puede aportar a las empresas información relevante que no se obtendrá en una simple entrevista de trabajo y puede ser clave para una correcta elección). Nuestro enfoque no se corresponde con ninguno de los dos usos anteriores. Nuestro interés se centra en estudiar la opinión de la sociedad ante una determinada temática en función de la situación temporal y geográfica. Con el desarrollo de este proyecto se pretende obtener una herramienta que nos permita analizar el sentimiento (positivo, negativo o neutro) y la emoción (alegría, miedo, enfado, etc.) de los usuarios de Twitter ante una determinada tendencia o temática, todo esto desde un análisis temporal y geográfico. Por ejemplo, podría resultar útil analizar qué opina la sociedad acerca de las próximas elecciones y cómo ésta opinión varía en función del lugar geográfico en que nos encontremos o del momento temporal en el que nos situemos. 1.2 Objetivos del proyecto. Cómo objetivo de este proyecto se pretende obtener una herramienta con la que, a partir de una temática o tendencia de entrada, obtengamos el sentimiento y emoción que dicha tendencia causa en la sociedad a través de Twitter. La aplicación desarrollada es interactiva con el usuario y muestra la información de una manera clara y precisa. Realizará 2 tipos de análisis: - Análisis de sentimiento basado en el léxico. Realizamos una ponderación y un recuento de las palabras o expresiones que denotan un sentimiento positivo, neutro y negativo y nos basamos en este recuento para expresar el sentimiento del mensaje completo [5, 6]. - Análisis mediante clasificador Naive Bayes. Un clasificador Bayesiano es un clasificador probabilístico fundamentado en el teorema de Bayes. Tendremos un clasificador Naive Bayes entrenado con un conjunto de datos de entrenamiento con el cuál, a partir de un mensaje de entrada, será capaz de clasificar su sentimiento y emoción [5, 6]. 6 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Para ambos análisis la aplicación permite al usuario introducir diversos parámetros de entrada que tendrán reflejo en el resultado del mismo. Junto a esto, la aplicación contiene una sección para la obtención de los actuales trending topics sobre los cuales el usuario puede realizar posteriormente uno de los dos análisis anteriormente citados. Éstos trending topics pueden obtenerse a partir de una localización geográfica concreta. 1.3 Estructura del documento. El presente documento se inicia con un prólogo. En el primer capítulo se presenta una introducción con la presentación del problema y los objetivos del proyecto. En el segundo capítulo se detalla el estado del arte con la información obtenida antes del inicio del proyecto sobre el ámbito del mismo. A continuación, en el capítulo 3, se pasa a detallar el análisis del sistema, esto es, una descripción detallada de la solución sin entrar en detalles de implementación, es decir, el qué y no el cómo. Una vez presentado el análisis, en el capítulo 4, se detallan todos los recursos y herramientas empleados para el desarrollo del proyecto. En el capítulo 5 se describe el diseño del sistema, comenzando por la arquitectura del mismo y pasando a detallar cada módulo implementado junto con el diseño de la interfaz de usuario. Seguidamente, en el capítulo 6, se presentan los resultados, detallando 2 ejemplos, uno de cada tipo de análisis junto con una comparación final de los 2. Finalmente, en el capítulo 7 se detallan las conclusiones del proyecto y el trabajo futuro. Además, en los anexos se incluye el análisis de requisitos del sistema (Anexo A), el diagrama UML de casos de uso para el modelado de los requisitos del sistema (Anexo B), el cronograma asociado a las fases de desarrollo del proyecto (Anexo C) y el enlace al código del proyecto (Anexo D). 7 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Ca p ´ ıtulo 2 Estado del arte Uno de los desafíos del Análisis de Sentimientos es la definición de los objetos de estudio de las opiniones y la subjetividad. Originalmente, la subjetividad fue definida por lingüistas, dentro del que destaca, Randolph Quirk [20]. Quirk define un estado privado como algo que no se encuentra abierto a la observación objetiva o verificación. Estos estados privados incluyen emociones, opiniones y especulaciones, entre otros. La definición misma de este estado privado dificulta el análisis del sentimiento. La subjetividad está a menudo implícita en una conversación, además de ser altamente sensible al contexto, y su expresión a menudo es peculiar de cada persona. Sin embargo, esa subjetividad no implica que no sea verdad [21]. Por ejemplo, la frase “Jennifer ama el chocolate” expresa un sentimiento de Jennifer para con el chocolate, pero esto no significa que no sea verdad. Es así, como de esta misma manera no todas las frases objetivas son verdaderas. Como campo de investigación, el análisis de sentimientos, está estrechamente relacionado con (o se puede considerar una parte de) la lingüística computacional, procesamiento del lenguaje natural y la minería de textos. Partiendo por el estudio del estado afectivo (psicología) y el juicio (teoría de la evaluación), este campo tiene por objeto responder a las preguntas estudiadas durante mucho tiempo en otras áreas sobre el discurso, utilizando nuevas herramientas proporcionadas por la minería de datos y la lingüística computacional. Análisis de Sentimientos tiene muchos nombres. A menudo, se conoce como análisis de subjetividad, minería de opinión, y extracción de evaluación, con algunas conexiones con la informática afectiva (reconocimiento computacional y la expresión de la emoción) [ 22 ]. Este campo por lo general estudia los elementos subjetivos, definidos como "expresiones lingüísticas de los estados particulares en contexto"[21]. Estas suelen ser palabras sueltas, frases u oraciones. A veces, los documentos enteros son estudiados como una unidad de sentimiento, pero es generalmente aceptado que el sentimiento reside en pequeñas unidades lingüísticas [23]. Tanto el sentimiento, como la opinión a menudo se refieren a la misma idea, en este documento se utilizan los términos indistintamente. Los sentimientos que aparecen en textos se ven de dos formas, la primera es explícitamente, donde la frase subjetiva directamente expresa la opinión (“Es un hermoso día”), mientras que la segunda es implícita, en donde el texto implica una opinión (“Los audífonos se quebraron en dos días”) [24]. La mayoría de los trabajos realizados se han enfocado en el primer tipo de sentimiento, debido a que este es más fácil de analizar. 8 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería La polaridad de los sentimientos es una característica particular de los textos. Ésta se hace presente regularmente de forma dicotómica, positivo o negativo, a pesar de que también puede ser vista dentro de un rango. Un documento posee varias frases que demuestran opiniones, las cuales podrían tener una polaridad mixta, que es diferente a que estas no tuviesen polaridad. Yendo más lejos, se debe hacer una distinción entre la polaridad del sentimiento y la fuerza que este tiene. Otra importante parte del sentimiento es el objetivo, pudiendo ser un objeto, un concepto, una persona o cualquier cosa. La mayoría de los trabajos han sido realizados sobre productos o criticas de películas, donde es fácil identificar el tópico del texto. Pero también es útil poner atención a la característica del objeto del cual el escritor se está refiriendo: “¿es la pantalla de la cámara o la duración de la batería el problema que más detectan los consumidores?” [25]. Debido a la disponibilidad de datos pertenecientes a comentarios de productos, por ello la extracción de características ha sido altamente estudiada en la década pasada [24]. La mención de estas características en los textos también puede ser explicita (“La duración de la batería es muy corta”) o implícita (“La cámara es muy grande”) [24]. Durante la última década, con el auge de las redes sociales, se han realizado muchos trabajos en el campo de la minería de datos orientados al análisis de sentimiento. Un estudio destacado sobre el problema de la clasificación de opiniones en positivas o negativas, lo realiza Pang, 2002 [1], utilizando como datos las críticas de películas encontradas en la web. El hecho de que el usuario además de escribir una opinión, pueda evaluar con un número de estrellas la película en cuestión, hace que no sea necesario etiquetar manualmente cada una de las opiniones como positivas o negativas. En su estudio utilizan tres algoritmos ya utilizados anteriormente para tareas como la clasificación de textos por tema: Naive Bayes, maximum entropy (MaxEn) y support vector machines (SVM). La conclusión obtenida es que, a pesar de que la precisión del resultado del uso de métodos de aprendizaje automático supera los estándares producidos manualmente por un humano, éstos no tienen un rendimiento tan bueno como el que se obtiene al tratar el problema de categorización por tema, convirtiendo por tanto el problema de análisis de sentimiento en una tarea más compleja. Los primeros estudios únicamente consideraban el aprendizaje a partir de ejemplos con una polaridad positiva o negativa, ignorando los ejemplos que muestran un sentimiento neutro. Existen estudios como el de Koppel et al., 2006 [2], en el que se muestra la importancia que tiene el uso de ejemplos neutrales en el proceso de aprendizaje, demostrando una mejor distinción entre polaridad positiva y negativa si se hace uso de éstos. En cuanto al análisis de sentimiento aplicado a las redes sociales, podemos destacar el artículo en español de Grigori Sidorov, 2013 [3]. Exploran diferentes configuraciones para ver cómo cada una afecta a la precisión de los algoritmos de aprendizaje automático. Experimentan con los algoritmos de Naive Bayes, Decision Tree y SVM, dado que éstos ya han presentado buenos resultados para el idioma inglés. En sus configuraciones tienen en cuenta diferentes tamaños n-gram, la longitud del corpus, el número de clases de sentimientos, corpus balanceado vs. Corpus no balanceado y diferentes dominios para entrenar y testear (teléfonos móviles y política). En sus conclusiones determinan que la mejor configuración corresponde al uso de unigramas como características, un número tan pequeño como se pueda de clases (positivo y negativo), un tamaño de al menos 3000 tweets en el conjunto de entrenamiento (un tamaño superior no incrementa la precisión significativamente), un corpus no balanceado, muestra una ligera mejoría en los resultados y el clasificador con más precisión es el SVM. 15 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Ca p ´ ıtulo 5 Recursos y herramientas 5.1 RStudio El lenguaje de desarrollo de la aplicación es R. Se trata de un lenguaje de programación con un enfoque al análisis estadístico. La elección de éste se basa principalmente en que es uno de los más utilizados en el campo de la minería de datos, la investigación biomédica, la bioinformática y las matemáticas financieras aportando grandes ventajas en el análisis de datos y presentación de los mismos mediante gráficos. Como entorno de desarrollo se opta por RStudio (ver Fig. 1) por ser en primer lugar open source además de ser el más usado ampliamente para el desarrollo en R. Cuenta con una interfaz simple que incluye una consola, un editor de código y herramientas para la depuración y gestión del espacio de trabajo. Fig. 1. Interfaz gráfica de RStudio 16 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería 5.2 Shiny Para el desarrollo de la interfaz de usuario se buscaba una herramienta simple y capaz de generar una interfaz dinámica y atractiva. Aprovechando el uso de R en el proyecto se opta por emplear Shiny. Se trata básicamente de una potente herramienta o framework para R que nos permite el desarrollo de interfaces completamente interactivas con un conocimiento muy básico de html. Los elementos de la interfaz se crean mediante llamadas a funciones de la propia herramienta lo que nos evita tener un gran conocimiento de html o javascript. Gracias a la programación reactiva que implementa la herramienta obtenemos una interfaz completamente dinámica, actualizándose, por ejemplo, con solo introducir un valor en un campo de texto sin tener que pulsar posteriormente ningún botón. Con solo instalar Shiny en nuestro proyecto como un paquete más de R y crear los archivos ui.r (contiene el frontend) y server.r (contiene el backend) ya estamos listos para comenzar a desarrollar la interfaz. Contiene la implementación de un servidor local, por lo que, una vez hecho esto con solo pulsar el botón de ejecutar ya tendremos la aplicación en ejecución [8, 11]. 5.3 TwitteR Necesitamos algo que nos permita conectar a Twitter y extraer tweets. Esta funcionalidad nos la aporta TwitteR. Se trata de una API en R que nos permite conectar a la API de Twitter con nuestras credenciales personales de Developer y extraer tweets y trending topics mediante las funciones determinadas. El resultado de estas funciones lo obtenemos directamente en un data frame (estructura de datos característica de R). Todas las funciones cuentan con diversos parámetros que nos permiten ajustar la consulta a nuestro gusto. Básicamente se trata de una API que implementa la funcionalidad de la API oficial de Twitter a R, puesto que ésta no tiene soporte para dicho lenguaje. También se instala como un paquete más de R. 17 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Resulta importante, llegados a este punto, destacar las obligadas limitaciones que posee la aplicación debido a las restricciones de la API de Twitter o API Rate Limits [12]. Todas las restricciones están divididas en ventanas o intervalos de 15 minutos. Esto quiere decir que pasados 15 minutos se renuevan las restricciones. Desde el paquete TwitteR tenemos una función encargada de darnos el estado actual de las restricciones para nuestra conexión. Las restricciones que nos afectan en la aplicación son las siguientes: - Trending topics: 15 búsquedas por ventana (15 minutos). - Tweets: 180 búsquedas por ventana. También es importante mencionar que la API de Twitter restringe la búsqueda de tweets antiguos a solo los 9 días anteriores. Por esto, la capacidad de análisis temporal de la aplicación se verá afectada y quedará restringida a esta ventana temporal. 5.4 Leaflet Leaflet es un paquete de R (rstudio.github.io/leaflet) que nos permite el uso de mapas interactivos en nuestra aplicación (ver Fig. 2) . La librería está desarrollada en Javascript y es una de las librerías open-source más populares para el uso de mapas interactivos usada en paginas como The New York Times o GitHub. Nos permite seleccionar distintos tipos de mapas y añadir en éstos marcadores mediante el uso de coordenadas. Además cuenta con funciones específicas para capturar eventos en el propio mapa que nos permiten por ejemplo, actualizar una variable de país con el valor del país que el usuario haya pulsado. Fig. 2. Ejemplo de mapa interactivo desarrollado con Leaflet 18 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería 5.5 Sentiment Sentiment es un paquete de R que implementa un algoritmo de clasificación Naive Bayes para el análisis de sentimiento [18]. De momento solo es válido para textos en inglés. Cuenta con funciones que nos permiten clasificar la polaridad y la emoción presente en un texto. Dichas funciones cuentan con parámetros que nos permiten ajustar el clasificador. El motivo de optar por éste paquete es por ser el más usado en el ámbito del análisis de sentimiento con R y el que mejores resultados obtiene gracias a los corpus que emplea. El conjunto de entrenamiento usado para el clasificador de polaridad es el de Janyce Wiebe [13] Para el clasificador de emoción el conjunto de entrenamiento usado es el de Carlo Strapparava y Alessandro Valitutti [14] La ausencia de contenido open-source en español para el análisis de sentimiento impide el desarrollo del algoritmo de Naive Bayes para español. 5.6 Shinyapps.io Uno de los inconvenientes del uso de herramientas framework como shiny es que estamos bastante limitados en el uso de servidores en los que realizar el despliegue de la aplicación. Se ha optado finalmente por el plan gratuito de shinyapps.io (ver Fig. 3) con la que tenemos una limitación de 5 aplicaciones (nosotros solo necesitamos 1) y 25 horas activas por mes. Ésta es la limitación que más nos perjudica ya que la aplicación no podrá estar online todo el tiempo. Fig. 3. Precios y restricciones de los planes ofertados por Shinyapps.io 19 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería 5.7 Léxico de polaridad Para el análisis de sentimiento basado en el léxico necesitamos de un conjunto de palabras clasificadas según su polaridad. Como éste análisis da soporte tanto a tweets en español como en inglés hemos necesitado de 2 conjuntos, uno para español y otro para inglés. De los pocos recursos encontrados en español el que mejor resultados ha obtenido ha sido el proporcionado por la Fundación Elhuyar [15]. Éste se creó a partir de diferentes fuentes e incluye alrededor de 5200 palabras clasificadas en positivas y negativas. El otro conjunto de palabras encontrado en español se trata de un conjunto traducido a partir de otro corpus en inglés. Esto hace que por la traducción muchas palabras cambien su polaridad, lo que finalmente radicaba en unos resultados bastante inexactos. Sin embargo el conjunto de la Fundación Elhuyar ha sido desarrollado manualmente por españoles nativos lo que da mayor robustez y fiabilidad a éste último. El conjunto empleado consta de varias secciones. Por una parte tenemos una sección con términos generales que son simplemente palabras tradicionales del castellano clasificadas con su polaridad (ver Fig. 4) . Una muestra de su contenido: Fig. 4. Ejemplo de términos generales del léxico de polaridad 20 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Por otro lado, contamos con una sección de interjecciones (ver Fig. 5) . Éstas palabras expresan sentimientos muy vivos por lo que son de gran influencia en el resultado final de clasificación. Unos ejemplos de éstas interjecciones: Fig. 5. Ejemplo de interjecciones del léxico de polaridad La siguiente sección se trata de un listado de coloquialismos (ver Fig. 6). Éstos son palabras o expresiones que se dicen de forma familiar o cotidiana. Aunque predominan en el lenguaje oral, también se dan en el lenguaje escrito gracias a las conversaciones electrónicas y los chats, por tanto, será importante tenerlos en cuenta en nuestro análisis. Fig. 6. Ejemplo de coloquialismos del léxico de polaridad 21 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Por último, contamos con una sección que nos resulta más que interesante. Ésta se compone de un conjunto de términos empleados generalmente en Twitter (ver Fig. 7). Fig. 7. Ejemplo de términos específicos de Twitter en el léxico de polaridad El conjunto con palabras en inglés empleado es el elaborado por Minqing Hu y Bing Liu [16] y presentado en el artículo “Mining and Sumarizing Customer Reviews” [17]. Éste cuenta con un conjunto de términos generales en inglés clasificados como positivos o negativos según su polaridad. 22 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Ca p ´ ıtulo 6 Diseño 6.1 Arquitectura del sistema. El sistema se divide en 6 módulos. En la siguiente figura se puede ver un esquema gráfico general de la arquitectura aquí descrita (ver Fig. 8). En los próximos apartados del capítulo analizaremos en detalle el funcionamiento de cada módulo. Fig. 8. Esquema general de la arquitectura del sistema En primer lugar tenemos un módulo encargado de iniciar la actividad de la aplicación realizando la conexión con la API de Twitter y aportando la funcionalidad necesaria para extraer los tweets que posteriormente serán utilizados en los análisis. Por otro lado tenemos un módulo que implementa la funcionalidad necesaria para extraer los trending topics solicitados por el usuario. Éste lo podríamos catalogar como un submódulo del módulo anterior. 23 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Como tercer módulo tendríamos el encargado de recoger los tweets obtenidos por el primer módulo y realizar un proceso de limpieza sobre ellos para hacer posible su posterior análisis. En este momento intervienen los módulos que podríamos denominar como núcleo del sistema, los encargados de realizar los análisis. Por un lado tendríamos el módulo encargado de realizar el análisis basado en el léxico que tomaría como entradas los tweets limpios generados por el módulo anterior y los los conjuntos de léxicos de polaridad. Por otro lado tenemos el módulo encargado de realizar el análisis utilizando el algoritmo de Naive Bayes que, de nuevo, vuelve a usar como entrada los tweets limpios generados por el tercer módulo. Aunque quizás no posea la envergadura suficiente para clasificarlo como módulo, puesto que es difícil de encajar en uno de los anteriores, añadiremos otro pequeño módulo encargado de generar el wordcloud o nube de palabras con las palabras mas repetidas en los tweets analizados. De nuevo, este módulo vuelve a emplear los tweets generados por el tercer módulo. 6.2 Conexión y extracción de tweets. Como requisito indispensable antes de realizar cualquier operación en la aplicación es necesaria la conexión con la API de Twitter para la extracción de los datos. Para ello, en primer lugar, es necesario ir a la página de twitter de desarrolladores, registrarnos como desarrollador y crear una app, lo que nos generará unas credenciales para la posterior conexión (ver Fig. 9) . Fig. 9. Ejemplo de aplicación creada en twitter developers 24 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Una vez que tenemos nuestra app creada generaremos los parámetros necesarios para la conexión con la API de Twitter. Éstos son: las api key pública y privada y los tokens público y privado. Con esto estamos listos para realizar la conexión con la función específica del paquete TwitteR. Una vez que tenemos la conexión realizada con éxito el siguiente paso es la extracción de tweets. Para ello, el paquete TwitteR nos provee de una función que realizará la consulta a la API de Twitter en base a una serie de parámetros introducidos por nosotros: - Número de tweets a buscar. - Lenguaje de los tweets. - Restricción de fecha para los tweets. - Geolocalización. - Tweets recientes, populares o una mezcla de ambos. Con todo esto, una vez realizada la consulta, la función nos devuelve una lista de objetos tipo status. El tipo status es un objeto especial del paquete TwitteR que contiene toda la información correspondiente a un tweet: - Texto del tweet. - Nombre del usuario que lo ha publicado. - Id - Fecha de publicación. - Número de retweets y favoritos. Una vez extraídos los tweets y almacenados en una lista, eliminamos en primer lugar todos los tweets retwiteados con el objetivo de realizar el análisis solo con tweets puros. Una vez eliminados nos quedamos solamente con el texto del tweet que es lo que nos interesa para el análisis y ya tenemos nuestro conjunto de tweets listo para pasar al siguiente módulo. A continuación se muestra un ejemplo de conjunto de tweets que tendríamos al final de éste módulo en relación al IPhone 7 (ver Fig. 10). Fig. 10. Conjunto de tweets obtenidos tras el primer módulo. Tendencia: IPhone 7 31 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería El algoritmo también realiza un análisis temporal de los últimos 9 días (en el apartado 4.3 se detalla el motivo de este rango de tiempo tan pequeño). Para ello, simplemente repetimos 9 veces el proceso descrito, obteniendo para cada iteración, los tweets correspondientes solo al día que estamos analizando. Un ejemplo de lo que obtendríamos manteniendo la tendencia de “IPhone 7” es el siguiente (ver Fig. 18): Fig. 18. Análisis temporal para la tendencia “IPhone 7” Este tipo de análisis, sin contar con la restricción de la API de Twitter, tiene una aplicación más que interesante. En el caso del ejemplo mostrado podríamos, por ejemplo, observar como varía la opinión de los usuarios en torno al IPhone 7 conforme nos acercamos a la fecha de su presentación y después de ella. Ésta sería una forma más que interesante de obtener un feedback acerca del éxito de la presentación. 6.6 Análisis con algoritmo Naive Bayes. Detallado el funcionamiento del algoritmo basado en el léxico pasamos al de Naive Bayes. Antes de nada, para colocarnos en situación veamos por encima que es un algoritmo Naive Bayes. El algoritmo comúnmente conocido como Naive Bayes es una de las implementaciones más populares de una red bayesiana. Una red bayesiana es un clasificador estadístico. Éste predice la probabilidad de que, dada una tupla, ésta pertenezca a una clase concreta. Ésta clasificación se basa en el teorema de Bayes. 32 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Para usar un algoritmo Naive Bayes es indispensable entrenarlo. Esto se hace mediante un conjunto de datos de entrenamiento, que, en nuestro caso, es un corpus con una gran cantidad de tweets ya clasificados manualmente. El paquete sentiment [18], ya implementa un algoritmo Naive Bayes entrenado con 2 corpus distintos. Uno para la clasificación de polaridad y otro para la clasificación de emoción. El algoritmo, de momento, solo cuenta con corpus en inglés, por tanto, la clasificación solo podremos realizarla sobre tweets en inglés. Las referencias a los corpus usados por el paquete sentiment se detallan en la sección 4.5 de este documento. Una vez implementado y entrenado el algoritmo, lo único que nos queda por hacer es seleccionar el tweet, procesarlo con los atributos empleados por el algoritmo y obtener la clasificación. De nuevo, es necesario el proceso de obtención y limpieza de tweets anteriormente descrito. Vamos a representar un ejemplo de lo que obtendríamos con éste algoritmo. Por no ser repetitivos vamos a cambiar de tendencia. Ésta vez vamos a analizar la tendencia “no mans sky”. Tras la obtención y limpieza de tweets obtenemos el siguiente conjunto (ver Fig. 19) : Fig. 19. Conjunto de tweets limpios para la tendencia “no mans sky” La función encargada de realizar el análisis de polaridad nos devuelve el siguiente data frame. Fig. 20. Resultado análisis de polaridad para tendencia “no mans sky” 33 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Las columnas POS y NEG nos indican el valor de probabilidad calculado por el algoritmo de que la tupla analizada pertenezca a esa clase. La columna POS/NEG indica simplemente la división de los dos valores anteriores. Un valor de 1 indica una polaridad neutra, un valor menor que 0 negativa y mayor que 0 positiva. La columna BEST_FIT nos indica la mejor clasificación en base a lo descrito anteriormente. Del mismo modo obtenemos la clasificación de emoción para los tweets. Para este caso obtenemos el siguiente resultado (ver Fig. 21): Fig. 21. Resultado análisis de emoción para tendencia “no mans sky” De nuevo, los valores de cada columna indican el valor de probabilidad de que la tupla analizada pertenezca a dicha clase. En la columna BEST_FIT obtenemos la mejor clasificación calculada. En los casos en los que el algoritmo no es capaz de clasificar la tupla el valor para esta columna es NA. Observamos que para este caso la mayoría de los tweets se clasifican con una emoción de alegría. Es importante indicar que esto es solo un ejemplo ilustrativo. Para obtener unos resultados más fiables es importante ampliar en gran medida el número de tweets analizados. 34 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería 6.7 Nube de palabras (Wordcloud). Quizás esta parte de la aplicación no tiene la envergadura suficiente como para catalogarla en un módulo aparte, pero con tal de facilitar la comprensión del diseño de la aplicación se ha optado por hacer de ella un módulo independiente. Una nube de palabras o su término más conocido, wordcloud, es una forma de observar de forma muy simple la tendencia de un texto. Esta es una representación visual de las palabras que conforman un texto, donde cuanto mayor tamaño mayor es la frecuencia de aparición. En nuestro contexto, esto no resulta muy útil para observar a simple vista en que se está haciendo más hincapié dentro la tendencia que estamos analizando. La creación de un wordcloud en R resulta muy simple gracias al paquete wordcloud que contiene la funcionalidad necesaria para dibujarla. Sin embargo, antes de esto, tenemos que realizar un pequeño proceso. En cada lenguaje tenemos un conjunto de palabras catalogadas como palabras vacías o stopwords. Esto no son mas que las palabras sin significado como artículos, pronombres, preposiciones, etc. Para generar un wordcloud que resulte realmente útil es muy importante la eliminación de estas stopwords antes. Una vez eliminadas se junta todo en un corpus, posteriormente en una matriz de términos, se ordenan las palabras de mas frecuencia a menos y por último se llama a la función del paquete wordcloud que nos dibuja el gráfico. A continuación, se muestra el ejemplo de un wordcloud generado a partir de la tendencia “RIO 2016” (ver Fig. 22) Fig. 22. Wordcloud generado a partir de la tendencia “RIO 2016” 35 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería 6.8 Diseño de la interfaz de usuario. Una vez descritos todos los módulos del sistema pasamos a presentar el diseño de la interfaz de usuario. Uno de los objetivos de la aplicación era conseguir una interfaz de usuario amigable y dinámica. Shiny nos ha permitido cumplir con esto gracias a su plantilla interna y su programación reactiva. La creación de interfaces en Shiny se realiza mediante el uso de componentes con un diseño ya programado, por lo que, no necesitamos tocar CSS. - Página principal. La página principal es simplemente la página de bienvenida de la aplicación en la que se da un poco de información acerca de la misma e información de contacto (ver Fig. 23). Además en la parte superior podemos comprobar la cantidad de búsquedas de tweets y trending topics que quedan para alcanzar el límite permitido por la API. El menú, situado en la parte izquierda, es dinámico: se puede extender y contraer y su contenido varía dependiendo de la página en la que nos encontremos. Fig. 23. Página principal 36 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería - Trending topics. Esta es la página encargada de contener la funcionalidad correspondiente a la búsqueda de trending topics (ver Fig. 24). Observamos que en el menú se añade una nueva sección para introducir la localización sobre la que queremos buscar los trending topics. Además contamos con un mapa interactivo en la parte derecha desde el cual también podemos seleccionar la localización simplemente pinchando sobre una de las ubicaciones disponibles. Fig. 24. Página de trending topics. - Análisis basado en el léxico. A continuación pasamos a detallar la página encargada de ofrecer el análisis basado en el léxico (ver Fig. 25). En el menú nos aparecen una serie de parámetros de entrada para configurar la consulta. En primer lugar tenemos una lista desplegable para seleccionar un trending topic a partir del cual realizar el análisis (para esto es indispensable haber realizado primero una búsqueda de trending topics). También podemos introducir la tendencia de forma manual desde el siguiente campo de texto. Además podemos seleccionar el número de tweets sobre el que realizar el análisis, el idioma de dichos tweets y el rango de fecha de publicación. 37 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Para la visualización del resultado se muestran un histograma y un gráfico de caja además del wordcloud y un gráfico de línea para el análisis temporal [10]. En otra sección se muestra una vista detalle con la clasificación realizada por el algoritmo para cada tweet. - Fig. 25. Ejemplo de análisis basado en el léxico para la tendencia “Benfica” 38 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería - Análisis con algoritmo Naive Bayes. La página encargada de presentar la funcionalidad del análisis con el algoritmo Naive Bayes presenta un aspecto bastante similar a la del análisis basado en el léxico (ver Fig. 26). De nuevo volvemos a tener el wordcloud en la parte derecha de la ventana y la vista detalle justo debajo. Pero en este caso en lado izquierdo se muestran los resultados de los dos análisis realizados, el de polaridad y el de emoción. Éstos se muestran detallados mediante texto y se acompañan de unos gráficos de barras para una mejor visualización. En la vista detallada se muestra cada tweet con su clasificación tanto de polaridad como de emoción. Para esta página se utilizan un nuevo estilo de gráficos generados mediante la librería ggplot2 que dan una mejor visión para estos tipos de histogramas con varias variables distintas. Fig. 26. Ejemplo de análisis con algoritmo Naive Bayes para la tendencia “Monfils 39 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería 6.9 Deploy con Shinyapps.io La gran ventaja del uso de un servidor de shinyapps.io es el gran ahorro de tiempo que ganamos con la instalación y configuración del servidor. Para realizar el deploy de la aplicación desde nuestro proyecto local en R, shinyapps.io se requiere del paquete rsconnect que se instala en nuestra instalación local de R como un paquete mas [11]. Tras crear una cuenta y una aplicación en la web de shiynapps.io tenemos que generar un par de tokens (público y privado) Con estos tokens pasamos a configurar la conexión de la cuenta en nuestro proyecto local mediante una función del paquete rsconnect. Una vez configurada la conexión, con simplemente llamar a la función deployApp() de rsconnect nuestra aplicación se subirá al servidor y estará completamente accesible desde su url. La url en la que se encuentra desplegada la aplicación es: https://andotter.shinyapps.io/Andotter/ 40 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Ca p ´ ıtulo 7 Resultados En este apartado introduciremos un ejemplo práctico para cada uno de los dos tipos de análisis implementados para finalmente realizar un análisis de los resultados comparando el análisis de los dos clasificadores sobre una misma tendencia. 7.1 Ejemplo de análisis basado en el léxico. Comenzaremos el capítulo con un ejemplo completo sobre un análisis basado en el léxico a partir del cual podremos obtener una evaluación sobre éste análisis independientemente. Imaginemos que entramos en la aplicación y no tenemos una tendencia determinada a analizar. Por lo tanto nos iremos a la sección de trending topics para buscar una tendencia que nos interese y realizar el análisis sobre ella (Ver Fig. 27). Fig. 27. Búsqueda de trending topics en España 47 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Fig. 33. Ánalisis con algoritmo basado en el léxico para la tendencia “#BoicotNFL” Comparando ambos resultados comprobamos que en ambos obtenemos un resultado de sentimiento negativo. A simple vista quizás pueda parecer que el algoritmo de Naive Bayes (Ver Fig. 32) presente un resultado más negativo pero tras estudiar bastantes análisis con el algoritmo basado en el léxico (Ver Fig. 33) se puede afirmar que un resultado de -1 ya indica un sentimiento negativo importante, pasando esta frontera en muy contadas ocasiones. 48 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Ca p ´ ıtulo 8 Conclusiones 8.1 Desarrollo del proyecto. El proyecto se comenzaba con un nivel muy básico de R y sin ninguna experiencia sobre Shiny ni minería de datos aplicada a Twitter u otra red social. Cabe destacar que la curva de aprendizaje de Shiny y R ha sido extremadamente alta, llegando a tener soltura en el desarrollo de la interfaz gráfica con Shiny en solo 2 días de aprendizaje. Sin embargo, no todo ha sido un camino de rosas. El procesado de los datos, en este caso los tweets extraídos de Twitter, ha dado muchos quebraderos de cabeza debido a la codificación de los tweets. Los emoticonos usados en los tweets no se pueden procesar en la codificación usada por las cadenas en R (UTF-8) por lo que es necesario realizar un cambio de codificación y posteriormente resolver los conflictos creados por dicho cambio, como la desaparición de los caracteres con tildes. Por otra parte, la implementación del mapa interactivo también conllevó una gran parte del tiempo, sobre todo para pensar la forma de obtener las coordenadas de los países habilitados para la consulta de los trending topics y representarlos en el mapa. Uno de los problemas encontrados durante el transcurso del proyecto es que no podemos controlar los tweets publicados por los usuarios. La mayoría contienen faltas de ortografía, palabras abreviadas, emoticonos, etc. que son irreconocibles por los algoritmos de clasificación. Otro gran problema en este sentido es la presencia de ironía en los tweets. Resulta muy difícil para un algoritmo detectar la ironía en los mensajes. En muchas ocasiones resulta difícil hasta para nosotros. 49 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería 8.2 Conclusiones. Hemos podido comprobar que el resultado obtenido para los análisis de polaridad de ambos algoritmos es fiable, aunque se podría mejorar para algunos casos específicos, como por ejemplo cuando nos enfrentamos a tweets con un gran grado de ironía como ya se ha comentado anteriormente. Sin embargo, el análisis de emoción nos ha dado unos resultados poco fiables, presentando una clara tendencia hacia la clasificación de los tweets como alegres. El motivo de esta imprecisión quizás radique en un mal diseño del algoritmo o en el corpus de datos utilizado para el entrenamiento del algoritmo. 8.3 Trabajo futuro. Tras la consecución del proyecto quedan abiertos varios caminos para un trabajo futuro. En primer lugar, la implementación de un clasificador automático para el análisis de sentimiento en castellano. Para esto se necesitaría de un corpus en español. Durante el final del desarrollo del proyecto se localizó y consiguió acceso a un corpus, el utilizado en las ediciones anuales de TASS con lo que ya tendríamos la base para la implementación del algoritmo. Por otra parte, resultaría de gran mejora para los resultados de los análisis la mejora del algoritmo de procesado de tweets, añadiendo funcionalidades para intentar detectar algunos casos particulares de ironía. También resultaría interesante mejorar la aplicación, permitiendo la autentificación de usuarios para guardar los análisis realizados, esta funcionalidad no se ha implementado ahora debido a que el servidor gratuito de shiny server no permite esta funcionalidad, sería necesario pasar a la versión pro de pago. 50 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Anexo A Análisis de requisitos RF-01 Búsqueda de trending topics Actores asociados ACT-01 Usuario invitado Descripción El usuario puede realizar una búsqueda geográfica de trending topics. Obteniendo una lista con los más populares para esa ubicación. Precondición - Secuencia normal Paso Acción 1 El usuario selecciona la ubicación geográfica mediante una lista desplegable o el mapa interactivo. 2 El sistema realiza la consulta a la API. 3 Se devuelve el resultado en una tabla. Postcondición El resultado obtenido recarga una lista desplegable que permite la selección de tendencias en los análisis. Excepciones - Comentarios La ubicación se especifica mediante el nombre del país y, si se precisa, el estado o provincia. 51 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería RF-02 Análisis basado en el léxico Actores asociados ACT-01 Usuario invitado Descripción El usuario realiza el análisis basado en el léxico sobre una tendencia determinada, obteniendo el resultado de polaridad para dicha tendencia. Precondición Si se desea realizar el análisis sobre un trending topic es necesario realizar la búsqueda de trending topics con anterioridad. Secuencia normal Paso Acción 1 El usuario introduce los parámetros de entrada para el análisis: tendencia, número de tweets, idioma y rango de fecha. 2 El sistema realiza el análisis. 3 Se muestra el resultado del análisis de sentimiento con un histograma y un diagrama de caja junto con una vista detalle. Postcondición Una vez realizado el análisis se permite generar un análisis temporal para dicha tendencia. Excepciones - Comentarios El resultado de polaridad obtenido es un entero que puede ser negativo, positivo o 0. 52 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería RF-03 Wordcloud Actores asociados ACT-01 Usuario invitado Descripción En el resultado de cada análisis se incluye un wordcloud con los términos más mencionados en dicha tendencia. Precondición Para la obtención del wordcloud es necesario realizar un análisis basado en el léxico o con algoritmo Naive Bayes. Secuencia normal Paso Acción 1 El sistema genera y muestra el wordcloud en una sección de la página. Postcondición - Excepciones - Comentarios - RF-04 Análisis temporal Actores asociados ACT-01 Usuario invitado Descripción En los análisis basados en el léxico se permite también la obtención de un análisis temporal de los últimos 9 días. Precondición Para la obtención del análisis temporal es necesario realizar un análisis basado en el léxico. Secuencia normal Paso Acción 1 El usuario despliega la sección específica del análisis temporal. 2 El sistema realiza el análisis y muestra el resultado en la sección correspondiente. Postcondición - Excepciones - Comentarios El resultado del análisis temporal se muestra mediante un gráfico con el valor de sentimiento para cada día analizado. 53 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería RF-05 Análisis con algoritmo Naive Bayes Actores asociados ACT-01 Usuario invitado Descripción El usuario realiza el análisis con un algoritmo Naive Bayes sobre una tendencia determinada, obteniendo el resultado de polaridad y emoción para dicha tendencia. Precondición Si se desea realizar el análisis sobre un trending topic es necesario realizar la búsqueda de trending topics con anterioridad. Secuencia normal Paso Acción 1 El usuario introduce los parámetros de entrada para el análisis: tendencia, número de tweets, idioma y rango de fecha. 2 El sistema realiza el análisis. 3 Se muestra el resultado del análisis de sentimiento y emoción con dos histogramas junto con una vista detalle. Postcondición - Excepciones - Comentarios - 54 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Anexo B Diagrama de casos de uso Diagrama UML de casos de uso con el modelado de los requisitos del sistema. 55 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Anexo C Cronograma asociado a las fases del proyecto. 56 Andotter – Aplicación para el análisis temporal y geográfico de opinión en tendencias de Twitter José Luis Navarro Motos Grado en Ingeniería Informática - Universidad de Almería Anexo D Código en R de la aplicación Todo el código empleado en el desarrollo de la aplicación se encuentra accesible desde el repositorio público de GitHub: https://github.com/jnm733/Andotter