scieee AI-readable full text Open interactive document viewer

Extractor y comparador de características para establecimientos turísticos empleando análisis de sentimientos con Big Data

Marín Siruela, Néstor

Abstract

El objetivo final de este Proyecto Fin de Carrera (Extractor y Comparador de Características para Establecimientos Turísticos empleando Análisis de Sentimientos con Big Data), o ECCETAS, es desarrollar un sistema que, utilizando el análisis de sentimiento como soporte de funcionamiento, permita recabar las características positivas o negativas de un establecimiento turístico (o varios) de forma gráfica, apoyándose en Big Data para el almacenamiento y gestión de los datos iniciales.

Full text

ESCUELA DE INGENIERÍA DE TELECOMUNICACIÓN Y ELECTRÓNICA PROYECTO FIN DE CARRERA EXTRACTOR Y COMPARADOR DE CARACTERÍSTICAS PARA ESTABLECIMIENTOS TURÍSTICOS EMPLEANDO ANÁLISIS DE SENTIMIENTOS CON BIG DATA Autor: Néstor Marín Siruela Tutor: Luis Miguel Hernández Acosta Titulación: Ingeniero de Telecomunicación Fecha: Mayo 2017 ESCUELA DE INGENIERÍA DE TELECOMUNICACIÓN Y ELECTRÓNICA PROYECTO FIN DE CARRERA EXTRACTOR Y COMPARADOR DE CARACTERÍSTICAS PARA ESTABLECIMIENTOS TURÍSTICOS EMPLEANDO ANÁLISIS DE SENTIMIENTOS CON BIG DATA HOJA DE FIRMAS Alumno/a Fdo.: Néstor Marín Siruela Tutor/a Fdo.: Luis Miguel Hernández Acosta Fecha: Mayo 2017 ESCUELA DE INGENIERÍA DE TELECOMUNICACIÓN Y ELECTRÓNICA PROYECTO FIN DE CARRERA EXTRACTOR Y COMPARADOR DE CARACTERÍSTICAS PARA ESTABLECIMIENTOS TURÍSTICOS EMPLEANDO ANÁLISIS DE SENTIMIENTOS CON BIG DATA HOJA DE EVALUACIÓN Calificación: ___________________________ Presidente Fdo.: Vocal Secretario/a Fdo.: Fdo.: Fecha: Mayo 2017 Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 1 Índices 2 Índices Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 3 Tabla de Contenido Índices .............................................................................................................. 1 Capítulo 1: Introducción ................................................................................. 14 1.1. Introducción ...................................................................................... 15 1.2. Objetivos del Proyecto ....................................................................... 17 1.2.1. Estudio del estado del arte. ........................................................ 18 1.2.2. Análisis y selección de herramientas especializadas. ................ 18 1.2.3. Estudio, recolección y procesado de los datos disponibles en las redes sociales. .................................................................................................... 18 1.2.4. Diseño del extractor y comparador. ........................................... 18 1.2.5. Utilización del extractor y comparador y análisis de los resultados obtenidos. ........................................................................................ 18 1.3. Metodología ....................................................................................... 19 1.4. Peticionario ........................................................................................ 21 1.5. Estructura de la Memoria .................................................................. 21 Capítulo 2: Estado del Arte ........................................................................... 25 2.1. Introducción ..................................................................................... 26 2.2. Tecnologías generales ....................................................................... 26 2.2.1. Java ............................................................................................. 26 2.2.2. Big Data ....................................................................................... 27 2.2.3. JSON ........................................................................................... 28 2.2.4. CSV .............................................................................................. 29 2.2.5. Servicio web ................................................................................ 30 2.3. Extracción ......................................................................................... 30 2.3.1. Minería de Datos ........................................................................ 30 4 Índices 2.3.2. Import.IO .................................................................................... 33 2.4. Análisis de Sentimiento .................................................................... 33 2.4.1. Procesamiento de Lenguajes Naturales (PLN) .......................... 33 2.4.2. Análisis de Sentimiento .............................................................. 34 2.4.3. AlchemyAPI ................................................................................ 37 2.5. Representación ................................................................................. 37 2.5.1. JFreeChart .................................................................................. 38 Capítulo 3: Extracción ................................................................................... 40 3.1. Introducción ...................................................................................... 41 3.1.1. Estructura ................................................................................... 42 3.1.2. Sentido ........................................................................................ 42 3.1.3. Validez de los Datos .................................................................... 42 3.1.4. Caso de Estudio .......................................................................... 43 3.2. Import.IO .......................................................................................... 44 3.3. Estructura y Descripción del Bloque ................................................ 46 46 3.3.1. Generación de scripts de Import.IO .......................................... 47 3.3.2. Generar llamadas a Import.IO .................................................... 51 3.3.3. Procesar y Formatear los Datos.................................................. 53 3.4. Resumen del Bloque ......................................................................... 55 Capítulo 4: Almacenamiento ......................................................................... 58 4.1. Introducción ..................................................................................... 59 4.2. Usos .................................................................................................. 59 4.2.1. Almacenamiento ......................................................................... 59 4.2.2. Gestión de Datos ......................................................................... 59 4.3. Hadoop ............................................................................................. 60 4.3.1. HDFS............................................................................................ 61 Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 5 4.3.2. Ambari ......................................................................................... 61 4.3.3. Hive ............................................................................................. 62 4.4. Caso de Uso ....................................................................................... 63 4.4.1. Almacenar archivos CLEAN del Bloque Extracción .................. 64 4.4.2. Buscar entre archivos CLEAN (Extraer datos) .......................... 65 Capítulo 5: Análisis ........................................................................................ 67 5.1. Introducción ..................................................................................... 68 5.1.1. Caso de Estudio .......................................................................... 69 5.2. AlchemyAPI ...................................................................................... 69 5.3. Estructura y Descripción del Bloque ................................................. 71 5.3.1. Filtrar Datos y generar la llamada .............................................. 72 5.3.2. Uso de AlchemyAPI .................................................................... 73 5.3.3. Procesado de los datos ................................................................ 75 5.4. Resumen del Bloque ......................................................................... 76 Capítulo 6: Representación ........................................................................... 79 6.1. Introducción ..................................................................................... 80 6.1.1. Caso de Estudio .......................................................................... 81 6.2. JFreeChart ........................................................................................ 82 6.3. Estructura y Descripción del Bloque ................................................ 83 6.3.1. Filtrar Datos y Seleccionar Gráfica............................................. 84 6.3.2. Generación de Dataset–Chart .................................................... 85 6.3.3. Representación ........................................................................... 86 6.4. Resumen del Bloque ......................................................................... 88 Capítulo 7: Resultados .................................................................................... 91 7.1. Trazas ................................................................................................ 92 7.1.1. Bloque Extracción ....................................................................... 93 7.1.2. Bloque Análisis ........................................................................... 96 12 Índices Memoria Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 13 14 Introducción Capítulo 1: Introducción Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 15 1.1. Introducción Pocas frases tan sencillas resultan tan significativas como “El conocimiento es poder”[1]. Y, sin embargo, las posibilidades que abarca el conocimiento son infinitas. Desde el conocimiento de uno mismo hasta el conocimiento del resto del mundo, no hay aspecto de este que no permita obtener una ventaja significativa con respecto a quien carece de él. En esta Era de las Telecomunicaciones es posible obtener información con una facilidad que no se ha visto anteriormente en la historia de la humanidad. Las estadísticas no fallan: el uso de Internet a lo largo y ancho del planeta sólo crece, y crece a un ritmo increíble. Ya en 2014, la cantidad de personas con acceso a Internet superaba los tres billones de usuarios, y las personas con contratos de banda ancha para sus terminales móviles superaban los 3.4 billones[2], y en 2015, la estadística[3] indica que un 44% de la población mundial ya es internauta. La capacidad de generar datos por parte de Internet desemboca en una cantidad masiva de información potencial que navega en la Red, la cual puede ser canalizada mediante herramientas que transforman esos datos en conocimiento real. Por ejemplo, pulseras que analicen el ritmo cardíaco de las personas y permitan generar un esquema diario de su salud física, mediciones del clima utilizando millones de sensores repartidos por todo el mundo, mantener la temperatura de un acuario a un valor óptimo realizando análisis de datos en tiempo real... Sin contar con todas las operaciones que pueden realizarse mediante métodos electrónicos y que no requieran hardware o tarea humana. Los canales de generación de datos son, por tanto, extremadamente numerosos y muy ricos en información. Considerando, por tanto, el poder real que ofrece el conocimiento, es normal que empresas y gobiernos utilicen multitud de herramientas que permitan recabar dicho conocimiento de los datos disponibles, y en caso necesario, perfeccionar o personalizar las herramientas para su mayor beneficio. Sin embargo, realizar esta clase de algoritmos es bastante complejo por la increíble cantidad de datos a considerar. Para poder manipular tantos datos y obtener información de estos, es preciso recurrir a técnicas como la Minería de Datos[4]. La forma en la que 16 Introducción están estructurados los datos, el origen de estos, para qué se utilizarán... Todo ello cobra una especial relevancia. El objetivo final es obtener un conocimiento de calidad y que resulte efectivo; la cantidad de datos recabados o procesados no es realmente importante si no ayudan al objetivo final. La minería de datos permite encontrar patrones comunes en la información, los cuales sirven especialmente en negocios o empresas, como se está demostrando de forma espectacular en la actualidad, tanto en industria como en el sector servicios, y naturalmente en el Internet de las Cosas. El proceso más popular a la hora de realizar minería de datos es el conocido como CRISP–DM, el cual se puede resumir en los siguientes 6 pasos: 1. Entendimiento del Negocio – ¿Para qué va a utilizarse los datos? 2. Entendimiento de los Datos – ¿Qué son los datos? 3. Preparación de los Datos – ¿De qué forma se almacenan y analizan los datos? 4. Modelado – ¿Cómo se realiza la minería? 5. Evaluación – ¿Son los resultados correctos? 6. Despliegue – Ejecución de la minería de datos Por tanto, para realizar una minería de datos apropiada solo es necesario tener nociones de programación, así como una cierta idea de los datos con los que se trabajará y la idea que se quiere obtener de estos. No obstante, la minería de datos sigue suponiendo el manejo de una inmensa cantidad de información para ser utilizada en un tiempo razonable por un solo sistema. De ahí que sea necesario adentrarse en los conceptos de Big Data[5], y la manipulación de datos a escalas muchísimo mayores. Big Data es un novedoso concepto que toma como premisa el hecho que, efectivamente, el exceso de datos a procesar es un problema, aunque uno con solución. Bien sea aplicar distintos algoritmos de navegación a través de los datos (sacrificando detalle por velocidad de procesado), o el procesado paralelo con múltiples sistemas enlazados entre sí, la realidad es que es utilizado cada vez más por las increíbles ventajas que aporta con un coste sorprendentemente reducido. El hecho que las grandes multinacionales del planeta hayan mostrado su completa Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 17 aceptación y hayan ratificado sus ventajas no deja lugar a dudas de la importancia de considerar sus conceptos. Así mismo, dentro de Big Data se encuentran varias ramas, muy importantes, que versan sobre distintas formas de extraer los datos. Una que se tendrá muy en cuenta en este Proyecto de Fin de Carrera es la conocida como Análisis de Sentimiento[6]. Dentro del análisis de sentimiento se engloban una serie de algoritmos capaces de extraer si un término o un concepto provocan sentimientos positivos o negativos. También incluye la extracción de palabras clave de un texto, como los verbos o los sustantivos, e incluso analizar el idioma. 1.2. Objetivos del Proyecto El objetivo final de este Proyecto Fin de Carrera (Extractor y Comparador de Características para Establecimientos Turísticos empleando Análisis de Sentimientos con Big Data), o ECCETAS, es desarrollar un sistema que, utilizando el análisis de sentimiento como soporte de funcionamiento, permita recabar las características positivas o negativas de un establecimiento turístico (o varios) de forma gráfica, apoyándose en Big Data para el almacenamiento y gestión de los datos iniciales. A tal fin, será necesario cumplir los siguientes objetivos parciales: Ilustración 1 – Esquema del Análisis de Sentimiento 18 Introducción 1.2.1. Estudio del estado del arte. Considerando la gran variedad de las herramientas aptas para el caso práctico del extractor y comparador, se deberán buscar aquellas que ofrezcan una mejor funcionalidad, bien por su rapidez, su robustez o su flexibilidad. 1.2.2. Análisis y selección de herramientas especializadas. Dado que el presente proyecto tiene su núcleo en el análisis de sentimiento, será necesario considerarlo a la hora de realizar la selección de herramientas, también teniendo en mente las áreas de extracción y representación de datos. 1.2.3. Estudio, recolección y procesado de los datos disponibles en las redes sociales. Se estudiarán las páginas web de establecimientos turísticos con el fin de tomar ideas iniciales de cuál será la forma más apropiada de obtener el conjunto de datos. Ello dependerá también de las herramientas escogidas en el paso anterior. 1.2.4. Diseño del extractor y comparador. Disponiendo de una idea de la naturaleza de los datos y las herramientas apropiadas, se procederá a la generación del sistema completo, que enlace las herramientas entre sí para obtener el resultado final y permita un uso sencillo por parte del usuario. 1.2.5. Utilización del extractor y comparador y análisis de los resultados obtenidos. Disponiendo de los datos y el sistema completo, se procederá a la obtención de resultados fiables y su representación, de forma que se verifique la utilidad de todo el sistema. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 19 1.3. Metodología Desde un inicio, la metodología de diseño de este Proyecto Fin de Carrera ha pasado por esquematizar y sistematizar, buscando no obtener una única caja negra que resuelva todos los problemas, sino disponer de un sistema dinámico y adaptable, de forma que sea posible actualizar sus partes con nuevas herramientas o conceptos. A tal fin, el sistema general de Eccetas está dividido en 3 Bloques de Diseño:  Extracción, donde se recogen los datos y se adaptan para los siguientes bloques.  Análisis, donde se realiza el núcleo central del Proyecto y se obtienen resultados.  Representación, donde se sintetizan los resultados anteriores en gráficas sencillas. Por tanto, los pasos a realizar en el desarrollo son el diseño y creación de cada uno de los Bloques anteriormente mencionados, sin olvidar el enlace necesario con Big Data, que permitirá el almacenamiento y búsqueda de los datos iniciales del sistema. Considerando lo expuesto anteriormente, se decidió optar por un diseño secuencial en bloques, comenzando por el caso de la Extracción. Se consideraron algunas fuentes básicas de información, y a raíz de ello, se realizó la búsqueda de una herramienta que permitiera la extracción de dichas fuentes, encontrándose la que se expondrá más adelante. Así mismo, fue necesario sintetizar un código que permitiera una implementación de dicha herramienta, ya que por un lado era necesario automatizar la inyección de información, y por otro, almacenar correctamente los resultados de la herramienta. El sistema resultante permitía no solo el almacenamiento de los datos sino su inclusión en un sistema de Big Data cuya base de datos permitía el filtrado y selección de datos, tarea necesaria al ser unos archivos extremadamente extensos (la opción de realizar un histórico de los datos extraídos requiere la capacidad de manipular cantidades enormes de datos). 20 Introducción Disponiendo de esos datos iniciales, era necesario crear el núcleo del Bloque Análisis, por lo que se analizaron distintas opciones de herramientas de análisis de sentimiento hasta llegar a la herramienta elegida. Como en el caso anterior, era necesario generar un código que transformara los datos extraídos desde la base de datos al formato apropiado para la nueva herramienta, y otro código que recogiera los resultados y los almacenara de una forma práctica y legible por parte del usuario. Llegados a este punto, era necesario encontrar una última herramienta que hiciera el trabajo del Bloque Representación, y transformara los datos del Bloque Análisis en imágenes que aportaran una información de mucha mayor calidad, y que no hiciera necesario aprender a interpretar los datos para poder obtener conocimiento de estos. Obtenida la herramienta apropiada, fue necesario integrarla al sistema, generando un Bloque adaptable e independiente de gran parte del resto de elementos, que genera el resultado final del sistema Eccetas. Ilustración 2 – Descripción de Bloques de Diseño Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 21 1.4. Peticionario Actúa como peticionario de este proyecto la Escuela de Ingeniería de Telecomunicación y Electrónica (EITE), de la Universidad de las Palmas de Gran Canaria (ULPGC), siendo la realización de este Proyecto de Fin de Carrera requisito indispensable para la obtención del título de Ingeniero de Telecomunicación. 1.5. Estructura de la Memoria La memoria de este Proyecto Fin de Carrera está separada en 8 capítulos, los cuales se describen brevemente a continuación. Capítulo 1. Introducción: En este capítulo se explica por encima la premisa en la que se apoya el presente Proyecto de Fin de Carrera, indicando la importancia y el poder que provee el conocimiento, y cómo las tecnologías actuales requieren nuevos métodos para poder manipular cantidades tan grandes de este. Se expone la necesidad de utilizar técnicas de Minería de Datos, así como de Big Data, y la importancia que esta filosofía de diseño tendrá en el Proyecto. Así mismo, se habla del análisis de sentimiento, la piedra angular del Proyecto y lo que da potencial a este. Capítulo 2. Estado del Arte: Se indican todas las tecnologías utilizadas en este Proyecto de Fin de Carrera, separadas en función de los Capítulos que se podrán ver a continuación, así como un conjunto general de tecnologías empleadas en todo el sistema. Así mismo, se expone la justificación de por qué las herramientas presentadas han sido escogidas. Capítulo 3. Bloque Extracción: En este capítulo se exponen los criterios que se seguirán a la hora de tomar datos para el proyecto, asegurándose que tendrán una estructura útil y valor. Se indica, además, el caso particular para el que se utilizará este bloque, y se procede a presentar la herramienta Import.IO que permitirá obtener los datos. Así mismo, se acompañará del código que hace completo al bloque. 28 Estado del Arte Utilizar Big Data efectivamente requiere un claro entendimiento de lo que desee realizarse con estos datos; fundamentalmente se describen 3 pasos necesarios para obtener conocimiento al utilizar Big Data, que son los siguientes:  Idea: Disponer de datos no sirve de nada si no se tiene claro qué se desea hacer con ellos. La idea es el concepto más abstracto y difícil de obtener de los tres pasos. Por ejemplo, se puede disponer de una enorme red de sensores que midan la temperatura de un cierto mar. Un restaurante puede tener la idea de analizar dichas mediciones para saber cuándo es el momento ideal para comprar el marisco, que es cuando la temperatura es máxima, mientras que un barco investigador podría decidir no salir en busca de ciertas algas si detecta que el mal no propiciará su crecimiento a causa del cambio en su temperatura. En este Proyecto, la idea es generar conocimiento en base a los comentarios que envían los clientes de páginas web de viajes sobre los establecimientos que visitan.  Datos: Evidentemente, es necesario disponer de datos, si bien no toda clase de dato vale de la misma forma. Son apreciados los datos estructurados (logs de GPS, bases de datos, etc.), los cuales permiten ser procesados a una velocidad mucho mayor y por un número superior de herramientas, aunque es posible utilizar otras para tratar datos no estructurados, que son la mayoría. En esencia, disponer de un adecuado conjunto de datos es vital para el correcto desarrollo del proceso. En este Proyecto, los datos son los comentarios mencionados anteriormente, los cuales representan un esquema no estructurado de datos (de ahí que sea necesario recurrir a Minería de Datos, como se explicará más adelante).  Herramientas: Este es el concepto más abierto a cambios, y aquel en el que los desarrolladores han de emplear la mayoría de sus esfuerzos. Si bien hay una enorme cantidad de herramientas capaces de procesar datos de múltiples maneras, es necesario utilizar el conjunto apropiado de estas, realizando tanto el proceso de selección como el necesario trabajo para combinarlas en un programa sólido que permita hacer realidad la idea objetivo. En este Proyecto, el sistema resultante representa las herramientas. 2.2.3. JSON Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 29 JSON, el acrónimo de JavaScript Object Notation, es un formato de texto ligero para el intercambio de datos. Debido a ser una opción muy utilizada como alternativa a XML, se le considera un formato de lenguaje independiente, y se ha usado fundamentalmente en este Proyecto para almacenar la gran mayoría de los datos. El hecho de que JSON sea un formato tan extendido y empleado en numerosas herramientas (como las que se utilizan en este Proyecto, un motivo adicional para su adopción), hace que su uso resulte muy sencillo. Del mismo modo, su estructura de llaves y palabras clave permite una fácil adopción y una vinculación sencilla a Java mediante librerías especializadas. Finalmente, su capacidad para trabajar con documentos extremadamente grandes lo hace un candidato óptimo para almacenar las ingentes cantidades de datos que se recabarán a lo largo de este Proyecto. 2.2.4. CSV CSV, del inglés comma–separated values, indica a un tipo de documento en formato abierto sencillo, utilizado para representar datos en forma de tabla, donde las columnas se separan por comas (o por puntos y comas, donde la coma sea un separador decimal), y las filas por saltos de línea. Se ha utilizado en conjunto con JSON para almacenar datos en este Proyecto, fundamentalmente aquellos extraídos de las herramientas de Big Data. Este formato, extremadamente sencillo aunque no estandarizado, es propenso a generar errores si no se tienen en cuenta caracteres particulares como dobles comillas o saltos de línea, siendo relativamente sencillo provocar un error si no se tienen en cuenta estos aspectos. Este formato engloba, además, a otros formatos de valores separados por delimitadores, como espacios o saltos de línea, lo cual también puede dificultar su uso. Sin embargo, su uso en Hadoop, uno de los principales estandartes de Big Data, hace que sea necesario recurrir a él si se desean extraer datos mediante las especializadas y potentes herramientas del sector. Así mismo, su popularidad en otras áreas hace posible que existan librerías en formato abierto de Java que permiten su fácil manipulación en el sistema. 30 Estado del Arte 2.2.5. Servicio web Se define como servicio web a la tecnología que utiliza un conjunto de protocolos y estándares que permiten intercambiar datos entre aplicaciones, ampliamente utilizado en Internet al utilizar este estándares abiertos. Se utiliza en este Proyecto para transmitir las peticiones de extracción de datos y subsecuente análisis, a las herramientas apropiadas. La necesidad de interactuar entre clientes y servidores mediante aplicaciones web, resulta obvia teniendo en mente que métodos similares son los que permiten a entidades bancarias realizar transacciones por todo el mundo, así como a usuarios únicos comprar entradas de cine o realizar una compra de alimentos a través de la Red. Dado que los servicios web funcionan por encima de las plataformas sobre las que se instalen, fomentan los estándares y protocolos basados en texto y permiten que los servicios y el software ubicados en distintos lugares geográficos actúen como único, sus ventajas son muy importantes por encima de sus inconvenientes (Un menor rendimiento a otros modelos de computación distribuida al depender de un formato basado en texto, hay otros estándares abiertos de computación distribuida mucho más desarrollados, etc). Este concepto, por tanto, será muy útil en la aplicación de este Proyecto Fin de Carrera, ya que es necesario acceder a varios servicios con el fin de obtener el resultado final. Incluso, como se indicará en capítulos posteriores, convertir todo este sistema en un servicio web sería una opción más que razonable. 2.3. Extracción 2.3.1. Minería de Datos La minería de datos[10] es un campo interdisciplinar de las ciencias de la estadística y de la computación que define al proceso que intenta descubrir patrones en grandes volúmenes de conjuntos de datos. Utilizando métodos interconectados de inteligencia artificial, aprendizaje de máquinas, estadística y Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 31 bases de datos, persigue extraer información de un conjunto de datos y transformarla en una estructura comprensible para su uso posterior. Además de las ramas mencionadas anteriormente, la minería tiene otros aspectos secundarios a considerar:  Bases de datos y manejo de bases de datos – Trabajar con enormes cantidades de datos supondrá, necesariamente, disponerlos de alguna forma. Para ello, será necesario crear una base de datos y manipularla apropiadamente.  Procesado de datos.  Consideraciones de modelos estadísticos y estadística inferencial – Será necesario realizar aproximaciones estadísticas para poder analizar los datos.  Métricas de interés – Resultará interesante obtener según qué resultados del análisis realizado.  Consideraciones de complejidad computacional – De cara a trabajar con cantidades de datos extremadamente densos o complejos, la propia capacidad computacional será un aspecto a considerar, así como las mejores formas de resolver las operaciones. Ilustración 3 – Representación de la Minería de Datos 32 Estado del Arte  Postprocesado de estructuras descubiertas.  Visualización.  Actualización online. En términos generales, hay tres clases de resultados que se pueden obtener del análisis automático o semiautomático de grandes cantidades de datos:  Grupos de registros de datos, que desembocan en análisis de grupos (Agrupar un conjunto de objetos de forma que los miembros del mismo grupo sean más similares)  Grupos de registros inusuales, que desembocan en detector de anomalías (Identificar registros que no se adaptan al patrón establecido o esperado)  Grupo de dependencias, que desembocan en reglas de asociación (Encontrar hechos que ocurren en común dentro de un determinado conjunto de datos) Se pueden ilustrar estos conceptos con un ejemplo, si se toma una base de datos de GPS de camiones a lo largo de un país, que disponga de los datos básicos como el identificador del vehículo, la carga, el conductor, el consumo de combustible, y las fechas y horas de viaje:  El análisis de grupos permitiría agrupar a los conductores más eficientes, o detectar aquellos camiones que podrían necesitar una revisión en función del consumo de gasolina relacionado con su distancia.  El detector de anomalías permitiría localizar a aquellos conductores que destacan de forma negativa o positiva en su trabajo.  Las reglas de asociación podrían indicar qué rutas suelen ser más efectivas en función de las horas a las que se realizan, o bien en función de las fechas. Por tanto, la minería de datos resulta una piedra angular en este proyecto, y una increíble rama multidisciplinar, que deberá requerir de una herramienta capaz de realizar la mayoría, sino todos los pasos mencionados anteriormente. Ante lo cual, además del código Java que será necesario, se utilizará la herramienta que se presenta a continuación. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 33 2.3.2. Import.IO Import.IO[11] es una potente herramienta que permite extraer información ordenada de páginas web, mediante la técnica conocida como web scraping. Esta se basa en analizar la estructura HTML de la página web en cuestión, aprendiendo así su estructura, para después poder tomar de esta los datos seleccionados. En este Proyecto Fin de Carrera, es la principal herramienta de extracción de datos. Una de sus principales ventajas es su funcionalidad; se basa en una interfaz que analiza automáticamente las estructuras de las páginas web y ofrece en una forma de tabla todos los datos posibles, de forma que no es necesario generar código alguno para su uso apropiado. Así mismo, es posible llamar a esta herramienta desde Java, ya que dispone de una API basada en REST, lo que permite una fácil implementación. Su potencial y una definición más completa se expondrá en el capítulo Extracción del presente Proyecto. 2.4. Análisis de Sentimiento 2.4.1. Procesamiento de Lenguajes Naturales (PLN) El procesamiento de lenguajes naturales es un campo de las ciencias de la computación, inteligencia artificial y lingüística que estudia las interacciones entre las computadoras y el lenguaje humano. El PLN se ocupa de la formulación e investigación de mecanismos eficaces computacionalmente para la comunicación entre personas y máquinas por medio de lenguajes naturales (esto es, lenguajes cuyo único propósito es la comunicación, a diferencia de lenguajes de programación, lógica matemática, etc). El PLN trata de diseñar mecanismos para comunicarse que sean eficaces computacionalmente. Hasta la década de 1980, la mayoría de los sistemas de PLN se basaban en un complejo conjunto de reglas diseñadas a mano. A partir de finales de 1980, gracias a la mejora de la capacidad computacional de los ordenadores, hubo una revolución en PLN con la introducción de algoritmos de aprendizaje automático para el procesamiento del lenguaje. 34 Estado del Arte Es necesario considerar la dificultad que entraña el procesamiento de los lenguajes naturales:  A nivel léxico, una misma palabra puede tener varios significados, y la selección del apropiado se debe deducir a partir del contexto oracional o conocimiento básico. Muchas investigaciones en el campo del procesamiento de lenguajes naturales han estudiado métodos de resolver las ambigüedades léxicas mediante diccionarios, gramáticas, bases de conocimiento y correlaciones estadísticas.  A nivel referencial, la resolución de anáforas y catáforas implica determinar la entidad lingüística previa o posterior a que hacen referencia.  A nivel estructural, se requiere de la semántica para entender la dependencia de los sintagmas preposicionales que conducen a la construcción de distintos árboles sintácticos. Por ejemplo, en la frase “rompió el dibujo de un ataque de nervios”.  A nivel pragmático, una oración, a menudo, no significa lo que realmente se está diciendo. Elementos tales como la ironía tienen un papel importante en la interpretación del mensaje. Para resolver estos tipos de ambigüedades y otros, el problema central en el PLN es la traducción de entradas en lenguaje natural a una representación interna sin ambigüedad, como árboles de análisis. 2.4.2. Análisis de Sentimiento El Análisis de Sentimiento, también conocido como Minería de Opiniones, combina el uso del procesamiento de lenguajes naturales anteriormente indicado, el análisis de texto y la lingüística computacional para identificar y extraer información subjetiva de una fuente en concreto. En términos generales, permite determinar la actitud de una fuente respecto a un elemento concreto, o su polaridad completa. En este Proyecto, se utilizará este concepto con los datos recogidos por el bloque anterior para obtener valoraciones sobre las características de los establecimientos, en base a una metodología que se explicará más adelante. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 35 Debido a la complejidad y a la magnitud de opciones que el análisis de sentimientos puede generar, se define una serie de tipos en función de los resultados que obtendrán:  Polaridad – Definir la polaridad de un cierto texto de un documento, frase, o elemento, bien sea positiva, neutral o negativa. En esta rama se puede dar además un análisis más profundo, donde los resultados son sentimientos como “feliz” o “triste”.  Gradual – Utilizar un sistema de valoraciones, donde las palabras comúnmente asociadas a sentimientos neutrales, positivos o negativos se les fija un valor de una escala de –10 a +10 (mayor negativo a mayor positivo). De esta forma, se puede ajustar el sentimiento de un cierto elemento considerando su entorno, habitualmente la sentencia en la que se encuentre. De esta forma, es posible acumular los resultados y obtener una valoración general de todo un texto y su sentimiento, en lugar de simplemente obtener la polaridad de este.  Identificación subjetivo/objetivo – Clasificar un texto, habitualmente una sola frase, en objetiva o subjetiva. Esta clasificación suele ser más compleja que la clasificación de polaridad, ya que la subjetividad de las palabras y las frases pueden depender de su contexto, y un documento objetivo puede contener frases subjetivas como citas.  Característica–aspecto – Determinar la opinión o sentimiento basado en las características o aspectos de entidades, como pueden ser teléfonos móviles, coches o zapatos. Una característica o aspecto es un atributo o componente de una entidad, como puede ser la pantalla de un teléfono o las ruedas de un coche. La ventaja de este tipo de análisis es que permite extraer características sobre objetos de interés, las cuales varían naturalmente entre sí (un teléfono puede tener una batería mala, pero una buena pantalla). Este tipo requiere tratar varios subproblemas, como detectar las entidades relevantes, sus características, y analizar si la opinión es positiva, negativa o neutral. Este tipo es el que se usará en el presente Proyecto Fin de Carrera, ya que aporta exactamente los resultados que se desea obtener. 36 Estado del Arte En cuanto a los métodos, existen fundamentalmente tres[12] categorías en las que pueden agruparse:  Técnicas ‘Knowledge–based’ – Clasifican texto en categorías, en función de que contenga palabras inequívocas como “feliz”, “aburrido”, “tristeza”, “miedo”, etc… Las cuales están almacenadas en listas. Algunas de estas técnicas amplían sus listas, añadiendo además de las palabras obvias otras con una “afinidad” a emociones en particular.  Métodos estadísticos – Se basan en elementos de aprendizaje de máquinas como el análisis de semántica latente, máquinas de vectores de soporte, y “bolsa de palabras”, entre otros.  Aproximaciones híbridas – Se apoyan tanto en aprendizaje de máquinas como elementos de representación del conocimiento (un área de la IA que facilita la inferencia), como pueden ser ontologías o redes semánticas para detectar semántica sutil, que no podría resolverse directamente. Queda claro por tanto que el análisis de sentimiento está íntimamente ligado a la capacidad de las máquinas para interpretar e identificar la subjetividad del ser humano, y para poder ejecutar dicha capacidad, es requisito indispensable acudir a software y hardware especializado para ello. Aprendizaje de máquinas, análisis estadístico, procesamiento de texto natural… Hay que considerar, además, que es posible ejecutar análisis de sentimiento en contenido visual, lo cual agrega toda una capa de complejidad al proceso. Finalmente, hay que considerar la efectividad de estos sistemas. En general, una máquina efectuará un apropiado análisis cuanto más se parezca al juicio humano. En términos generales, este juicio humano (cómo de acuerdo están las personas entre sí) suele ser de un 79%[13], por lo que un programa que alcance un 70% de efectividad puede ser considerado como exitoso, ya que el factor subjetivo y humano a la hora de tomar decisiones hace que un 100% sea absolutamente imposible, incluso para un analista humano. Por tanto, la evaluación del sistema siempre será un asunto complejo, regularmente quedando en manos de correlaciones y ajustes estadísticos. En este Proyecto, se hará esa misma consideración, precisando obtener un cierto número de valoraciones antes de ofrecer resultado alguno. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 37 2.4.3. AlchemyAPI AlchemyAPI forma parte del servicio AlchemyLanguage[14], una colección de analizadores de texto que obtienen información semántica de las fuentes analizadas. AlchemyAPI, en particular, trabaja con el procesamiento de lenguajes naturales, de forma que con recibir un texto, una estructura html, o una url pública, será posible ofrecer un análisis del contenido de alta calidad, incluyendo incluso la detección de entidades o palabras clave. Este último punto, el de las palabras clave, será especialmente relevante en este Proyecto Fin de Carrera. AlchemyAPI es capaz de extraer las palabras relevantes de un texto, y al mismo tiempo, realizar el análisis de sentimiento, otorgando a cada palabra clave una polaridad (neutral–positivo–negativo) junto a su porcentaje relativo. Esto será absolutamente indispensable para el correcto procesado del sistema, aunque los resultados no son perfectos y será necesario realizar ajustes y filtrados apropiados. Entre otras características, AlchemyAPI dispone de varios SDK gratuitos disponibles, que permiten vincular fácilmente la herramienta con cualquier código que se genere. Un análisis más detallado de su funcionalidad se expondrá en su correspondiente capítulo. 2.5. Representación Tras los bloques anteriormente mencionados, se llega a la siguiente situación:  El proceso genera muchos datos parciales, complejos de utilizar.  El resultado final genera unos datos que, si bien correctos, son enormemente extensos y complejos de analizar.  Es necesario disponer de conocimientos técnicos para el correcto aprovechamiento de los datos. Dado que se desea que el resultado de este sistema sea sencillo, fácilmente comprensible y que no requiere conocimiento previo alguno, será necesario 44 Extracción 3.2. Import.IO Esta es la principal herramienta utilizada por el Bloque Extracción de Eccetas. Permite analizar páginas web y obtener datos de estas en función de parámetros indicados por el usuario. Import.IO permite realizar web scraping, esto es, es capaz de recopilar información de forma automática de Internet, analizando la estructura de las páginas indicadas y extrayendo de ellas los datos solicitados. Esta es una práctica cada vez más utilizada por la gran cantidad de información útil que puede obtenerse en un corto espacio de tiempo, aunque requiere de un correcto modo de funcionamiento (habitualmente, esperando un cierto tiempo antes de volver a solicitar un nuevo resultado, logrando así que los servidores web no consideren al sistema responsable del web scraping como un ataque de saturación de servicio). Import.IO se ejecuta mediante un servicio Web, disponiendo a su vez de una API REST para sus llamadas mediante solicitudes, siendo esta la forma en la que se utilizará en este Bloque. Si bien en versiones anteriores contaba con hasta 4 tipos distintos de scripts, actualmente solo posee uno, el Extractor, cuya interfaz puede verse en la Ilustración 7. Este script es capaz de extraer los datos que hayan sido indicados por el usuario en uno o múltiples direcciones URL. Dicha extracción será posible por la interfaz de entrenamiento que ofrece Import.IO a la hora de construir el Extractor. La limitación de este script es la necesidad de disponer de las URL previamente a su uso, ya que si bien posee un generador de URLS bastante potente, no es posible acceder a él mediante llamada a su API. Por tanto, será necesario que en este sistema, mediante código, se indiquen las URL de las páginas a visitar. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 45 A la hora de crear un Extractor, se realizarán los pasos siguientes: 1. Tomar una página web como ejemplo. El script solo funcionará con páginas web que cumplan la estructura de la página seleccionada. 2. La herramienta cargará la página web, generando una interfaz sobre esta y tomará unos datos iniciales que la propia herramienta considera útiles para definir el modelo de extracción de datos. Así mismo, permitirá al usuario seleccionar qué datos quiere extraer, y de qué tipo (texto, número, enlaces html, imágenes, etc.…). 3. La herramienta es inteligente, por lo que seleccionará, por ejemplo, todos los elementos de una lista si se ha tomado uno ya, entendiendo que el usuario desea tomar todos los datos similares. 4. Finalizado el proceso, se guardará el script, quedando disponible para su uso con cualquier página web que cumpla la estructura de la página de ejemplo. Ilustración 7 – Ejemplo de Extractor 46 Extracción Llegados a este punto, puede verse claramente que realizar el entrenamiento inicial, introducir las direcciones de origen, y ejecutar el sistema, puede resultar tedioso o complejo, especialmente si es necesario ejecutar múltiples scripts a la vez. Por ello, además de los scripts de Import.IO a ejecutar, será necesario generar código que llame a los script de Import.IO que sean necesarios. Habiendo obtenido los datos deseados, habitualmente presentados en un fichero JSON, se verá que, en etapas posteriores de este Bloque, no son procesables directamente, por lo que será necesario generar código que permita tomar estos datos y formatearlos de forma que el sistema pueda utilizarlos cómodamente. 3.3. Estructura y Descripción del Bloque Siguiendo las explicaciones anteriores, el Bloque Extracción estará formado por los siguientes subbloques:  Generación de los scripts de Import.IO que sean necesarios.  Código Java para generar la llamada a los scripts creados anteriormente.  Uso de los scripts de Import.IO y almacenamiento de datos en crudo.  Código Java para procesar los datos y formatearlos convenientemente. La limitación principal de este Bloque será, por tanto, el origen de los datos de entrada, que obligarán a crear scripts determinados de Import.IO por cada modelo existente, los cuales a su vez dependerán de un código de ejecución y procesado adaptado. Sin embargo, el concepto general se mantiene y el sistema será igual en cualquier modelo utilizado. Ilustración 8 – Estructura del Bloque Extracción Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 47 Así mismo, se hará la siguiente consideración a la hora de recabar los datos, de forma que habrá dos tipos de extracción posibles:  Caso Específico – El usuario desea la información de un solo establecimiento.  Caso General – El usuario desea la información de todos los establecimientos disponibles de un área determinada, como un país, y en un idioma en concreto. Por defecto, se tomará España como país. 3.3.1. Generación de scripts de Import.IO Para obtener los resultados deseados, será necesario realizar un script que recoja los datos apropiados de las páginas web que serán la fuente de información. Debido a que los script dependerán en gran medida de la fuente de información, estos serán únicos y utilizables solo en esas fuentes de información en concreto. En este Proyecto Fin de Carrera, con la fuente de datos escogida, será necesario ver que un Extractor no será capaz de extraer la información de contacto del establecimiento (país, dirección, nombre) a la vez que la información crítica (comentario, fecha, valoración general, etc.), por lo que será necesario utilizar al menos dos, como se ve en la Ilustración 9. Con el Caso General mencionado anteriormente, además, será necesario generar otro script para indicar al sistema el número de establecimientos que se obtendrán. Esto se explicará con mayor detalle en el siguiente subbloque. 48 Extracción A continuación, se presentan los Extractores realizados para este Proyecto: 3.3.1.1 Extractor: Main. El script central del Bloque Extracción, utilizará los enlaces proporcionados para extraer todos los datos críticos indicados en la interfaz de Import.IO, como:  Nombre del autor  Fecha  Número de comentarios  Valoración general  Comentario (Negativo y positivo, en este caso)  Detalles  Etc. Para poder ser ejecutado, este Extractor necesitará los siguientes datos:  Enlace del establecimiento a visitar. Ilustración 9 – Ejemplo de datos de contacto y datos críticos Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 49  Número de páginas a visitar (Profundidad) – Dado que el sistema funciona con solo una página por vez, será necesario indicar al Extractor que hay más páginas a visitar. En el caso que se ocupa, por ejemplo, cada página ofrece 75 comentarios. Si el establecimiento tiene 750 comentarios, será necesario indicar una Profundidad de 10.  Nombre del establecimiento. Con los datos correctos, el sistema recibirá los resultados de los servidores de Import.IO, y los almacenará directamente en un archivo (denominado como RAW, al ser los datos directos), asegurando así que, en caso de existir algún error, se podrá rescatar la mayor cantidad de información posible. Sin embargo, estos datos almacenados poseen una estructura, como puede verse en la Ilustración 10, que no resulta apropiada para su uso directo, por lo que será modificada en el subbloque final. {"Fecha":[{"text":"8 November 2016"}],"Nombre":[{"text":"Johann74"}],"Pais":[{"text":"Germany"}],"Comentarios":[ {"text":"22"}],"Valoracion":[{"text":"8.8"}],"Detalles":[{"text":"• Leisure trip"},{"text":"• Family"},{"text":"• 2 rooms"},{"text":"• Stayed 1 night"}],"Texto_neg":[{"text":"The parking is too far The double bed is too small"}],"Texto_pos":[{"text":"Very good position, right in the center, the rooms are ok (we had 3 rooms), nice staff, good WIFI, breakfast ok for 3 stars"}]},{"Fecha":[{"text":"7 November 2016"}],"Nombre":[{"text":"Theofanis"}],"Pais":[{"text":"Belgium"}],"Comentarios":[{ "text":"2"}],"Valoracion":[{"text":"8.3"}],"Detalles":[{"text":"• Leisure trip"},{"text":"• Couple"},{"text":"• Double or Twin Room"},{"text":"• Stayed 2 nights"}],"Texto_neg":[{"text":"The room and the bed were small so I wouldn't choose it for more than two nights but the value for money comparing to other options in Madrid is very good."}],"Texto_pos":[{"text":"Good location and very friendly staff. Clean etc., with very good breakfast. Shoe shine sponge came in very handy."}]} Ilustración 10 – Elemento de Fichero RAW 50 Extracción 3.3.1.2 Extractor: ECA Este Extractor tiene la tarea de obtener los datos de contacto del establecimiento, que el Extractor Main no puede obtener:  Nombre del Establecimiento  País del Establecimiento  Dirección del Establecimiento Si bien es más sencillo de ejecutar y solo requiere el enlace del establecimiento, no tiene utilidad sin vincularlo al resto de los datos extraídos por el Extractor anterior, lo cual hace más compleja su implantación en el código de procesado. 3.3.1.3 Extractor: Obtener Número Límite. Utilizado en el Caso General, donde se requiere el número total de establecimientos que se extraerán a la vez. En el caso de estudio, este Extractor tiene como tarea obtener el número exacto de establecimientos turísticos existentes en España. Para ser utilizado, requiere del enlace apropiado con el país en cuestión del que se desee obtener datos. En este Proyecto Fin de Carrera, el enlace es el de España, pudiendo elegirse entre español, inglés o alemán como idiomas de extracción de datos. Ilustración 11 – Ejemplo del número máximo de establecimientos en Booking Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 51 3.3.1.4 Extractor: Obtener Enlaces Establecimientos. Este script, utilizado solamente en el Caso General, utilizará el valor obtenido por el Extractor anterior para generar el número apropiado de peticiones a la página web para recopilar los enlaces web donde se encuentran los comentarios, indicados por las flechas en la Ilustración 12. En el Caso de Estudio, los establecimientos se encuentran agrupados en un cierto número de enlaces por página, siendo necesario extraer todos y cada uno de esos enlaces. 3.3.2. Generar llamadas a Import.IO Ilustración 12 – Indicación de la posición de los enlaces web de comentarios Ilustración 13 – Representación del bloque de generación de llamada a Import.IO 52 Extracción Habiendo ya considerado las fuentes de entrada, y disponiendo de los scripts mencionados anteriormente, se estará en disposición de generar el código representado por la Ilustración 13, cuyas funciones principales serán las siguientes: 1. Gestiona el proceso principal. Recoge los datos de entrada, en función del caso que vaya a realizarse (General o Específico), y ejecuta los Extractores Main y ECA. Requiere que el usuario indique la URL y el nombre del establecimiento si es en un caso individual, o las siglas del idioma si es un caso general. En cualquiera de los dos casos, también será necesario proveer de la Profundidad mencionada anteriormente. 2. Genera el archivo ECA, en función de la opción escogida previamente. Si es el Caso General, el archivo dispondrá de una serie de objetos JSON con los tres valores mencionados anteriormente. Si es Específico, solo será un objeto. 3. En caso que se haya tomado la opción General, será necesario llamar a los otros Extractores mencionados anteriormente, los cuales generarán sus ficheros resultantes, antes de ofrecer a los Extractores Main y ECA la lista de enlaces correspondientes. Como se ha comentado previamente, la ejecución del Extractor dependerá del caso que se tome. A continuación, se exponen ambos casos y sus representaciones: 3.3.2.1 Caso General Se solicita a Import.IO extraer todos los datos de los establecimientos del país indicado (por defecto, España), y en el idioma seleccionado (por defecto, español, alemán o inglés). 1. Se ejecuta el Extractor Obtener Número Límite, proveyendo al sistema del número de establecimientos a extraer. 2. Se ejecuta el Extractor Obtener Enlaces Establecimientos, que aprovechará el resultado anterior para generar la lista de URLs para el resto del sistema. En este punto, dado que es habitual que se produzcan errores, el sistema se ha Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 53 configurado para repetirse un cierto número de veces con los casos erróneos, con el fin de obtener el mayor número de enlaces posible. 3. Se ejecutan los Extractores Main y ECA tantas veces como se haya designado por la variable Profundidad, y se repetirá el bucle hasta agotar la lista de enlaces generada. 3.3.2.2 Caso Específico En esta opción, el usuario solicita al sistema los datos de contacto del establecimiento del que se va a extraer información, por lo que simplemente se ejecuta el Extractor ECA una vez, y tantas veces el Main como se haya indicado por la variable Profundidad. 3.3.3. Procesar y Formatear los Datos. Como pudo verse en la definición de los Extractores principales, si bien los resultados del script poseen una cierta estructura, no es una estructura útil, ni Ilustración 14 – Ejemplo de llamada de Caso General Ilustración 15 – Ejemplo de llamada de Caso Específico 60 Almacenamiento Disponiendo de los datos almacenados, será necesario poder trabajar sobre estos en un tiempo y a una velocidad razonable. A tal fin, existen herramientas que permiten modificar, cargar o suprimir grandes cantidades de datos en un tiempo aceptable y asegurando una ejecución efectiva y sin errores. Particularmente, se hará necesario disponer de una herramienta que permita filtrar y seleccionar datos, bien basándose en algún atributo en concreto o premisa impuesta por el usuario, y a tal fin, se empleará el conjunto de herramientas Hadoop[16] (Particularmente, la herramienta Apache Hive), el cual se definirá a continuación. 4.3. Hadoop Hadoop es una de las respuestas posibles a la siguiente cuestión: ¿Cómo es posible trabajar con un petabyte de información? Ante esta pregunta, se exponen una serie de opciones:  Utilizar muchos discos duros todos a la vez.  Aplicando redundancia, ya que los discos duros tienden a fallar.  Utilizar muchos núcleos de CPU todos a la vez.  Aplicando reintentos, ya que los errores en la red tienden a sucederse. ¿Qué proporciona, por tanto, Hadoop?  Escalabilidad – Muchos servidores con muchos núcleos y discos duros.  Fiabilidad – Detecta errores, y almacena de forma redundante.  Resistente a fallos – Auto–reintento, reparación de datos.  Simpleza – Se usan muchos servidores como si fueran un solo gran ordenador. Por tanto, en términos lógicos, Hadoop es un clúster de ordenadores que proporciona una capa de almacenamiento, y otra capa de ejecución. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 61 Como uno de los principales framework de software que existen para Big Data, Hadoop es una de las piedras angulares del manejo de datos, permitiendo a las aplicaciones trabajar con miles de nodos y una gigantesca cantidad de datos. Originariamente inspirado en Google y su computación, es un proyecto de alto nivel Apache, construido por una comunidad global de contribuyentes, haciéndolo un claro ejemplo del potencial del software libre. Realizado en Java, el uso de Hadoop es masivo en todo el mundo, con numerosos casos de uso, así como eventos y cursos, que lo posicionan como un framework actual y en constante desarrollo, útil tanto para iniciados como para veteranos. 4.3.1. HDFS Hadoop Distributed File System[17], o HDFS, es principalmente la capa de almacenamiento de Hadoop. Su funcionamiento, por encima del sistema operativo sobre el que ejecute, se basa en bloques de tamaño fijo, regularmente de 64 megabytes. Estos bloques, basados en el formato “write once, read multiple times”, son además replicados hasta 3 veces a la hora de ser utilizados por alguna tarea. Si no se obtiene el mismo resultado las 3 veces, se descartarán y se volverá a empezar. De esta forma se asegura la fiabilidad. 4.3.2. Ambari Ilustración 20 – Pantalla principal de Ambari 62 Almacenamiento Ambari es un gestor de plataformas, escrito en código abierto, utilizado para el mantenimiento, monitorización, seguridad y aprovisionamiento de los clústeres de Hadoop. En esencia, remueve muchas de las dificultades que emanan de operar con Hadoop. Como parte del Hortonworks Data Platform[18], facilita la instalación y configuración del HDP, tanto en su versión REST API como por su Interfaz Web, lo cual permite:  Facilidad para configuración, instalación y mantenimiento.  Configuración de seguridad centralizada.  Visibilidad del estado del clúster.  Altamente customizable y ampliable. 4.3.3. Hive El estándar de facto para las peticiones SQL en Hadoop, Hive[19] permite procesar petabytes de datos en un tiempo y forma aceptables. Dado que Hadoop fue construido para almacenar y organizar masivas cantidades de datos de todas las formas, tamaños y formatos, Hive debe ser capaz de procesar, resumir, explorar y analizar dichos datos, para después transformarlos en conocimiento útil. Todo ello puede resumirse en cuatro características:  Familiar – Hacer llamadas a datos con un lenguaje basado en SQL. El formato que puede verse en la Ilustración 21 es relativamente común al empleado con SQL.  Rápido – Tiempos de respuesta interactivos, incluso con cantidades de datos colosales.  Escalable y extensible – En función de los datos y de su tamaño, el sistema puede ofrecer una mayor capacidad y respuesta.  Compatible – Funciona con la integración tradicional de datos y las herramientas de análisis de estos. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 63 Las tablas de Hive son similares a las tablas en las bases de datos relacionales. Las bases de datos se comprimen en tablas, que están hechas de particiones. Es posible acceder a los datos por un lenguaje de peticiones sencillo, y Hive soporta sobreescribir o añadir datos al final. Finalmente, Hive soporta todos los formatos primitivos de datos como BIGINT, BINARY, BOOLEAN, CHAR, DECIMAL, DOUBLE, FLOAT, INT, SMALLINT, STRING, TIMESTAMP, and TINYINT. Además, se pueden crear tipos más complejos de datos como estructuras, mapas y arrays. 4.4. Caso de Uso Para poder utilizar los archivos resultantes del Bloque Extracción, ha sido necesario utilizar una serie de librerías[20] para que Hive sea capaz de parsear apropiadamente los ficheros que se le han suministrado. A tal fin, será necesario utilizar una librería para JSON, y otra para CSV, las cuales han sido incluidas en el entorno Hadoop. Ilustración 21 – Editor de peticiones de Hive 64 Almacenamiento 4.4.1. Almacenar archivos CLEAN del Bloque Extracción En el Caso General del Bloque Extracción, o en algunos resultados del Caso Específico, se cuentan con miles o decenas de miles de elementos como el mostrado en la Ilustración 22. Es posible almacenarlos de forma segura en Hive, como una sucesión de JSONs, el cual cumplen los ficheros CLEAN. Por ello, solo será necesario crear la tabla con una petición tan simple como: Ilustración 22 – Elemento DataIO de un fichero CLEAN CREATE TABLE eccetas_EXAMPLE ( nombre_establecimiento string, estrellas string, ubicacion string, pais_establecimiento string, nombre string, pais string, comentarios string, fecha string, detalles string, valoracion string, texto_neg string, texto_pos string ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS TEXTFILE; Ilustración 23 – Petición SQL para almacenar ficheros CLEAN Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 65 4.4.2. Buscar entre archivos CLEAN (Extraer datos) Habiendo almacenado los datos como se ha visto previamente, también es posible navegar entre estos con cierta facilidad. Bastará con escoger un criterio para el filtrado de los datos, como por ejemplo: Esta sentencia obtendría 100 resultados de toda la tabla anterior, cuyo código postal sea el 35007, perteneciente a la ciudad de Las Palmas, y como requerimiento, que el usuario habrá debido de haber escrito más de 1 comentario en la web. La cantidad de criterios y resultados es muy alta, y el sistema es altamente flexible en ese aspecto. Utilizar Hive permite que navegar entre bases de datos extremadamente densas sea una tarea relativamente sencilla si se tiene un conocimiento de bases de datos SQL básico. Select * from eccetas_EXAMPLE where ubicación RLIKE “35007” and comentarios > “1.0” limit 100; Ilustración 24 – Petición de búsqueda de resultados en Hive 66 Almacenamiento Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 67 Capítulo 5: Análisis 68 Análisis 5.1. Introducción Una vez obtenidos los datos sobre los que se debe trabajar, resulta claro que el siguiente paso es el procesado de estos. En el presente Proyecto Fin de Carrera, se les aplicará análisis de sentimiento. Esto es, es posible extraer la opinión o la valoración de los diversos datos de los que se disponen, utilizando para ello herramientas capaces de procesar el lenguaje natural, de forma que es posible analizar una gran cantidad de texto de forma automática. No obstante, la propia subjetividad de los datos con los que se trabajan hace que el resultado de este bloque no pueda tomarse de forma completamente objetiva. Por ello, será necesario realizar las siguientes consideraciones:  Efectividad – Se considerará que un resultado del análisis de sentimiento es efectivo cuando este se repita de forma consistente, considerando los datos que se disponen.  Idioma – Por la gramática de las palabras y las limitaciones de las herramientas de procesamiento de texto, será necesario separar claramente los datos en función de su idioma, para no provocar errores en los resultados. En esencia, será necesario considerar la subjetividad de los datos de entrada y de las operaciones de análisis, y obtener con ellos medidores de certeza, que permitan dar valor a los resultados finales. Ilustración 25 – Eccetas: Bloque Análisis Ilustración 26 – Resumen General del Bloque Análisis Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 69 5.1.1. Caso de Estudio El caso de estudio que se muestra a continuación para especificar y clarificar lo expuesto anteriormente presenta las siguientes características:  Los datos de entrada al Bloque son comentarios en texto plano, almacenados bien en una BD de un entorno Hadoop como se ha indicado en el Bloque Almacenamiento, en formato CSV, o directamente generados por el Bloque Extracción, en formato JSON.  De cara al Bloque Representación, será adecuado agrupar el resultado del análisis de sentimiento con la fecha correspondiente al comentario.  Debido a las limitaciones de la herramienta de análisis de sentimiento, solo podrán usarse los textos en lenguaje Inglés. Considerados estos hechos, será necesario disponer de una herramienta que realice el análisis de sentimiento y cuyos resultados, aun siendo subjetivos en su origen, puedan llegar a ser objetivos en base a todo el proceso realizado. Así mismo será necesario generar un código que de soporte a dicha herramienta, tanto para recibir los datos como para generar los resultados estructurados. 5.2. AlchemyAPI AlchemyAPI es más que una herramienta; es una colección de scripts que permiten obtener una gran y variada cantidad de resultados de procesado de lenguaje, desde el sentimiento del texto hasta las palabras clave de este, pasando por el idioma o las entidades. Solo hay que aportar al script los datos que se desee analizar, y especificar el tipo de resultado que se desea obtener. Ilustración 27 – Esquema del Caso de Estudio del Bloque Análisis 76 Análisis los valores ya existentes), y crear nuevas SentimentDataRow al encontrar Keywords nuevas. 2. Analizar las Keywords mediante un método de análisis por diccionario[21] para retirar adjetivos y otros elementos que impidan una agrupación apropiada de las Keywords, en caso de que encuentre que la Keyword en particular sea un término compuesto y no una sola palabra. Lo mismo se aplica con los términos plurales.  El análisis de diccionario mencionado aprovecha el hecho de que es necesario trabajar en el lenguaje inglés para realizar un análisis con una librería que tras analizar el texto, le agrega etiquetas (“tags”) en función de si es un sustantivo, un adjetivo, un verbo... De forma que como se expuso anteriormente, “small bed”, “great bed” y “comfy bed” pueden unirse en un solo SentimentDataRow “bed”.  Idealmente, también resulta interesante combinar términos plurales como “rooms” en “room”. 3. Una vez generadas todas las SentimentDataRow, calcular el número de opiniones negativas, positivas y neutras, y almacenar los resultados en los atributos del SentimentDataRow correspondiente. 4. Finalmente, el archivo DATA que contiene todas las SentimentDataRow estará organizado por el nombre de los elementos y el atributo Quantity de dichos objetos, primando este último criterio. 5.4. Resumen del Bloque Siendo todos los Bloques de este Proyecto Fin de Carrera necesarios para el correcto desarrollo, este resulta ser el centro y núcleo, ofreciendo datos que podrían considerarse finales, y ofreciendo conocimiento si se compara con los datos obtenidos por el Bloque Extracción. Sin embargo, el Bloque Análisis también aporta una enorme cantidad de subjetividad al sistema. El hecho que, por cada Keyword única obtenida, se genere una SentimentDataRow, hace que se generen varias SentimentDataRow de un solo elemento que no aportan ninguna información objetiva, como muestra la Ilustración 37: Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 77 {"name":"Moderno","element":"key","quantity":1,"positive":1,"negative":0,"neutral":0, "rate":"Very Positive","list":[{"sentiment":1.0,"fecha":"2015–10–07"}]} {"name":"Moderno","element":"kid","quantity":1,"positive":0,"negative":1,"neutral":0, "rate":"Very Negative","list":[{"sentiment":–1.0,"fecha":"2016–01–03"}]} {"name":"Moderno","element":"men","quantity":1,"positive":0,"negative":1,"neutral":0, "rate":"Very Negative","list":[{"sentiment":–1.0,"fecha":"2016–01–12"}]} {"name":"Moderno","element":"par","quantity":1,"positive":0,"negative":0,"neutral":1, "rate":"Neutral","list":[{"sentiment":0.0,"fecha":"2016–05–27"}]} {"name":"Moderno","element":"tv","quantity":1,"positive":0,"negative":1,"neutral":0," rate":"Very Negative","list":[{"sentiment":–1.0,"fecha":"2014–10–06"}]} {"name":"Moderno","element":"ok","quantity":1,"positive":1,"negative":0,"ne utral":0,"rate":"Very Positive","list":[{"sentiment":1.0,"fecha":"2013–01–09"}]} Por tanto, será necesario tener en cuenta la primera consideración expuesta en la introducción de este Bloque, y realizar un filtrado de los SentimentDataRow en función de su término Quantity, esto es, cuantas veces se ha opinado de la misma característica. Según se desee una mayor precisión, este valor deberá ser más elevado, filtrando dramáticamente los resultados, pero aportando una veracidad que, de otro caso, no sería posible obtener. Pero esta filtración se realizará en el siguiente Bloque, donde quedará a discreción del usuario. Ilustración 37 – Elementos SentimentDataRow no útiles de fichero DATA 78 Análisis Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 79 Capítulo 6: Representación 80 Representación 6.1. Introducción En el bloque anterior ya se disponía de datos que aportaban una cierta información útil. Sin embargo, estos datos requieren disponer de un conocimiento previo antes de poder obtener estimaciones de ellos, o sencillamente analizarlos requiere de un tiempo que los usuarios no están dispuestos a invertir, especialmente a la hora de hacer comparativas. Es a raíz de ello que se genera el Bloque Representación. El objetivo de este Bloque es el de presentar los datos obtenidos por Eccetas con gráficas personalizables, que serán capaces de mostrar datos generales y específicos con la misma calidad que resultaría de analizar los datos directamente, con el tiempo extra que ello conlleva. Las consideraciones que habrá que recalcar en este Bloque son, por tanto, las siguientes:  Precisión – Las gráficas deberán aportar al menos la misma información que la que aportarían los datos en los que se basan, de ser analizados directamente.  Adaptabilidad – Las gráficas deberán ser capaces de mostrar desde datos genéricos a valores específicos, adaptándose así a las necesidades del usuario.  Efectividad – Considerando la subjetividad aportada por el Bloque Análisis, este Bloque deberá ser capaz de asignar criterios objetivos que eliminen la mayoría de la subjetividad, como por ejemplo, utilizar solamente las gráficas que posean un mayor número de resultados. Ilustración 38 – Eccetas: Bloque Representación Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 81 6.1.1. Caso de Estudio El caso de estudio dispone de las siguientes características:  Los datos de entrada son un gran número de objetos SentimentDataRow, organizados por archivos en función del establecimiento.  Los SentimentDataRow pueden ordenarse por establecimiento y característica. También disponen de los resultados parciales (fechas y números que indican el sentimiento) que se utilizarán para el diseño de las gráficas. Por tanto, será posible hacer comparativas entre establecimientos, o analizar las características de un solo establecimiento con mayor precisión, todo ello a lo largo del tiempo, gracias a que se dispone de los resultados parciales. Considerando lo expuesto, será conveniente disponer de una herramienta que permita recoger los datos de los que se dispone, y generar las gráficas que cumplan los criterios anteriormente mencionados, así como disponer de un código que haga todos los cambios y filtrados que el usuario considere necesarios a los datos disponibles. Ilustración 39 – Resumen General del Bloque Representación Ilustración 40 – Esquema del Caso de Estudio del Bloque Representación 82 Representación 6.2. JFreeChart JFreeChart es una librería Java bajo licencia LGPL[22], que permite su uso gratuito en soluciones de cualquier tipo. Permite generar una gran variedad de distintas gráficas, altamente personalizables, requiriendo de un proceso de aprendizaje relativamente rápido para introducir en sus clases particulares los datos apropiados. Donde Import.IO funciona mediante una REST API accesible desde múltiples entornos, y AlchemyAPI posee varias librerías en múltiples lenguajes de programación para acceder a su API, JFreeChart es una librería exclusiva de Java. A cambio, aporta la ventaja de ser completamente gratuita, y su reducido tamaño hace que sea relativamente sencillo aplicar esta librería en casi cualquier solución. La estructura de JFreeChart engloba dos elementos fundamentales: Datasets, y Charts. Un Dataset son los datos que tendrá la gráfica, pudiendo disponer de varios tipos distintos (CategoryDataset, SeriesDataset, PieDataset, XYDataset, etc.), los cuales se utilizarán en función del tipo de gráfica que se desee, siendo necesario adaptar los datos de origen a la estructura del Dataset para su correcto funcionamiento. Un Chart, por otro lado, es el “lienzo” sobre el que se pintarán los datos que posee el Dataset. Los Chart también disponen de numerosas formas (BarChart, LineChart, PieChart, TimeSeriesChart, etc.), que solo funcionarán si se les Ilustración 41 – Construcción de una gráfica JFreeChart Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 83 introduce el Dataset adecuado. Así mismo, son altamente configurables, desde el grosor del trazo hasta el color utilizado, pasando por añadir etiquetas a los datos, etc. En la Ilustración 42 se observan dos ejemplos: El primero es un caso de BarChart, mientras que el segundo corresponde a un PieChart. El proceso de uso de JFreeChart se describe a continuación:  Se formatean los datos de entrada en el Dataset que vaya a utilizarse.  Se genera el objeto Chart apropiado, y se le vincula el Dataset creado.  Se lanza el Chart, generándose la gráfica apropiada, o se almacena directamente como archivo de imagen. Por ello, y dadas las diferentes opciones que proporciona esta librería, será posible cumplir todas las consideraciones indicadas anteriormente, de la forma en la que se describe a continuación. 6.3. Estructura y Descripción del Bloque Ilustración 42 – Ejemplos de Chart Ilustración 43 – Estructura del Bloque Representación 84 Representación El Bloque Representación, por tanto, estará conformado de la siguiente manera:  Código Java para filtrar los datos y seleccionar qué clase de gráfica se generará.  Generación del Dataset y Chart correspondientes.  Representación de los datos finales. Si bien este Bloque depende de los resultados obtenidos del Bloque Análisis, sin embargo posee una enorme versatilidad debido al número de Datasets y Charts disponibles, que permiten realizar múltiples representaciones distintas. 6.3.1. Filtrar Datos y Seleccionar Gráfica Inicialmente, antes de solicitar el input al usuario, será preciso generar la base de datos sobre la que se apoyará este Bloque. Esta tarea, automática e independiente del usuario, generará unos nuevos ficheros, filtrados de los datos generales en función a un número concreto de comentarios. El usuario podrá solicitar un filtrado más o menos riguroso, como se indica a continuación: En este Proyecto de Fin de Carrera, se encuentran habilitadas las siguientes opciones para el usuario: 1. Visualizar una característica común en todos los establecimientos. 2. Elegir un establecimiento, y una característica concreta de este. 3. Visualizar la valoración general de un establecimiento. Ilustración 44 – Esquema del filtrado y selección de datos Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 85 4. Visualizar las características negativas de un establecimiento, en función de una fecha concreta. 5. Escoger entre visualizar directamente la gráfica, o almacenarla. 6. Cambiar el valor mínimo para filtrar los datos iniciales (Rehace la base de datos con el nuevo valor). 7. Cambiar el valor mínimo para considerar características como negativas (Parámetro de la 4º opción) En este paso será donde se pueda fijar la condición de efectividad mencionada durante el resumen final del Bloque Análisis (Opción 6º), esto es, descartar todas las SentimentDataRow cuyos valores Quantity no alcancen el valor fijado, limitándose así a información más objetiva, o bien asignar un valor menor y tomar más datos, a coste de una mayor subjetividad. Así mismo, será aquí donde, en función de la opción escogida, se generará el par de Dataset–Chart correspondiente. 6.3.2. Generación de Dataset–Chart En función de las opciones escogidas anteriormente, se procederá a la creación de los objetos Java necesarios para JFreeChart, así como el cálculo de los valores que se cargarán en dichos objetos. Los pasos son los siguientes: 6.3.2.1 Dataset  Acceder al fichero (o ficheros) JSON con las SentimentDataRow filtrados según su Quantity.  Obtener las SentimentDataRow apropiadas, en función de la selección del usuario.  Generar el Dataset, rellenándolo con los datos correctos y realizando las operaciones que sean convenientes (sustituir las fechas completas de los datos parciales por solo mes y año, sumar resultados parciales para dar estimaciones totales, etc.), siempre adaptándose al formato del Dataset escogido. 92 Resultados Ejecución de programa Java 7.1. Trazas Como se ha visto en las sucesivas etapas de este Proyecto, cada bloque genera su propio resultado parcial, siendo la suma de estos el verdadero producto final del sistema. A continuación, se representarán las distintas trazas pertenecientes a cada uno de los Bloques. Por practicidad, se considerará que se disponen de las licencias adecuadas de Import.IO y de AlchemyAPI, por lo que el proceso no se verá ralentizado por las limitaciones de las versiones gratuitas. En cada caso, no obstante, se hará mención a dichas limitaciones, con fines instructivos. Finalmente, para comprender mejor la traza, se procede a mostrar los distintos tipos de objetos que se encontrarán en ella mediante la Ilustración 49: Bloque de Decisión Ejecución de Herramienta no Java Datos de salida Datos de entrada Ilustración 48 – Eccetas: Resultados Ilustración 49 – Bloques de Traza Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 93 7.1.1. Bloque Extracción En el caso del Bloque Extracción, puede considerarse que hay dos tipos posibles de traza, dependiendo de si se trata del Caso Específico (se buscan los datos de 1 solo establecimiento) o el Caso General (se buscan todos los establecimientos posibles en un idioma y país determinado). En esencia, en el Caso General se pueden dar todos los pasos posibles, mientras que en el Caso Específico solo se realiza la ruta más corta, ejecutando uno solo de los Extractores de Import.IO. Como añadido, en el Caso Específico se realiza la extracción de la valoración general, que servirá como resultado adicional del sistema. No se realiza en el Caso General puesto que en ese caso, la extracción de la valoración general se realiza directamente desde las herramientas de gestión de Big Data. 7.1.1.1 Limitaciones En el Caso General, no se ejecutan automáticamente ninguno de los Extractores, siendo necesario ir paso a paso. Además, en el caso del Extractor Main, se ejecutará un número de veces concreto, con el fin de no saturar las peticiones de entrada. 94 Resultados 7.1.1.2 Caso General Ilustración 50 – Traza del Caso General del Bloque Extracción Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 95 7.1.1.3 Caso Específico Ilustración 51 – Traza del Caso Específico del Bloque Extracción 96 Resultados 7.1.2. Bloque Análisis Este Bloque trabaja establecimiento por establecimiento (no tendría sentido analizar datos sin denotar claramente a qué establecimiento pertenecen), por lo que bien sea por un Caso Específico o por un Caso General, se utiliza un solo fichero de entrada. En este caso, se presume que se dispone de los datos extraídos de un Caso Específico (la otra opción hubiera sido disponer de un archivo CSV extraído de la DB de Hadoop). El fichero DATA resultante de este Bloque, si bien ya permite un cierto análisis de datos, incluye mucha información extra innecesaria para los resultados a obtener finalmente, debido a la naturaleza subjetiva del análisis de sentimiento. El siguiente Bloque será el que ejecute los códigos que le darán sentido, en la forma de los archivos COMP. Ilustración 52 – Traza del Bloque Análisis Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 97 7.1.2.1 Limitaciones Este Bloque es el que más limitaciones posee, ya que la licencia gratuita solo permite 1000 peticiones diarias. Estas peticiones se dividen a la mitad si se desea adquirir sentimiento. Por tanto, a la hora de convertir el archivo fuente en un fichero CSV compatible, deberá fragmentarse en archivos de un tamaño reducido, de forma que no se alcance el límite diario de peticiones. Por tanto, se deberá ejecutar la división de ConstruirFicherosSentimiento, en función de que sea un JSON o un CSV, para después ejecutar 1 vez al día ExtraerSentimientoDeFicheros. En la Ilustración 53 se presenta un ejemplo del trabajo que se ha realizado en este Proyecto Fin de Carrera para generar la base de datos utilizada de pruebas. 7.1.3. Bloque Representación Para el correcto funcionamiento de este Bloque, habrá que considerar una base de datos que almacene los datos obtenidos del Bloque Análisis, así como los datos de valoración general adicionales. Por tanto, el primer paso será realizar una base de datos apropiada para después lanzar el menú de opciones al usuario, como se ve en la Ilustración 54. Es de destacar la opción 6, que filtra la base de datos, modificando el valor mínimo con el que se transforma un fichero DATA en un fichero COMP. El valor mínimo es el mínimo número de comentarios que deberá haberse realizado sobre un elemento para ser considerado analizable. Aumentar este valor provocará que el sistema ofrezca muchos menos resultados, pero dispondrán de un mayor nivel de detalle y precisión. 98 Resultados Ilustración 53 – Traza del Bloque Análisis con las limitaciones por licencia Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 99 Ilustración 54 – Traza del Bloque Representación 100 Resultados 7.1.4. Tipos de Resultados El resultado principal de Eccetas son los gráficos que genera la suma de los tres bloques mencionados anteriormente. Sin embargo, hay toda una serie de resultados parciales, los cuales se exponen a continuación: 7.1.4.1 Datos “CLEAN”  Resultante del Bloque Extracción.  Aporta información general, pero dado que pueden ser miles de comentarios como el mostrado, no resulta fácil de analizar.  Fácilmente almacenable, y preparado para guardarse en un entorno Hadoop.  Provee de más información de la utilizada. Por ejemplo, podrían filtrarse los comentarios en función del país de quien lo escribe, o almacenar su valoración general para mostrarla gráficamente. Ilustración 55 – Ejemplo de clase DataIO, elemento del fichero CLEAN Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 101 7.1.4.2 SentimentDataRow  Objeto Java, representado en la Ilustración 56.  Resultante del Bloque Análisis.  Aporta información específica sobre una característica de un establecimiento concreto. Su información es interesante, pero es necesario saber cuál SentimentDataRow tiene datos relevantes y cual no (en función de su elemento Quantity, por ejemplo)  Almacenable, pero su lista de resultados parciales puede ser complicada de guardar. 7.1.4.3 Imágenes  Resultantes del Bloque Representación, mostradas por las Ilustraciones 57, 58, y 59.  La información que aportan depende del tipo de gráfico y la opción seleccionada. Actualmente, permite: o Característica específica de un establecimiento concreto. o Característica específica de todos los establecimientos. o Todas las características negativas de un establecimiento en función de una fecha indicada. o La media de la valoración general sobre un establecimiento en función de los mensajes de los usuarios.  Muy fácilmente almacenable al tratarse de simples imágenes en formato PNG. Ilustración 56 – SentimentDataRow 108 Resultados 7.2.2. Característica específica de todos los establecimientos.  Puede verse si la característica en cuestión está en un mejor o peor lugar que en relación a la competencia, aunque será necesario considerar si realmente es equitativo. Comparar la calidad de un establecimiento de máxima categoría con la de uno mucho menor no aporta realmente información; esta clase de comparaciones puede ajustarse en futuras iteraciones del sistema, en función de la base de datos.  La comparativa en función de la competencia no es aplicable simplemente al estado, sino también al histórico y a los elementos en común que une a todos los establecimientos, como en el caso anterior. Las Ilustraciones 64, 65, 66 y 67 representan la opinión sobre la característica “habitación” de los establecimientos:  Be Live City Airport Madrid Diana.  Ciutat Del Prat.  Barcelona Airport Hotel.  Air Rooms Barcelona Airport By Premium Traveler. Como puede verse, la comparativa genera el vector de fechas conveniente; de este modo el eje X es idéntico en todos los casos. Así mismo, un vistazo rápido permite obtener datos interesantes, como:  Ningún establecimiento posee un % bajo de opiniones negativas.  El primer establecimiento tiene unas opiniones más negativas que el cuarto.  No hay demasiada información analizable del tercero comparado con el resto. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 109 Ilustración 64 – Gráfica ClusteredData "Habitación" de Be Live City Airport Madrid Diana Ilustración 65 – Gráfica ClusteredData "Habitación" de Ciutat del Prat 110 Resultados Ilustración 66 – Gráfica ClusteredData "Habitación" de Air Rooms Barcelona Airport By Premium Traveller Ilustración 67 – Gráfica ClusteredData "Habitación" de Barcelona Airport Hotel Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 111 7.2.3. Características negativas de un establecimiento en función de una fecha indicada. Esta modalidad está pensada para el caso en el que se quieran detectar qué características de un establecimiento no son correctas, en función de un mes y año concretos. Ello permite ver cuáles son las características que no funcionan en un tiempo determinado, así pudiendo conocer las áreas que requieren revisión sin necesidad de estudiar todas las características que ofrecen las modalidades anteriores. El primer resultado que se ofrece es la lista de meses, en función del año indicado, que poseen datos negativos. Se considerará negativo siempre que la suma de las opiniones neutrales y negativas sea superior a las positivas, y haya más de 10 opiniones en ese mes. Este último número puede aumentarse en pro de obtener una mayor precisión en la representación, aunque sacrificando muchos potenciales resultados. Por tanto, como se observa en la Ilustración 68, solo será posible obtener imágenes si los datos superan las condiciones indicadas anteriormente, ya que en dicho caso se verán reflejadas como opción a elegir en la columna de la derecha. Establecimiento: BAH Barcelona Airport Hotel Escribe el año de visualización. 2015 Datos disponibles:  0: 2015–04  1: 2015–05  2: 2015–06  3: 2015–07  4: 2015–08  5: 2015–09  6: 2015–10  7: 2015–11 Selecciona el mes a visualizar: Ilustración 68 – Lista de opciones de visualización 112 Resultados La Ilustración 69 es un ejemplo del resultado de escoger uno de los resultados; en este caso, la característica “aeropuerto” del Barcelona Airport Hotel es bastante neutral, por lo que posiblemente haya algún aspecto a considerar con respecto a lo que debería ser un establecimiento situado al lado de un aeropuerto, mientras que los datos sobre “restaurante”, aunque escasos, son directamente negativos. 7.2.4. Media de la valoración general sobre el establecimiento. Esta modalidad secundaria se realizó como ejemplo de la utilidad de extraer más elementos que los comentarios de la fuente. Recoge mes a mes las valoraciones generales que los clientes otorgaron en sus respectivos comentarios, y genera con ellos una gráfica de valores. Dicha gráfica permite, por tanto, visualizar un histórico y conocer muy fácilmente si algún aspecto en general no ha sido satisfactorio en un mes y año determinados, y por tanto decidir utilizar los otros tipos de resultado, que ofrecen un análisis más exhaustivo. Ilustración 69 – Gráfica NegativeData 04–2016 de Barcelona Airport Hotel Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 113 En la Ilustración 70, se muestra la valoración general del establecimiento Ciutat del Prat. La valoración se recoge mes a mes, mostrándose en la media que se ve en la imagen, de 5 a 10. El número que acompaña a cada valor indica el número de comentarios que se ha considerado en ese mes. Ilustración 70 – Gráfica RateData de Ciutat del Prat 114 Resultados Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 115 Capítulo 8: Conclusiones 116 Conclusiones 8.1. Introducción Como se ha podido observar a lo largo de este Proyecto Fin de Carrera, las nuevas ramas de la tecnología relacionada con los datos tienen el potencial para cambiar sustancialmente el panorama de negocio actual. Desde mejorar cualitativamente las metodologías de trabajo comunes, hasta abrir nuevos nichos de negocio, basándose en el hecho de que las nuevas herramientas proporcionan un conocimiento que, de otra forma, no hubiera sido posible obtener. El potencial de la Minería de Datos es sencillamente abrumador. La cantidad de información y conocimiento que permite obtener de forma relativamente sencilla y rápida se vuelve un arma indispensable en las empresas que ven sus increíbles prestaciones. La capacidad de analizar datos prácticamente en tiempo real, o de establecer patrones de datos útiles con terabytes de información puede dar una ventaja significativa a la hora de competir en el mercado laboral. Junto a este concepto, se han de considerar las herramientas de soporte que ha establecido Big Data, así como las bases de datos no relacionales, utilizar un clúster en paralelo de sistemas en lugar de servirse de un solo servidor, etc... Que son algunas de las formas en las que se puede utilizar la minería de datos apropiadamente. Por otra parte, la capacidad del Análisis de Sentimiento para valorar las opiniones humanas también da paso a numerosas e interesantes opciones. A pesar de la naturaleza conflictiva de las decisiones humanas, la habilidad de poder filtrar y analizar estas valoraciones personales y obtener información de ello se traduce en que las redes sociales son, por ejemplo, unas valiosísimas fuentes de datos. Por ejemplo, en un TFT [Poner enlace] presentado hace unos años, se ilustró el significativo poder que aporta utilizar una herramienta de análisis de sentimiento sobre Twitter, siendo capaces de extraer el sentimiento ante los términos que se desearan analizar. Finalmente, la apropiada inclusión de estas tecnologías en herramientas que un usuario pueda utilizar con la mayor facilidad posible resulta indispensable, considerando la complejidad general que conllevan. Esto es, independientemente de la dificultad que entrañe la tecnología o la herramienta, es necesario mantener siempre una interfaz sencilla y práctica, permitiendo su utilización y desarrollo. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 117 8.2. Conclusiones Las conclusiones se presentarán tomando como base los objetivos propuestos en el anteproyecto de este Proyecto Fin de Carrera, para pasar a indicar cuáles han sido cumplidos y en qué forma: 8.2.1. Estudio del estado del arte. Considerando la gran variedad de las herramientas aptas para el caso práctico del extractor y comparador, se deberán buscar aquellas que ofrezcan una mejor funcionalidad, bien por su rapidez, su robustez o su flexibilidad. Si bien no se ha hecho un extenso análisis de todas las herramientas posibles, como estaba inicialmente planteado, sí se han encontrado las herramientas adecuadas que han permitido la síntesis del sistema Eccetas. Separar la búsqueda y estudio de las herramientas en los Bloques que se han comentado previamente resultó ser muy buena opción de planteamiento, ya que no era necesario buscar herramientas multipropósito, sino resolver una serie de problemas concretos. 8.2.2. Análisis y selección de herramientas especializadas. Dado que el presente proyecto tiene su núcleo en el análisis de sentimiento, será necesario considerarlo a la hora de realizar la selección de herramientas, también teniendo en mente las áreas de extracción y representación de datos. Respecto a Big Data, se escogió Hadoop y su Toolbox. Si bien hay otros conjuntos de herramientas similares, este resultó ser muy intuitivo y cómodo de utilizar, así como notablemente extendido. El hecho de poder acceder a los datos directamente mediante un navegador web facilitó enormemente el manejo de los archivos que se generaron a posteriori. Por tanto, dentro de la Toolbox destacaron particularmente Ambari (Permite el manejo desde un navegador web), Hive (Base de Datos) y HDFS para el manejo de ficheros. 124 Referencias Bibliográficas Referencias Bibliográficas Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 125 [1] Wikipedia, “Scientia potentia est.” [Online]. Available: https://en.wikipedia.org/wiki/Scientia_potentia_est. [Accessed: 07-May2017]. [2] ITU, “ITU releases 2014 ICT figures,” International Telecommunication Union, 2014. [3] “World Statistics - International Statistics,” 2015. [Online]. Available: http://world-statistics.org/indexres.php?code=IT.NET.USER.P2?name=Internet users (per 100 people)#top-result. [Accessed: 07-May -2017]. [4] “Minería de datos (data mining). ¿Qué es? ¿Para qué sirve? (1a parte) (DV00105A).” [Online]. Available: http://www.aprenderaprogramar.com/index.php?option=com_content&vie w=article&id=252:mineria-de-datos-data-mining-ique-es-ipara-que-sirve1o-parte-dv00105a&catid=45:tendencias-programacion&Itemid=164. [Accessed: 07-May-2017]. [5] S. Chalmers, C. Bothorel, and R. Picot-Clemente, “Big Data-State of the Art,” People, vol. 3, p. B4, 2013. [6] I. Herrero, “El análisis de sentimiento de texto en las redes sociales - BiblogTecarios,” 2016. [Online]. Available: http://www.biblogtecarios.es/inmaherrero/el-analisis-de-sentimiento-detexto-en-las-redes-sociales/. [Accessed: 07-May-2017]. [7] “Java Resources for Students, Hobbyists and More | go.Java | Oracle.” [Online]. Available: https://go.java/index.html. [Accessed: 07-May-2017]. [8] C. Paramio, “El concepto NoSQL, o cómo almacenar tus datos en una base de datos no relacional,” 2011. [Online]. Available: https://www.genbetadev.com/bases-de-datos/el-concepto-nosql-o-comoalmacenar-tus-datos-en-una-base-de-datos-no-relacional. [Accessed: 07May-2017]. [9] K. Sitto and M. Presser, Field Guide to Hadoop. O’Reilly Media, 2015. [10] M. S. Brown, “(For Dummies) Meta S. Brown-Data Mining For DummiesWiley Publishing Inc. (2014).pdf.” 2014. [11] “Import.io | Extract data from the web.” [Online]. Available: https://www.import.io/. [Accessed: 07-May-2017]. [12] E. Cambria, B. Schuller, Y. Xia, and C. Havasi, “New Avenues in Opinion Mining and Sentiment Analysis,” IEEE Intell. Syst., vol. 28, no. 2, pp. 15-21, Mar. 2013. [13] M. Ogneva, “How Companies Can Use Sentiment Analysis to Improve Their Business (vendor),” 2010. [Online]. Available: http://mashable.com/2010/04/19/sentiment-analysis/#eVCqsvJDn5qT. [Accessed: 07-May-2017]. [14] “AlchemyLanguage | IBM Watson Developer Cloud.” [Online]. Available: 126 Referencias Bibliográficas https://alchemy-language-demo.mybluemix.net/. [Accessed: 07-May-2017]. [15] “JFreeChart.” [Online]. Available: http://www.jfree.org/jfreechart/. [Accessed: 07-May-2017]. [16] T. White, “Hadoop: The definitive guide 4th Edition,” Online, vol. 54, p. 258, 2012. [17] “Hadoop Tutorial - YDN,” Yahoo! Developer Network. [Online]. Available: https://developer.yahoo.com/hadoop/tutorial/module2.html. [Accessed: 07-May-2017]. [18] “Download Apache Hadoop Sandbox on Virtual Machine or Azure | Hortonworks.” [Online]. Available: https://es.hortonworks.com/products/sandbox/. [Accessed: 07-May-2017]. [19] “Hive Plays Well with JSON | Mawazo.” [Online]. Available: https://pkghosh.wordpress.com/2012/05/06/hive-plays-well-with-json/. [Accessed: 07-May-2017]. [20] “How-to: Use a SerDe in Apache Hive - Cloudera Engineering Blog.” [Online]. Available: http://blog.cloudera.com/blog/2012/12/how-to-use-aserde-in-apache-hive/. [Accessed: 07-May-2017]. [21] Stanford NLP Group, “The Stanford Natural Language Processing Group.” [Online]. Available: https://nlp.stanford.edu/software/tagger.shtml. [Accessed: 07-May-2017]. [22] GNU, “GNU General Public License v3.0,” 2007. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 127 128 Códigos Códigos Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 129 9.1. Introducción Este capítulo sirve para enumerar y ofrecer un breve resumen de los distintos algoritmos que se han desarrollado para la constitución del sistema Eccetas. Se han omitido de la siguiente lista aquellos algoritmos provisionales o desarrollados a modo de prueba (si bien en los dos primeros bloques existe un modo de pruebas incorporado en los propios algoritmos para la correcta generación de datos de este proyecto). Se han dividido en los respectivos Bloques de diseño, omitiéndose la descripción de los códigos cuya única función es describir las clases Java necesarias. 9.2. Códigos Implementados 9.2.1. Extracción 9.2.1.1 GenerarNumEstIO.java Código que obtiene el número de establecimientos totales que existen en el país fijado y en el idioma seleccionado, llamando a un determinado script de Import.IO. Con ese número, genera la lista de enlaces que requiere el siguiente código para funcionar. Limitaciones: Al ser una única llamada al Extractor, no está limitado. 9.2.1.2 Extractor Número_establecimientos Este programa de Import.IO analiza una página web de Booking y extrae el número de establecimientos totales. 9.2.1.3 GenerarEnlacesEstIO.java 130 Códigos Código que analiza todos los enlaces proveídos por el software anterior con otro script de Import.IO y genera la lista de enlaces a comentarios de establecimientos que utilizará el resto del Bloque. Limitaciones: Si el modo de pruebas está activo, solo llama 3 veces al script, independientemente del número de resultados posibles. 9.2.1.4 Extractor Enlaces comentarios Este programa generado en Import.IO permite obtener los enlaces de comentarios de los distintos establecimientos de Booking, filtrados por país. Al solo mostrar 15 resultados por página, será necesario ejecutar este Extractor múltiples veces. 9.2.1.5 GenerarEcaIO.java Código que genera un objeto ECA (Establecimiento, País, Dirección), llamando al correspondiente script de Import.IO, necesario para el siguiente programa. Limitaciones: Al ser una única llamada al Extractor, no está limitado. 9.2.1.6 Extractor ECA Programa de Import.IO que devuelve el nombre, el país y la dirección (incluye código postal) del enlace al establecimiento indicado. 9.2.1.7 ImportIOMain.java El código principal del Bloque utiliza todos los códigos mencionados anteriormente (el último solamente en los casos individuales) para generar el archivo principal de datos RAW, utilizando otro script de Import.IO y guardando todos los resultados en un fichero compatible con Hadoop. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 131 Limitaciones: Si el modo de pruebas está activo, solo llama 3 veces al Extractor Main y al Eca, independientemente del número de resultados posibles. 9.2.1.8 Extractor Main Programa de Import.IO que devuelve:  Nombre del autor del comentario  Comentario (partes positiva y negativa)  Fecha del comentario  País de procedencia del autor  Número de comentarios realizados en Booking  Detalles (parámetro de Booking que indica el nº de noches, si iba solo o en pareja, etc)  Valoración general Dado que devuelve un máximo de 75 resultados, en casos donde existan más será preciso ejecutar este programa más de una vez. 9.2.1.9 SegmentarYConvertirAJson.java Permite adaptar el resultado RAW anterior a un formato JSON válido que puedan leer otros elementos del Bloque y que detecte si el fichero es demasiado grande para dividirlo en archivos que sí sean procesables. 9.2.1.10 SintetizarResultados.java Aplica al fichero anterior JSON una serie de condiciones y transformaciones para corregir posibles errores de escritura o formato, de forma que genera un fichero CLEAN formado con los nuevos objetos DATAIO, cuya cabecera es el objeto ECA mencionado anteriormente. Este fichero es compatible con Hadoop, así como con el siguiente Bloque. 132 Códigos También extrae aparte las valoraciones generales y sus fechas, formando los archivos Valoración, que podrán utilizarse directamente en el último Bloque de este sistema. 9.2.2. Análisis 9.2.2.1 ConstruirFicherosSentimiento.java Este programa posee como objetivo principal convertir la fuente de datos que se le indique en un archivo compatible con la herramienta AlchemyAPI para obtener el análisis de sentimiento. Por tanto, bien provenga la fuente de Hadoop (fichero CSV con los datos buscados), o del Bloque Extracción (fichero JSON con todos los datos), el programa copiará, filtrará y formateará convenientemente los datos para el siguiente código. Limitaciones: Con el modo de pruebas activo, se dividirá la fuente de datos en ficheros de un tamaño compatible con el límite diario que exige la herramienta. Una vez analizadas todas las partes, el modo de pruebas permite combinarlas en un solo elemento, que será compatible con el último código de este Bloque. 9.2.2.2 ExtraerSentimientoDeFicheros.java Este programa toma el fichero que contenga los datos y el nombre del establecimiento del usuario, y genera un archivo SENT con el nombre del establecimiento y una lista de SentimentElement (elemento, fecha, sentimiento), que se procesarán en el siguiente bloque. Estos “elementos” son las posibles características del establecimiento que se está analizando. Limitaciones: Si el modo de pruebas está activo, el sistema reconoce que no analiza un solo archivo sino múltiples, por lo que analizará el fichero parcial y generará un archivo SENT parcial. Será necesario volver al anterior programa una vez se realice el análisis de todos los ficheros parciales. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 133 9.2.2.3 GenerarDatosDeSentimiento.java Este programa, similar al proceso que realiza SintentizarResultados.java, toma los datos SENT previos y genera una serie de nuevos objetos SentimentDataRow, que se almacenarán en el fichero DATA. Estos objetos se generan mediante la agrupación de los distintos SentimentElement mencionados anteriormente, así como del resto de procedimientos explicados en el Bloque Análisis. Este programa también dispone de la capacidad de filtrar los ficheros DATA en los ficheros COMP, que serán en última instancia los que utilizará el bloque siguiente. Los ficheros COMP son los SentimentDataRow de los ficheros DATA cuyo atributo Quantity supere el umbral dictado por el usuario. 9.2.3. Representación 9.2.3.1 Database.java Este programa genera la base de datos que se utilizará en el programa principal de este Bloque. Utiliza los ficheros DATA que se le indiquen, permitiendo generar los respectivos ficheros COMP. Así mismo, también carga los archivos Valoración generados por el primer Bloque. 9.2.3.2 MetodosDatabase.java Este código trabaja sobre la base de datos, extrayendo los datos que sean necesarios, actualizándolos o filtrándolos. Incluye:  Analizar todos los ficheros COMP y mostrar qué características son comunes.  Extraer todos los SentimentDataRow de la base de datos en función de la característica indicada.  Extraer todas las características de la base de datos en función de una fecha indicada.  Extraer las fechas comunes de toda la base de datos de cada elemento (Genera el vector de fechas que engloba toda la base de datos) 140 Pliego de Condiciones 10.2.2. Instalación y ejecución del software El software desarrollado a lo largo de este Proyecto Fin de Carrera puede englobarse en dos áreas distintas: 10.2.2.1 Ejecución del código Eccetas. El proyecto Java puede importarse al Workspace de cualquier entorno Eclipse, siempre que se cumplan los requisitos hardware y software mencionados anteriormente. No es preciso obtener las librerías Java indicadas, puesto que estas ya se encuentran insertadas en el proyecto. Como se ha expresado en anteriores capítulos, los códigos se encuentran separados en sus respectivos Bloques, y podrán ejecutarse de forma separada, siendo el bloque Representación el principal para el usuario. El presente proyecto ya incorpora una serie de archivos iniciales que funcionan como base de datos, por lo que no es necesario utilizar la Toolbox de HDP para hacer pruebas iniciales. En caso de suprimirlos o modificarlos, el sistema no dispondrá de datos que presentar y provocará un mal funcionamiento en el código. 10.2.2.2 Instalación y ejecución de la máquina virtual para utilizar Hadoop. Desde la página web de Hortonworks se ofrece una solución gratuita que adjunta las instrucciones adecuadas para ejecutar la máquina virtual, y cargar sobre esta el Toolbox HDP. Ejecutada, podrá accederse desde un navegador web tanto a HDFS, que almacena los datos, como Hive, que permite realizar búsquedas en formato SQL. 10.3. Pliego de condiciones legales 10.3.1. Concesión de licencia Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 141 Este Proyecto Fin de Carrera es propiedad de la Universidad de las Palmas de Gran Canaria y cualquier usuario debe estar de acuerdo en obligarse por los términos y condiciones establecidas en esta licencia del proyecto aceptando todas sus cláusulas. El uso de los distintos programas o ficheros, o de una copia en cualquier ordenador o computadora sólo podrá darse bajo la autorización expresa del autor, el tutor del proyecto y de la Escuela de Ingeniería de Telecomunicación y Electrónica de la Universidad de Las Palmas de Gran Canaria. 10.3.2. Derechos de autor Este proyecto y su documentación asociada están protegidos por las leyes de propiedad intelectual que le sean aplicables así como las disposiciones de los tratados internacionales. Por consiguiente, el usuario deberá utilizar el material relativo al proyecto como cualquier producto protegido por derechos de autor. Sin embargo, se permitirá que el usuario pueda realizar una copia de los códigos fuente de programación y de la documentación del proyecto siempre que exista una autorización previa del autor, el tutor del proyecto y de la Escuela de Ingeniería de Telecomunicación y Electrónica perteneciente a la Universidad de Las Palmas de Gran Canaria. 10.4. Restricciones El usuario no podrá realizar ingeniería inversa, de compilación o desensamblado del proyecto. El usuario podrá transferir el programa a un tercero bajo la autorización del autor al tutor o de la Escuela de Ingeniería de Telecomunicación y Electrónica de la Universidad de Las Palmas de Gran Canaria siempre que no posea copia del mismo. Asimismo, la copia transferida podrá incluir posibles actualizaciones que las pueda acompañar. 10.5. Garantía El autor y el tutor garantizan que las muestras y ficheros asociados al proyecto funcionarán correctamente en el momento de su uso. Análogamente, se 142 Pliego de Condiciones garantiza que el soporte en el cual estén grabados los distintos programas no contendrá defectos en el momento de la adquisición del mismo. La única excepción de lo dispuesto en el párrafo anterior es que los programas están creados sin garantías de ninguna clase. El autor y el tutor no aseguran, garantizan o realizan ninguna declaración respecto al uso o los resultados derivados de la utilización de los ficheros o de la documentación asociada al proyecto. 10.5.1. Limitación de responsabilidad En ningún caso serán el autor, el tutor o la Escuela de Ingeniería de Telecomunicación y Electrónica de la Universidad de Las Palmas de Gran Canaria responsables de los perjuicios directos, indirectos, incidentales o consiguientes, gastos, lucro cesante, pérdida de ahorros, interrupción de negocios, pérdida de información comercial o de negocio, o cualquier otra pérdida que resulte del uso o de la incapacidad de usar los ficheros o la documentación del proyecto. El usuario conoce y acepta que los derechos de licencia reflejan esta asignación de riesgo como el resto de cláusulas y restricciones. Asimismo, el autor y el tutor de este proyecto rechazan cualquier otra garantía que no haya sido indicada anteriormente. 10.6. Otros En el supuesto de que cualquier disposición de esta licencia sea declarada total o parcialmente inválida, la cláusula afectada será modificada convenientemente de manera que sea ejecutable una vez modificada, plenamente eficaz, permaneciendo el resto de este contrato en vigencia y regido por las leyes de España. Finalmente el usuario acepta la jurisdicción exclusiva de los tribunales de este país en relación con cualquier disputa que pudiera derivarse de la presente licencia. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 143 144 Presupuesto Presupuesto Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 145 11.1. Declaración jurada Don Néstor Marín Siruela, autor del presente Proyecto Fin de Carrera, DECLARA QUE: El proyecto Fin de Carrera con título “Extractor y Comparador de Características de Establecimientos Turísticas empleando Análisis de Sentimientos con Big Data”, realizado a petición de la Escuela de Ingeniería de Telecomunicación y Electrónica de la Universidad de Las Palmas de Gran Canaria y en un periodo de 12 meses, tiene un coste total de TREINTA Y TRES MIL SETECIENTOS SESENTA Y CUATRO EUROS CON SETENTA Y OCHO CÉNTIMOS (33764,78 €) correspondiente a la suma de las cantidades consignadas a los apartados considerados a continuación. Firmando la presente para que así conste a los efectos oportunos. Autor del Proyecto: Néstor Marín Siruela Las Palmas de Gran Canaria, a 07 de Mayo de 2017 146 Presupuesto 11.2. Desglose del presupuesto El presupuesto del proyecto realizado se ha generado según los precios de mercado actual, y de las indicaciones del COIT (Colegio Oficial de Ingenieros de Telecomunicación) y de la AEIT (Asociación Española de Ingenieros de Telecomunicación), a efectos de visado. Los conceptos en los que se reparte el presupuesto son los siguientes: 1. Amortización del inmovilizado material. a. Amortización del material hardware empleado. b. Amortización del material software empleado. 2. Trabajo tarifado por tiempo empleado. 3. Redacción del proyecto. 4. Derechos de visado del COIT. 5. Gastos de tramitación y envío. 6. Aplicación de impuestos. 11.2.1. Amortización del inmovilizado material Se trata de la corrección de valor por la depreciación del inmovilizado material del proyecto realizada de acuerdo con un plan sistemático definido con anterioridad. Normas de valoración El inmovilizado material se ha registrado a su coste de adquisición. No se han capitalizado ningún tipo de gastos financieros. No se han incurrido en gastos de reparación, conservación o mantenimiento. A esta categoría pertenece la amortización del hardware y del software empleado en la realización del Proyecto Fin de Carrera. El sistema de amortización empleado ha seguido el método lineal, que distribuye el coste de los activos entre los años de vida útil de los mismos de forma constante. Asimismo, dichos recursos están ubicados en la categoría de “Útiles, herramientas y equipos para tratamiento de la información, sistemas y programas informáticos” de las tablas de amortización propias del I.R.P.F. Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 147 La amortización se practicará elemento por elemento, si bien cuando se trate de elementos patrimoniales integrados en el mismo grupo de la tabla de amortización, la amortización podrá practicarse sobre el conjunto de ellos, siempre que en todo momento pueda conocerse la parte de la amortización correspondiente a cada elemento patrimonial. Asimismo, los elementos de inmovilizado material nuevos cuyo valor unitario no exceda de 601,01 euros, podrán amortizarse libremente, hasta el límite de 3.005,06 euros anuales. Según la tabla “Útiles, herramientas y equipos para tratamiento de la información, sistemas y programas informáticos”, el número de años mínimos y máximos de amortización en esta categoría es de entre 2.5 y 5 años, por lo que para este proyecto, se ha estipulado en 3 años para cada uno de los elementos de tipo hardware empleados. Teniendo en cuenta que la duración del proyecto ha sido aproximadamente de 12 meses, y sabiendo que el cálculo del coste de amortización se constituye en un periodo de 3 años, los costes de amortización de la mayoría de los recursos utilizados se calcularán para el primer año. Finalmente, la cuota de amortización anual será calculada haciendo uso de la Ecuación 1: 𝐶𝑢𝑜𝑡𝑎 𝑑𝑒 𝑎𝑚𝑜𝑟𝑡𝑖𝑧𝑎𝑐𝑖ó𝑛 𝑎𝑛𝑢𝑎𝑙 = 𝑉𝑎𝑙𝑜𝑟 𝑑𝑒 𝑎𝑑𝑞𝑢𝑖𝑠𝑖𝑐𝑖ó𝑛 − 𝑉𝑎𝑙𝑜𝑟 𝑟𝑒𝑠𝑖𝑑𝑢𝑎𝑙 𝑁º 𝑑𝑒 𝑎ñ𝑜𝑠 𝑑𝑒 𝑣𝑖𝑑𝑎 ú𝑡𝑖𝑙 Donde el valor residual es el valor de cada uno de los elementos en cuestión después de su vida útil, teniendo en cuenta los índices de depreciación actual. 11.2.2. Amortización del material hardware Puesto que la elaboración del proyecto ha precisado de 12 meses de trabajo y el cálculo del coste de amortización se estipula en un periodo de tres años, los Ecuación 1 – Cuota de amortización anual 148 Presupuesto costes serán calculados como los derivados del tiempo de utilización que se ha requerido por cada uno de los elementos hardware. En la siguiente tabla se muestra la relación del elemento hardware con su valor de adquisición, su valor residual y el coste de amortización finalmente obtenido. Elementos Hardware Coste Valor residual (3 años) Amortización Ordenador de sobremesa. Procesador AMD FX– 8350, 16Gb RAM, 1Tb, 2 monitores tipo LED. 1050 € 0 350 € (1 año) TOTAL 350 € Por tanto, el coste total del hardware empleado en el proyecto asciende a la cantidad de TRESCIENTOS CINCUENTA EUROS. 11.2.3. Amortización del material software De forma análoga, en este apartado se procederá a calcular la amortización del inmovilizado material de tipo software del proyecto. Elementos Software Coste Valor residual (3 años) Amortización Paquete Microsoft Office 365 Pro Plus. 155 € 0 51,67 € (1 año) Sistema Operativo Microsoft Windows 10 Pro, 64 bits. 279 € 0 93 € (1 año) Tabla 1 – Amortización del material hardware Extractor y Comparador de Características para Establecimientos Turísticos Empleando Análisis de Sentimientos con Big Data Página | 149 Eclipse Java Juno 4.2 0€ 0 0€ Notepad++ 7.3.3 0€ 0 0€ Google Drive 0€ 0 0€ Toolbox Hadoop Hortonworks 2.4 0€ 0 0€ TOTAL 144,67 € Por tanto, el coste total del software empleado ha sido de CIENTO CUARENTA Y CUATRO CON SESENTA Y SIETE CÉNTIMOS. 11.2.4. Trabajo tarifado por tiempo empleado Normas de valoración La aproximación del importe de las horas empleadas en la realización del presente proyecto con respecto a los honorarios finales estimados, está indicada en la fórmula de recomendación del COIT mostrada en la Ecuación 2: 𝐻 = 74,88 · 𝐻𝑁· 𝐶𝑇+96,72 · 𝐻𝐸 · 𝐶𝑇 𝑒𝑢𝑟𝑜𝑠 En donde:  𝐻 son los honorarios por tiempo.  𝐻𝑁 son las horas trabajadas dentro de la jornada laboral.  𝐻𝐸 son las horas especiales trabajadas.  𝐶𝑇 es un factor de corrección en función del número de horas trabajadas. Asimismo, el valor del factor de correlación según el número de horas trabajadas vendrá dado por la Tabla 3: Tabla 2 – Amortización del material software Ecuación 2 – Fórmula de recomendación del COIT