FACULTAD DE CIENCIAS

TRABAJO FIN DE MÁSTER

APORTACIONES DEL ENTORNO DE COMPUTACIÓN ESTADÍSTICA R AL ANÁLISIS DE REDES SOCIALES.

Jénifer Sánchez Gallego

Línea de investigación: Análisis Estadísticos con R. Construcción de libros en R. Máster en Estadística Aplicada Tutorizado por: Yolanda Román y Andrés González. 2 Índice General

Introducción 1

1. Redes sociales 3 1.1. Componentes de las redes ...... 6 1.2. Distintas redes sociales ...... 9 1.2.1. Facebook ...... 10 1.2.2. Twitter ...... 12 1.2.3. LinkedIn ...... 15 1.3. La computación estadística en las redes...... 16

2. Data Mining 19 2.1. Introducción ...... 19 2.2. Métodos supervisados ...... 20 2.2.1. Redes neuronales ...... 20 2.2.2. Árboles de decisión ...... 21 2.2.3. Regresión ...... 21 2.3. Métodos no supervisados ...... 22 2.3.1. Cluster ...... 22 2.3.2. Reglas de asociación ...... 22 2.3.3. Escalamiento ...... 23

3. Análisis de sentimientos 25 3.1. Introducción ...... 25 3.2. Clasificadores ...... 26 3.2.1. Clasificador Naïve Bayes ...... 26 3.2.2. Support Vector Machines ...... 27

4. Análisis de datos en la red Twitter 29 4.1. Introducción ...... 29 4.2. Lenguaje R ...... 30 4.3. Obtener datos de Twitter ...... 31

3 4 ÍNDICE GENERAL

4.4. Análisis de datos de Twitter ...... 33 4.5. Relaciones entre usuarios ...... 63

5. Conclusiones 85 ÍNDICE GENERAL 5 INTRODUCCIÓN

Desde hace aproximadamente 30 años, gracias al desarrollo de la tec- nología informática, de la teoría de grafos y los avances en el campo de la topología y el álgebra, el Análisis de Redes Sociales ha constituido un modelo interdisciplinar, consolidado y expandido en las Ciencias Sociales. El estudio de modelos teóricos matemáticos y del análisis de datos, ha permitido acti- var el concepto de estructura social, el cual ya tenía significado propio en el campo de la Sociología y Antropología.

Además, su aplicación práctica en algunos campos como mercados de tra- bajo, movimientos sociales, etc ha convertido el Análisis de Redes Sociales en una de las áreas de investigación más importantes en las Ciencias Socia- les, generando también importantes aportaciones conceptuales en distintas disciplinas de este campo.

El Análisis de Redes Sociales (ARS) es una estrategia metodológica ba- sada en el análisis matemático de la teoría de grafos y los aportes de la sociología. El ARS permite medir las estructuras que emergen de las redes sociales, sirviendo básicamente, según Sanz (2003), para el estudio formal de las relaciones entre actores (personas, grupos, organizaciones) y para anali- zar las estructuras sociales que surgen de la recurrencia de esas relaciones o de la ocurrencia de determinados eventos. El ARS analiza la morfología, los patrones de comportamiento y las relaciones de los individuos que componen las redes sociales.

Este análisis es importante porque permite estudiar los comportamientos y estructuras de ciertos colectivos (personas, grupos, organizaciones) afecta- dos por distintas conductas, emociones y actitudes de otros.

Para entender acertadamente una red social es necesario realizar una des- cripción completa y rigurosa de la estructura de sus relaciones como punto de partida para el análisis. De manera ideal, deberíamos conocer todas las re-

1 2 laciones entre cada par de actores en la población estudiada, pero en algunos estudios esto puede ser tedioso. pesar de la importancia del entendimiento de relaciones, los vínculos entre personas normalmente son invisibles.

La computación estadística permite no sólo recoger en tiempo real la información establecida a través de los contactos de las redes sociales sino que también facilita la utilización de técnicas matemáticas y grafos para la representación y descripción de una red de manera concisa y sistemática, proporcionando a su vez las reglas que permiten la aplicación eficiente de los procedimientos.

Son muchas las situaciones en las que se pone de manifiesto la necesidad y eficacia del estudio de las redes sociales. A lo largo de esta memoria desa- rrollaremos algunas de ellas. Entre las más importantes, podemos citar:

Visualización de relaciones dentro y fuera de organizaciones estructu- rales predeterminadas.

Identificación del conocimiento individual sobre un tema y de las rela- ciones entre sujetos.

Identificación de individuos o grupos aislados.

Análisis del flujo del conocimiento.

Propagación de la información en base a las características de las or- ganizaciones.

Mejora de la efectividad de los canales de información y/o comunica- ción.

Análisis de redes sociales informales para la determinación de com- portamientos y preferencias. Capítulo 1

Redes sociales

El concepto de red social remonta a finales del siglo XVIII, de la mano de Émile Durkheim y Fernindand Tönnies. Según Tönnies las redes socia- les son grupos que pueden existir como lazos sociales personales y directos que vinculan a los individuos con aquellos con quienes comparten valores y creencias, o como vínculos sociales formales e instrumentales. Pero Durkheim explicó que los fenómenos sociales surgen cuando los individuos que interac- túan constituyen una realidad que ya no puede explicarse en términos de los atributos individuales de los actores. [22]

Aunque era conocido el término de red social, su aparición no data de hace demasiados años. La primera red social en Internet apareció en 1997. Randy Conrads fue el verdadero pionero del servicio, mediante la creación del sitio web que llevaba por nombre “Classmates”, y que consistía en una red social que brindaba la posibilidad de que las personas de todo el mundo pudieran recuperar o continuar manteniendo contacto con sus antiguos ami- gos. En España no es hasta mediados del año 2000 cuando las redes sociales comienzan a popularizarse.

En términos teóricos, las redes configuran contextos de comunicación e intercambio entre actores, configuran pautas operativas, normas y valores que condicionan la conducta de los actores en ellas y las posiciones son la clave para entender el comportamiento de los actores en cada red y el desempeño de la red en su conjunto.

Para la ciencia, el concepto de red social hace referencia a un conjunto finito de actores y relaciones (emociones, conductas, actitudes, etc) que los vinculan entre sí. Estas relaciones se pueden representar en forma de uno o varios grafos o mediante matrices, en las cuales las filas y columnas represen-

3 4 tan los actores y cada elemento de la matriz toma el valor 1 ó 0 dependiendo si existe relación entre el individuo de la fila i−ésima con el individuo de la columna j−ésima o no respectivamente.

Al igual que la máquina de vapor inició la revolución industrial del siglo XX, Internet, acrónimo de INTERconected NETworks (redes interconec- tadas), ha sido la precursora de una nueva revolución conocida como la nueva era digital. Una red que conecta redes de ordenadores entre sí, utilizando un lenguaje común que garantiza la intercomunicación de todos los participan- tes; este lenguaje común o protocolo se conoce como TCP/IP.

Los orígenes de internet datan de la década de los años 60 del siglo XX. La primera red interconectada de la historia, basada en el envío de bloques de información digitales (código binario) se creó entre la Universidad de Stan- ford y la Universidad de Ucla.

A finales de los 60 y principios de los 70, fue el departamento de defensa de los Estados Unidos el que desarrolló la primera gran red mundial de in- tercomunicación entre ordenadores conocida como Arpanet. Arpanet fue el origen de Internet y funcionaba bajo los primeros protocolos de comunicación que fueron desarrollados específicamente y que constituyen la base del desa- rrollo de los protocolos modernos TCP/IP en los que se basa la Red actual.

A finales de los 80 y principios de los 90, se desarrollaron las herramientas necesarias (hardware y software) para el desarrollo de esta red de redes. Entre ellas debemos destacar el importante papel del código HTML que se ha con- vertido en un lenguaje universal válido para cualquier plataforma (Windows, Macintosh, Unix, OS/2, etc.) y con cualquier navegador o browser (Netscape, Internet Explorer, Mozilla Firefox, etc.). Es notable también la creación de servidores para los sitios webs, el desarrollo de navegadores válidos para to- dos los sistemas y que han permitido a cualquier usuario el acceso a Internet con un simple clic de ratón.

En esta etapa de proliferación surge lo que hoy en día conocemos como la World Wide Web (WWW o Web). La WWW es un conjunto de protocolos que permite, de forma sencilla, la consulta remota de archivos de hipertexto utilizando Internet como medio de transmisión. Actualmente, la red expe- rimenta cada día la integración de nuevas redes y usuarios, extendiendo su amplitud y dominio, al tiempo que surgen nuevos mercados, tecnologías, insti- tuciones y empresas que aprovechan este nuevo medio, cuyo potencial apenas comenzamos a descubrir. A lo largo de los últimos años se han fundando mi- Análisis Estadísticos con R. Construcción de libros en R. 5 les de nuevas empresas que han diseñado un nuevo modelo de negocio basado en la red, entre ellas podemos citar: google, facebook, yahoo, ebay, wikipedia, etc. Son precisamente estas empresas el objetivo de nuestro estudio.

Simultáneamente con el desarrollo de estos nuevos entornos de trabajo y sistemas de comunicación, aparece la necesidad de estudiar y recoger la información que surge del establecimento de este nuevo tipo de relaciones y de los nuevos sistemas de transmisión y gestión del conocimento. La web y el desarrollo de las redes sociales constituyen una fuente inagotable de informa- ción en todos los campos de la ciencia y la investigación y han determinado la creación de nuevas ramas de investigación y análisis, así como el desarrollo de procedimientos que permitan no sólo la recogida de datos sino también su tratamiento.

Internet en general y las redes sociales en particular, proporcionan una importante fuente de información y recursos que deben ser considerados en el estudio de evolución de situaciones y que vendrán marcados por el esta- blecimiento de relaciones y conexiones entre los usuarios del sistema.

El uso masivo de las redes sociales en el mundo de Internet ha ido in- crementándose paulatinamente en los últimos años. Hoy en día, entornos de comunicación como Facebook, Twitter o LinkedIn se han convertido en algo imprescindible para millones de personas que dedican varias horas al día a relacionarse a través de ellas.

Pero las redes sociales no pueden considerarse sólo un sistema de comu- nicación. Son también un importante medio de transmisión de información, en tiempo real, que en los últimos tiempos está llegando a desbancar, en lo relativo a la eficacia, a los medios tradicionales de información, como son la prensa y la televisión. Mientras en estos grandes entes seleccionan la infor- mación a transmitir, las Redes Sociales informan, corroboran y desmienten sobre una gran variedad de hechos y situaciones con la ventaja añadida de que se "auto-regulan". Es decir, aunque es muy fácil a través de estos me- dios publicar cualquier noticia, la veracidad de la información transmitida es contrastada y ratificada con una gran velocidad. Este hecho vuelve a conver- tir este sistema de comunicación en una notable fuente de información que justifica y requiere un análisis detallado.

En este ámbito surge el concepto de Análisis de Redes Sociales. El aná- lisis de redes es un análisis estructural que se define como una metodología basada en un conjunto de técnicas analíticas que abarcan desde la obtención 6 de la información hasta la medición y obtención de conclusiones a partir del estudio de las relaciones entre las diferentes fuentes de información o la ocu- rrencia de determinados eventos.

1.1. Componentes de las redes

Las redes sociales definen y describen estructuras relacionales que surgen cuando diferentes organizaciones o individuos interaccionan, se comunican, coinciden, colaboran etc., a través de diversos procesos o acuerdos, bilatera- les o multilaterales. Las redes sociales son, por tanto, conjuntos de relaciones sociales o interpersonales que ligan individuos u organizaciones en “grupos”.

Para definir la estructura de una red y, en particular de las redes sociales, es necesario en primer lugar determinar las relaciones que interesan estudiar. Esto permite definir el criterio que determina si un individuo pertenece o no a una red y el número de individuos involucrados.

La teoría de grafos constituye el fundamento matemático del ARS apor- tando operaciones que permiten analizar y medir propiedades a la vez que comprobar el establecimiento de determinadas estructuras.

Un grafo G consiste en dos conjuntos de información: un conjunto de nodos, N = {n1, n2, .., ng} y un conjunto de líneas, L = {l1, l2, ...lL} entre pares de nodos. En un grafo hay g nodos y L líneas. Se dice que dos nodos son adyacentes si la línea lk = (ni, nj) está incluida en el conjunto de líneas L.

Estos conceptos básicos sobre los que se fundamenta la teoría de grafos constituyen también la base del ARS. A continuación, describimos los con- ceptos básicos del ARS:

Actores

Los actores de una red constituyen los nodos del grafo y pueden ser indivi- duos, grupos o instituciones, aunque bajo un mismo grafo pueden vincularse distintos tipos de actores.

Dependiendo de la naturaleza y cantidad de actores distinguimos los si- guientes tipos de redes: Análisis Estadísticos con R. Construcción de libros en R. 7

Redes modo 1 : son aquellas en las que se estudia un único conjunto de actores y las relaciones que los vinculan. Todos los actores tienen la misma naturaleza.

Redes modo 2 : en las que se estudian dos conjuntos de actores de na- turaleza distinta y las relaciones que los vinculan o un conjunto de actores, un conjunto de eventos y las relaciones que los vinculan. A estas redes se les conoce también como redes de afiliación o entidades sociales, ya que sus unidades son de naturaleza diversa.

Redes modo N : en las que se estudian 3 ó más conjuntos de entidades sociales.

El número de modos se refiere a la cantidad de tipos distintos de entidades sociales vinculados en una red.

Relaciones

Las relaciones representan la conexión entre un par de actores. Existen diferentes métodos para decidir cómo actuar en la recolección de medidas de las relaciones existentes entre los actores.

Métodos de redes completas: requieren la recogida de información acerca de los lazos con todos los demás. El énfasis está puesto en la estruc- tura general del grafo, considerando particularidades morfológicas que adopta, la interacción de subgrupos, ...

Los datos de redes completas nos conducen a descripciones muy poten- tes y a análisis de estructuras sociales. Desafortunadamente, pueden también ser muy costosos y difíciles de obtener. Obtener datos de cada miembro de una población y tener cada rango o índice de cada uno de los demás, pueden ser tareas desafiantes para cualquier grupo, excepto para los grupos pequeños. Por lo que una posible solución es pedir a los informantes que identifiquen un número limitado de individuos es- pecíficos con los cuales éstos tienen relaciones. Entonces, estas listas se compilan e interconectan. Pero, para grupos grandes la labor es prác- ticamente imposible. 8

Métodos de bola de nieve: comienzan centrándose en un actor o con- junto de actores y a cada uno de ellos se les pregunta por algunos de sus lazos con otros actores. Se toman todos los actores mencionados y se repite el proceso hasta que no se identifiquen nuevos actores o hasta que se decida detenerlo.

Este método presenta dos restricciones, una de ellas es que los actores que no estén conectados no pueden describirse a través de este méto- do. Y en segundo lugar, ¿cómo elegir los nodos iniciales?. En muchos estudios puede haber un punto de partida natural, pero en otros no.

Redes ego-céntricas: consisten en centrarse sobre un actor y sus rela- ciones con los demás. El objetivo es analizar cómo evoluciona el com- portamiento, las opciones y preferencias del actor en relación con los vínculos que establece.

Redes enfocadas en subgrupos de actores: se distinguen tres conjuntos: • Red diádica: se focaliza sobre pares de actores y la intensidad, robustez y duración del vínculo entre ellos. • Red triádica: el estudio involucra tres actores. • Clústeres: nos centramos en los subgrupos dentro de la red. Propiedades de las redes

Por propiedades de la red entendemos aquellas características que pueden ser objeto de análisis desde el ARS. En este trabajo distinguimos tres tipos:

Propiedades componenciales: el objetivo es identificar las características particulares de los distintos actores y comprobar si presentan regulari- dades entre ellas. Propiedades relacionales: implican centrarse en las relaciones que crean una red particular. Dos elementos importantes son las transacciones (se refieren a lo que se intercambia en las relaciones) y la naturaleza de las relaciones (cualidades de las relaciones entre actores). Propiedades estructurales: describen la forma en la que los actores se relacionan para formar la red. Estas propiedades son las utilizadas para los métodos de redes completas. Análisis Estadísticos con R. Construcción de libros en R. 9

Tipos de variables

Por la información que proporcionan las propiedades anteriores distingui- mos dos tipos de variables:

Variables estructurales: son el tipo de variables características del ARS. Miden las relaciones entre pares de actores específicos y su objetivo es analizar los datos para diseñar la red y analizar su estructura, su dinámica, etc. Abordan las propiedades relacionales y estructurales. Variables componenciales: Miden las características de los actores den- tro de una red, por lo que abordan las propiedades componenciales. Buscan generar datos para realizar una descripción estadística de los actores y detectar regularidades, patrones o tendencias. La evaluación de la red social de una persona o un conjunto de ellas, se realizará de acuerdo a las características estructurales, las funciones so- ciales cumplidas y los atributos de los lazos o relaciones específicos. Las ca- racterísticas estructurales incluyen tamaño (número de personas en la red), distribución (cuántas, en qué círculo y sector), densidad (conexión entre los miembros), el tipo de funciones presente y ausente, la homogeneidad/ hete- rogeneidad demográfica y sociocultural de la red y su dispersión (distancia geográfica entre los miembros).

En ocasiones, el interés no sólo se centra en la relación entre las personas sino el origen de dichas relaciones. A lo largo de esta memoria se expondrán diferentes procedimientos para llevar a cabo dichos análisis, utilizando para ello el entorno de programación estadística R.

1.2. Distintas redes sociales

La importancia de las Redes Sociales es cada vez mayor, tanto a nivel social como profesional. La mayor parte del tráfico de internet se debe a la utilización de estas redes, de modo tal que su número y presencia se ha multi- plicado exponencialmente en los últimos años. Sin embargo, no todas tienen la misma aceptación; la medición del éxito de una página web suele basarse en diferentes indicadores procedentes de diversas fuentes.

Es difícil concretar aquellos indicadores que pueden darnos una estima- ción del grado de consecución de los objetivos que estamos alcanzando con 10 nuestra página web. Esto es porque, entre otras cosas, cada tipo de publi- cación tiene distintos objetivos y porque el éxito de los mismos depende de diferentes criterios.

Uno de los indicadores más utilizados para medir la popularidad global de una web comparada con otras webs en internet, es el ranking de Alexa, es un indicador que nos proporciona información de la cantidad de tráfico que recibe una página web.

Alexa es una compañía subsidiaria de Amazon que fue fundada en 1996 por Brewster Kahle y Bruce Gilliat. Recibe su nombre por la famosa Biblio- teca de Alejandría donde se almacenaba la mayor colección de conocimiento de la antiguedad, haciedo el símil con Internet.

Alexa recoge diariamente datos de tráfico de millones de usuarios que tie- nen instalada la barra de herramientas de Alexa en su navegador y a partir de ellos crea el ranking; ordena las webs situando en primera posición la web más visitada, y las siguientes en función de su tráfico.

A nivel mundial, Alexa establece como red social de mayor volumen de tráfico a Facebook. Twitter ocupa la octava posición y Linkedin el lugar dé- cimo tercero. En el análisis por países, en España, Facebook ocupa la tercera posición y Twitter la sexta. Linkedin, en España continúa en la posición dé- cimo tercera (www.alexa.com).

Teniendo en cuenta este ranking, describimos a continuación las redes so- ciales con mayor difusión en la actualidad: Facebook, Twitter y LinkedIn.

1.2.1. Facebook Facebook fue creada por Mark Zuckerberg (2004) durante su permanencia en la Universidad de Harvard. El objetivo de esta red era diseñar un espacio en el que los alumnos pudieran mantener comunicaciones fluidas y compartir contenidos de forma sencilla a través de Internet. El éxito de esta primera etapa condujo a que, en septiembre de 2006 se abriera a nivel mundial, fina- lizando el año con más de 140 millones de usuarios.

En 2008, Facebook se convierte en la red social más utilizada del mundo, con más de 200 millones de usuarios. Su extensión y aceptación a lo largo de los años ha seguido creciendo y en la actualidad, Facebook se ha posicionado Análisis Estadísticos con R. Construcción de libros en R. 11 como la más importante de las redes sociales, superando los 800 millones de usuarios conectados a través de ella.

El funcionamiento de Facebook ha determinado el del resto de las redes sociales actuales. La expansión a nivel mundial y los volúmenes de informa- ción que a diario maneja esta red han establecido las condiciones de partida de cualquier red social.

En Facebook existen distintos tipos de cuentas: las creadas a nivel indivi- dual y las dirigidas a nivel de empresa. Las primeras son totalmente gratuitas y permiten la comunicación fluida entre personas reales; las segundas sirven para ofrecer productos o servicios y mantener contacto cercano entre em- presas y clientes. A su vez, en las cuentas de empresas existen las versiones gratuitas y las de pago, estas últimas ofrecen más prestaciones, permitiendo una mayor visibilidad a la compañía pertinente.

Los pasos a dar para crear una cuenta en Facebook son los siguientes:

1. El usuario debe registrarse con sus datos personales y una cuenta de correo electrónico.

2. Una vez aceptada la solicitud, es posible comenzar a publicar informa- ción personal en el perfil del usuario y crear de este modo un entorno personal dentro de la red social.

3. Durante todo el proceso, esta red permite "añadir amigos" o "buscar pesonas". Para ello Facebook dispone de un buscador específico que permite encontrar individuos concretos a partir de información puntual, o establecer conexiones de carácter general a partir de la información que se le va suministrando al sistema y que permite establecer relaciones con los diferentes usuarios de Facebook en base a "amigos" comunes o de la información suministrada por el correo electrónico del usuario.

Entre las características más relevantes de Facebook podemos citar:

1. La facilidad de compartir contenido, ya sea links, fotos o videos.

2. La posibilidad casi sin límites de subir las fotos.

3. La interfaz sencilla, aún para el usuario no experimentado en la nave- gación web. 12

4. La facilidad de convertirse en miembro y crear una cuenta.

5. La facilidad que agrega el chat, nunca vista, que hace que no sea nece- sario una herramienta de terceros para comunicarse en tiempo real.

6. La integración de mensajes y correos electrónicos.

7. Las recomendaciones de nuevos amigos, muchas veces acertadas.

8. Las exitosas páginas de fans beneficiosas para negocios, empresas y marcas.

9. La posibilidad de los desarrolladores de crear aplicaciones para inte- grarlas y ganar dinero por ello.

10. La instantaneidad de los mensajes compartidos. Llegan a una audiencia amplísima, que de forma inmediata tienen en sus manos información variada y actualizada con la que generar una conversación activa.

11. Dispone de aplicaciones basadas en una de red juegos, como una forma de conectarse y divertirse con los amigos.

12. La facilidad de crear grupos para compartir información.

13. Ser un servicio gratuito.

Estas son, entre otras, las características que hacen que Facebook sea la red preferida, tanto para personas, negocios y empresas.

1.2.2. Twitter Twitter es una de las redes más importantes en transmisión de noticias. Es una red de microblogging (servicio que permite a sus usuarios enviar y publicar mensajes breves, generalmente sólo de texto) que permite escribir y leer mensajes en Internet que no superen los 140 caracteres. Sus 140 caracte- res y la posibilidad de generar "tags" con información relevante produce una rápida expansión de los sucesos ocurridos. Es, por ello, una red interesante para enviar información de empresa y responder rápidamente a las interac- tuaciones con los usuarios.

Twitter surge en el 2006 de la mano de Jack Dorsey, Evan Williams y Biz Stone en San Francisco (Estados Unidos) como una nueva forma de comu- nicarse, de mandar actualizaciones sencillas a un grupo de amigos de forma Análisis Estadísticos con R. Construcción de libros en R. 13 instantánea, de compartir momentos de tu vida, de acercar a las personas y mantenerlas en contacto a pesar de la distancia, sin embargo, esto ha ido cambiando a través del uso que le han dado las personas, convirtiéndolo en una herramienta de información capaz de llegar a un gran número de perso- nas en tiempo real y de utilizarlo en muchos ámbitos como son la política, los negocios, ...

Esta red es una aplicación web gratuita que reúne las ventajas de los blogs, las redes sociales y la mensajería instantánea. Esta nueva forma de comunicación, permite a sus usuarios estar en contacto en tiempo real con personas de su interés a través de mensajes breves de texto a los que se denominan tweets. Es la plataforma de comunicación en tiempo real más im- portante que existe actualmente.

Una de las características más destacables de Twitter y que además dife- rencia esta red de otros blogs es su asimetría. El establecimiento de relaciones entre personas (actores) en Twiter no viene establecido por un acuerdo pre- vio entre ellos, como ocurre en Facebook. Es posible acceder a opiniones de diferentes usuarios sin establecer una relación o unos permisos previos.

Para crear una cuenta en twitter son necesarios los siguientes pasos:

El usuario debe registrarse con su información personal y una cuenta de correo electrónico.

Una vez efectuado el registro, twitter ofrece al usuario una lista de sugerencias sobre posibles líneas de comunicación/información (cuen- tas) que pudieran ser de interés. Estas cuentas suelen ser de famosos o empresas relevantes que Twitter elige al azar.

El usuario debe definirse un perfil en el que puede incluir la información personal que considere relevante e imágenes.

Una vez establecido el perfil, es posible comenzar a publicar información u opiniones personales a través de lo que, en esta red social, se conoce como tweets. La publicación de un tweet puede tener diferentes matices, puede ser un mensaje individual o bien estar asociado a lo que se denominan hastags en twitter. Los hastags o etiquetas están formados por una cadena de carac- teres formada por una o varias palabras concatenadas y precedidas por una almohadilla (#). Estas etiquetas permiten al usuario identificar un tema de comunicación de manera sencilla y rápida. La utilización de hastags en las 14 publicaciones de los usuarios facilitan tanto la difusión como el acceso a los tweets publicados (al hacer clic en un hashtag, Twitter realiza una búsqueda y devuelve los mensajes de todos los usuarios que hayan utilizado ese mismo hashtag).

Llegados a este punto, es preciso detenerse un instante en la terminología empleada en Twitter. Además de los conceptos ya mencionados anteriormente como el tweet o el hastag, debemos destacar también el concepto de seguidor o follower, referido a aquellos usuarios que siguen una cuenta. Trending to- pics son los temas más mencionados durante el día, vienen determinados por el uso masivo de un mismo hastag , los trendingtopis en twitter indican los temas de mayor interés para los usuarios. Por último, el término retweetear hace referencia al proceso de compartir una noticia publicada en otra cuenta, para que los seguidores de un usuario la conozcan.

Actualmente, Twitter nos informa que cuenta con 175 millones de usua- rios registrados alrededor del mundo. Los usos de la red social Twitter se han ido transformando a lo largo del tiempo, pasando de ser una herramienta de comunicación social a un instrumento profesional con fines mucho más sofisticados. Pero, ¿cuáles son los principales usos de Twitter?:

Envío y recepción de mensajes de texto de 140 caracteres de extensión máxima.

Estar permanentemente informado sobre temas de interés.

Contacto ininterrumpido con el resto de usuarios.

Fomentar una información de importancia mediante el "twitteo" o el “retweet”.

Uso profesional para relacionarse con otras empresas.

Interactuar con los clientes de la empresa y conocer sus preferencias.

Comunicarse con los empleados.

Empleo de Twitter como herramienta de promoción de los productos.

Compartir noticias, imágenes o vídeos de relevancia para la empresa.

Permite seleccionar el idioma de preferencia, estando disponible en in- glés, español, italiano, francés, japonés y alemán. Análisis Estadísticos con R. Construcción de libros en R. 15

Colaborar con diversas obras sociales.

Empleo estratégico de símbolos como @ para cuentas de correo electró- nico para dirigir mensajes privados, y la almohadilla # para agregar una categoría a un tema.

1.2.3. LinkedIn

LinkedIn es una red social para profesionales orientada a hacer conexiones profesionales y de negocios, que contaba con más de 25 millones de usuarios en 2008.

Esta red social fue fundada en diciembre de 2002 y lanzada en mayo de 2003, por su creador Reid Hoffman; aunque no ha sido rentable hasta 2006.

El perfil en LinkedIn de un usuario es su curriculum on line, por lo cual puede actualizar constantemente cada información. A través de dichos perfi- les podrá generar redes y contactos. Sus utilidades son variadas, entre ellas, para encontrar expertos, ideas y oportunidades, para conversar y compartir conocimiento, para mantenerte en contacto con colegas de trabajo y amigos.

Cada perfil es una carta de presentación y por tanto, cuanto más comple- to esté será mejor para el usuario a la hora de establecer conexiones y de ser encontrado. Además es algo único y diferenciador. Debe ser completado con toda la información de la que disponga, su educación y experiencia profesio- nal y no debe olvidarse de incluir todas sus habilidades y palabras clave por las que le gustaría ser encontrado, ya que hay personas que están buscando cualidades muy concretas que puede que el usuario tenga.

No es sólo una red social donde subir su curriculum vitae, ya que las últimas aplicaciones y funcionalidades como foros, grupos e interconexión de otras redes sociales, la han hecho una herramienta super eficaz para crear conexiones con profesionales de todos los ámbitos, lugares y posiciones.

Se diferencia de redes como Facebook porque su objetivo principal es ayu- dar a los profesionales de todos los sectores a encontrar otros profesionales, ponerse en contacto con ellos, generar negocios y ampliar contactos en todos los sentidos: consultoría, asesoría, trabajo, colaboración ... 16 1.3. La computación estadística en las redes.

Una vez analizadas las redes sociales más importantes, surge la necesi- dad de analizar la información que estas redes suministran. Como ya hemos destacado en secciones anteriores, el volumen de información generado en tiempo real que suministran estos nuevos entornos requiere de la aplicación de procesos computacionales específicos que permitan, por un lado obtener la información y depurarla convenientemente y, por otra parte, analizar los datos obtenidos manteniendo las relaciones entre los datos establecidas a tra- vés de los usuarios de las redes.

En el análisis de redes sociales, si bien es cierto que se utiliza una ter- minología especializada para describir la estructura y los contenidos de los conjuntos de observaciones obtenidos, los datos pueden y deben describirse utilizando los conceptos y procedimientos tradicionales de la estadística mul- tivariante.

En el análisis de redes sociales es fundamental detenerse en la estructura de los datos. Dado que es esta estructura la que va a permitir comparar el grado de similitud entre actores en base a los atributos que los definen. Cada dato obtenido de una red social no sólo responde a una serie de cuestiones definidas según el estilo convencional de los análisis, sino que establece un conjunto de relaciones con el resto de individuos a partir de las cuales los resultados cobran un cariz mucho más importante. No sólo se obtiene infor- mación sobre quién es parecido a quien por las preferencias que muestran sino también por los individuos que han accedido a ellos. La selección de individuos aporta también información sobre patrones de comportamiento. En el análisis de redes sociales, la estructura de las conexiones asociadas a cada actor es la que define a dicho individuo y no sus atributos como ocurre en los análisis tradicionales.

El análisis estadístico de redes sociales requiere por tanto, no el desarrollo de nuevas técnicas sino la reorientación de las ya conocidas. A lo largo del documento veremos el sentido de esta afirmación. Se aplicarán técnicas de análisis estadístico ya conocidas pero orientadas al análisis de las relaciones entre los individuos y a la determinación del comportamiento social.

Centraremos nuestro estudio en el análisis de la red social Twitter. Son varias las razones que nos han impulsado a su selección, entre otras, podemos citar: Análisis Estadísticos con R. Construcción de libros en R. 17

La longitud de los mensajes de twitter.

La no necesidad de establecer vínculos previos entre los actores. Cual- quier usuario de twitter puede seguir a cualquier usuario. Este hecho permite el establecimiento de conexiones de segundo orden, o lo que Granovetter (1973-1983) llama lazos débiles. Estos lazos débiles son muy importantes ya que aumentan drásticamente la exposición de la información.

La existencia de libros específicos en el entorno de computación esta- dística R para el análisis de esta red social.

Es precisamente el análisis de estos libros uno de los objetivos principales de este trabajo. En los próximos capítulos se expondrán algunas de las téc- nicas estadísticas más utilizadas en el análisis de redes sociales así como los libros y funciones de R utilizados para llevar a cabo este análisis. En el último capítulo se expondrá una aplicación práctica basada en la repercusión social que ha tenido la serie televisiva: The walking dead. El impacto de esta serie en los medios sociales ha sido motivo de diversos estudios en este campo. En nuestro trabajo queremos mostrar algunos resultados al respecto. 18 Capítulo 2

Data Mining

2.1. Introducción

Las redes sociales proporcionan gran cantidad de información que es nece- saria gestionar para poder extraer conclusiones acerca de los datos publicados por los usuarios.

La disponibilidad de grandes cantidades de datos impide que los datos se analicen de forma manual. Entonces surge la necesidad de usar nuevas técnicas estadísticas, cuyo objetivo sea convertir los datos en conocimiento para extraer conclusiones.

El proceso de extraer conocimiento útil y comprensible, previamente des- conocido a partir de grandes cantidades de datos, convertidos en información y almacenados en distintos formatos se conoce como minería de datos (Wit- ten y Frank, 2000). La minería de datos utiliza el análisis matemático para deducir los patrones y tendencias que existen en los datos. Generalmente, estos patrones no se pueden detectar mediante la exploración de los datos porque las relaciones son demasiado complejas o porque hay demasiados.

Además, la minería de datos hace uso de todas las técnicas que puedan aportar información útil, desde un sencillo análisis gráfico, pasando por mé- todos estadísticos más o menos complejos, complementados con métodos y algoritmos del campo de la inteligencia artificial y el aprendizaje automático que resuelven problemas típicos de agrupamiento automático, clasificación, predicción de valores, detección de patrones, asociación de atributos, etc. Es, por tanto, un campo multidisciplinar que cubre numerosas áreas y se aborda desde múltiples puntos de vista, como la estadística, la informática (cálculo

19 20 automático) o la ingeniería.

Es necesario distinguir el tipo de información que se desea extraer de los datos para decidir cuál es la técnica más adecuada para tomar una decisión en una determinada situación. Según su nivel de abstracción, el conocimiento contenido en los datos puede clasificarse en distintas categorías y requerirá una técnica más o menos avanzada. Distinguimos en función de su propósito general los métodos supervisados o predictivos y los métodos no supervisados o de descubrimiento del conocimiento para estudiar las relaciones entre los tweets publicados en la red social Twitter.

2.2. Métodos supervisados

Los métodos supervisados son llamados así porque cuentan con cono- cimiento a priori. Se caracterizan porque el aprendizaje de los métodos se realiza a partir de ejemplos. A cada ejemplo se le provee su salida deseada, llamada clase o categoría, y en base a ésta ajustan sus parámetros. Estos parámetros se van ajustando y modificando con el objetivo de que la salida obtenida sea lo más próxima a la salida deseada, o equivalentemente, mini- mizando la función de error. El éxito del aprendizaje de clasificación puede ser juzgado probando con un conjunto de datos cuya clasificación es conoci- da, pero no fue proporcionada al método durante el entrenamiento. Algunos métodos supervisados son: las redes neuronales, los árboles de decisión, la regresión, ...

2.2.1. Redes neuronales Las redes neuronales artificiales están inspiradas en las redes neuronales biológicas del cerebro humano. En las Redes Neuronales Artificiales la uni- dad análoga a la neurona biológica se denomina elemento procesador. Este elemento es la unidad de la red neuronal artificial que posee la capacidad li- mitada de calcular, en general, una suma ponderada de sus entradas y luego aplicar una función de activación para obtener una señal que será transmitida a la próxima neurona.

En la última década las Redes Neuronales Artificiales se han convertido en uno de los instrumentos de uso frecuente para detectar categorías comu- nes en los datos, debido a que son capaces de detectar y aprender complejos patrones, y características de los datos por medio de algoritmos. Análisis Estadísticos con R. Construcción de libros en R. 21

Una de las principales características de las redes neuronales, es que son capaces de trabajar con datos incompletos e incluso paradójicos, que depen- diendo del problema puede resultar una ventaja o un inconveniente. Se trata de un sistema de interconexión de neuronas en una red que colabora para producir un estímulo de salida.

2.2.2. Árboles de decisión El árbol de decisión es un gráfico de los más útiles y utilizados que nos sirven como herramienta para la toma de decisiones teniendo varias alter- nativas posibles. Su estructura permite seleccionar una y otra vez diferentes opciones para explorar las diferentes alternativas posibles de decisión.

El nombre de árbol de decisión proviene de la forma que adopta el mode- lo, semejante a un árbol. Está formado por múltiples nodos cuadrados, que representan los puntos de decisión, y de los cuales surgen ramas que repre- sentan las distintas alternativas.

Los árboles de decisión son fáciles de usar, admiten atributos discretos y continuos, tratan bien los atributos no significativos y los valores faltantes. Su principal ventaja es la facilidad de interpretación.

2.2.3. Regresión La regresión es una técnica estadística que permite cuantificar la relación existente entre variables. El principal objetivo es determinar una función ma- temática sencilla que describa el comportamiento de una variable dados los valores de otra u otras variables.

La primera forma de regresión fue el método de mínimos cuadrados, que fue publicado por Legendre en 1805, y por Gauss en 1809. Legendre y Gauss aplicaron el método para el problema de determinar, a partir de observacio- nes astronómicas, las órbitas de los cuerpos sobre el Sol.

Aunque el término "regresión" fue acuñado por Francis Galton en el siglo XIX para describir un fenómeno biológico. El fenómeno fue que las alturas de los descendientes de los antepasados altos tienden a regresar hacia abajo, 22 hacia un promedio normal.

Actualmente existen distintos modelos de regresión como la regresión li- neal, la logarítmica,...

2.3. Métodos no supervisados

En los métodos no supervisados no se intenta alcanzar un objetivo en particular, sino que el algoritmo busca patrones y estructuras ocultas, no conocidas de antemano, entre las variables. En éstos no existe ningún criterio que indique si la clasificación es correcta o incorrecta pues no se dispone de ninguna salida objetivo hacia la cuál deben tender. Los resultados deben ser luego analizados para darles una interpretación. Se explican brevemente algunos de estos métodos: el método Cluster, las reglas de asociación y el escalamiento multidimensional.

2.3.1. Cluster El análisis Cluster es un conjunto de métodos o técnicas estadísticas que permiten describir y reconocer diferentes agrupaciones que subyacen en un conjunto de individuos o unidades de observación, es decir, permiten clasifi- car o dividir en grupos más o menos homogéneos, un conjunto de individuos que están definidos por diferentes variables.

Su objetivo es la identificación de grupos (clusters) homogéneos. Signifi- ca que los objetos de un mismo grupo deben ser muy similares entre sí (la varianza entre los elementos es pequeña) y los de los objetos de clusters dife- rentes deben ser distintos (la varianza entre los elementos de distintos grupos alta).

2.3.2. Reglas de asociación Las reglas de asociación en la minería de datos fueron introducidas por Agrawal, Imielinski y Swami en 1993 con una aplicación práctica, el análisis de información de ventas para el mercado.

Éstas representan unas de las técnicas más valiosas e interesantes para la extracción de conocimiento oculto en grandes volúmenes de datos (bases de Análisis Estadísticos con R. Construcción de libros en R. 23 datos).

Se utilizan para descubrir hechos que ocurren en común dentro de un determinado conjunto de datos. Se han investigado ampliamente diversos métodos para aprendizaje de reglas de asociación que han resultado ser muy interesantes para descubrir relaciones entre variables en grandes conjuntos de datos.

2.3.3. Escalamiento El escalamiento multidimensional, más conocido como Multidimensional Scaling (MDS), tiene sus orígenes a principios del siglo XX en el campo de la Psicología. Surge cuando se pretendía estudiar la relación existente entre la intensidad física de ciertos estímulos con la intensidad subjetiva.

El MDS es una técnica de representación espacial que trata de visuali- zar sobre un mapa un conjunto de estímulos (firmas, productos, candidatos políticos, ideas u otros artículos) cuya posición relativa se desea analizar. El propósito del MDS es transformar los juicios de similitud o preferencia llevados a cabo por una serie de individuos sobre un conjunto de objetos o estímulos en distancias susceptibles de ser representadas en un espacio mul- tidimensional, es decir, comparar objetos o estímulos de forma que si un individuo juzga a los objetos A y B como los más similares entonces las téc- nicas de MDS colocarán a éstos de forma que la distancia entre ellos es más pequeña que la distancia entre cualquier otro par de objetos. En definitiva, el MDS es una técnica multivariante que crea un gráfico aproximado a partir de las similitudes o preferencias de un conjunto de objetos. 24 Capítulo 3

Análisis de sentimientos

3.1. Introducción

Como ya hemos indicado anteriormente, las redes sociales constituyen una importante fuente de información sobre los individuos y las relaciones que se establecen entre ellos, pero también aportan datos sobre las opiniones o los sentimientos que aparecen en los individuos respecto a temas concre- tos abordados en las redes sociales. El Análisis de Sentimientos, también conocido como Extracción de Opiniones, Minería de Opiniones, Minería de Sentimientos o Análisis Subjetivo, tiene como objetivo clasificar las opiniones mediante procesamientos computacionales, según la polaridad de las emocio- nes.

El análisis de sentimientos se ha convertido en los últimos tiempos en el principal indicador del éxito de una campaña (o, como en nuestra aplica- ción práctica, de una serie televisiva). En su estructura básica, consiste en determinar el porcentaje de las tres posturas elementales: positiva, negativa o neutra. Estos análisis si bien aportan valor a la investigación no terminan de aportar conclusiones. Es por esta razón que en la actualidad esta línea de análisis constituye uno de los campos de investigación dentro de las redes sociales en mayor auge.

En este sentido, el objetivo de los investigadores es ampliar el campo de búsqueda y detectar esos sentimientos en distintas frases como pueden ser los comentarios comparativos o incluso los comentarios irónicos respecto a temas concretos. Expertos del Laboratorio de Ingeniería en Lenguaje Natural (Lab NLE), integrado en el Grupo de Ingeniería del Lenguaje Natural y Reconoci- miento de Formas (ELiRF) de la Universitat Politècnica de València (UPV)

25 26 han desarrollado un nuevo método para la detección automática de la ironía en las opiniones vertidas en las redes sociales.

Este método está basado en analizar algunas características, que varios expertos consideran importantes, lingüísticamente, para describir la ironía. "Dado que dichas características a menudo caen en cuestiones muy abstrac- tas que difícilmente podrían tener una formalización computacional, lo que hacemos es traducir las características abstractas de la ironía a patrones tex- tuales que nos permitan representar el núcleo de significado y, sobre todo de uso, respecto de este cconcepto", señala Rosso. [21]

Pero, ¿cómo se lleva a cabo esta clasificación? A continuación se muestran algunos métodos para ello.

3.2. Clasificadores

La tarea de la clasificación de textos se lleva a cabo mediante la construc- ción y comparación de diversos clasificadores. Existen tanto clasificadores que utilizan algoritmos supervisados como no supervisados. En esta sección se estudian dos de los más importantes, el Clasificador de Naïve Bayes y las máquinas de soporte vectorial. Aunque existen otros muchos como por ejem- plo el método del k−vecino más cercano que estima la función de densidad de los datos que se desean predecir, basándose de entrenamientos y proptotipos.

3.2.1. Clasificador Naïve Bayes Es un clasificador probabilístico basado en el teorema de Bayes, quien utilizó las matemáticas para encontrar la mejor clasificación y así descubrir el conocido teorema de la probabilidad. Es un método importante no sólo porque ofrece un análisis cualitativo de las características y valores que pue- den intervenir en el problema, sino porque también muestra la importancia cuantitativa de éstos.

Este clasificador es uno de los más utilizados por su simplicidad y ra- pidez. Se trata de una técnica de clasificación y predicción supervisada, es decir, necesita de ejemplos previos que ayudan a clasificar los datos y así poder construir modelos que predicen la probabilidad de resultados. Análisis Estadísticos con R. Construcción de libros en R. 27

Este método será utilizado para clasificar un documento dentro de un conjunto finito F de clases predeterminadas. Esto significa que, dada una clase C y un conjunto de palabras W del nuevo documento, se calcula la probabilidad de que dicho documento se clasifique en la categoría C,

P (W |C)P (C) P (C|W ) = P (W ) . La mejor clase es aquella que maximice esta probabilidad.

3.2.2. Support Vector Machines Las máquinas de vectores soporte (SVM, del inglés Support Vector Ma- chines) tienen su origen en los trabajos sobre la teoría del aprendizaje estadís- tico y fueron introducidas en los años 90 por Vapnik. Aunque originariamente las SVMs fueron pensadas para resolver problemas de clasificación binaria, actualmente se utilizan para resolver otros tipos de problemas como la regre- sión.

Las máquinas de vectores soporte son un conjunto de algoritmos super- visados de clasificación binaria (en este caso sentimiento negativo o positivo) cuyo objetivo es encontrar un hiperplano que separe de forma óptima las características del conjunto de datos en dos grupos siendo esta separación la máxima posible. Los márgenes que definen esta separación entre las clases se conocen como vectores soporte (support vectors). Esto nos permitirá saber a qué lado del hiperplano se encuentra una muestra desconocida previamente.

Esta función clasificadora o hiperplano tiene que minimizar el error en la separación de los objetos dados y maximizar el margen de separación. De esta forma sea S = {x1, x2, . . . , xn} un conjunto de objetos, de forma que algunos pertenecen a la clase C− y los restantes a C+. Para construir el hiperplano H = {x ∈ X : wx + b = 0} con w 6= 0 y b ∈ R deben verificarse dos condiciones:

Los ejemplos de la clase C− (C− = {xi ∈ X : wxi + b < 0}) deben quedar a un lado del hiperplano y los de la clase C+ (C+ = {xi ∈ X : wxi + b > 0}) al otro. El margen del hiperplano (ρ) debe ser máximo. Está definido como dos veces la distancia desde el hiperplano al ejemplo más cercano. Mate- máticamente,

2yj (wxj +b) ρ = m´axw ||w|| 28

sujeto a

2yi(wxi+b) j = m´ıni ||w|| ∀i ∈ I,

donde yi = {1, −1} indica a qué clase pertenece el ejemplo i e I es el conjunto de los índices de todos los ejemplos del problema. Existen infinitos hiperplanos que pueden ser elegidos pero para la elec- ción del hiperplano óptimo se debe resolver el siguiente problema de optimización

1 2 m´ın 2 ||w||

sujeto a

yi(wxi + b) ≥ 1.

Es decir, hallar el hiperplano de máximo margen es un problema de optimización cuadrática. Con esto, la función de decisión para clasificar datos futuros es

f(x) = signo(wx + b).

En muchas ocasiones, los ejemplos que componen los datos de entrada no son linealmente separables. En tales casos, lo que se puede hacer es aplicar una transformación a los ejemplos trasladándolos a un espacio de mayor dimensión en los cuales un hiperplano sí sea capaz de dividirlos en dos clases. Este problema es similar al anterior pero en lugar de tener los puntos de los ejemplos utilizamos sus transformaciones. Capítulo 4

Análisis de datos en la red Twitter

4.1. Introducción

Un requisito necesario para realizar un análisis de redes sociales es la obtención de los datos. Tradicionalmente, los científicos recopilaban datos manualmente, esta recopilación era lenta y costosa, además era propensa a errores debido a las diferencias entre codificadores y dentro de los codifica- dores.

Debido a que cada día existen más y más empresas que manejan una in- calculable cantidad de información y la gestión de datos proveniente de redes sociales, como las citadas anteriormente, o páginas webs surge el concepto de Big Data. Éste se define como el conjunto de herramientas informáticas destinadas a la manipulación, gestión y análisis de grandes volúmenes de da- tos de todo tipo los cuales no pueden ser gestionados por las herramientas informáticas tradicionales.

En este capítulo explicaremos cómo analizar los datos de Twitter utili- zando para ello el entorno de computación estadística R. En primer lugar, comentamos brevemente algunas características de R, y a continuación las órdenes y libros necesarios para leer y analizar éstos datos.

29 30 4.2. Lenguaje R

R es un conjunto integrado de programas para manipulación de datos, cálculo y gráficos. También puede definirse como una nueva implementación del lenguaje S. Es un software de código libre, además tiene una expansiva funcionalidad y se actualiza constantemente, gracias a la gran cantidad de personas que lo utilizan y su desarrollo.

R fue desarrollado en los años 90, por Robert Gentleman y Ross Ihaka en la Universidad de Auckland en Nueva Zelanda. Éstos abordaron la tarea de diseñar un software con la intención de crear un lenguaje didáctico para ser utilizado en el curso de Introducción a la Estadística. Para ello, adoptaron la sintaxis del lenguaje S, desarrollado por Bell Laboratories, por esto R se considera la versión libre de S o S-Plus.

En el año 1996 surge la primera versión cuyas dos características prin- cipales eran ser un software de libre disposición y ser abierto, es decir el programa sería gratuito y estaría a disposición de cualquier usuario, lo que permitía introducir modificaciones según las preferencias de éste. Tras circu- lar esa primera versión entre estadísticos y expertos en computación y recibir apoyo de todo el mundo, en el año 2000, aparece la primera versión oficial, la versión 1.0. Desde entonces se ha producido un gran desarrolllo y actualmen- te está disponible la versión 3.2.0. Una de las grandes ventajas de R es que hoy en día su desarrollo es el esfuerzo de colaboración de miles de personas en todo el mundo. Su utilización se ha extendido tanto en el sector académico como en el de la empresa.

El código de R está disponible como software libre bajo las condiciones de la licencia GNU-GPL, y puede ser instalado tanto en sistemas operativos tipo Windows como en Linux o MAcOS X.

Entre otras características de R destacamos las siguientes: Almacenamiento y manipulación efectiva de datos. Operadores para cálculo sobre variables indexadas (arrays), en parti- cular matrices. Una amplia, coherente e integrada colección de herramientas para aná- lisis de datos. Posibilidades gráficas para análisis de datos, que funcionan directamen- te sobre pantalla o impresora, y Análisis Estadísticos con R. Construcción de libros en R. 31

Un lenguaje de programación bien desarrollado, simple y efectivo, que incluye condicionales, ciclos, funciones recursivas y posibilidad de en- tradas y salidas. (Debe destacarse que muchas de las funciones sumi- nistradas con el sistema están escritas en el lenguaje R)

El término "entorno" lo caracteriza como un sistema completamente di- señado y coherente, antes que como una agregación incremental de herra- mientas muy específicas e inflexibles, como ocurre frecuentemente con otros programas de análisis de datos.

4.3. Obtener datos de Twitter

Como se ha comentado anteriormente la obtención de datos es el pri- mer paso a realizar antes de llevar a cabo un análisis. Para obtener los da- tos 3de la red social Twitter es necesario crearse una cuenta en ésta red. Una vez creada, puede acceder a su cuenta y crear una nueva aplicación (https://apps.twitter.com/). Automáticamente le aparecerá un formulario en el cuál debe aportar la información solicitada, sobre todo los campos obliga- torios, es decir, el nombre, la descripción y el sitio web.

Terminado el formulario, aparece una página con la información de su aplicación. Ahora puede comenzar a trabajar con R. El primer paso es ins- talar el libro twitteR que permite la obtención de los datos de la red. Para ello, bastará con varias líneas de código. Además, si el sistema operativo es Windows descargue el archivo cacert.pem, ya que es un sistema de transfe- rencia de internet. Éste contiene un conjunto de certificados digitales que se utilizan para verificar que el servidor es correcto. La orden necesaria es:

download.file(url="http://curl.haxx.se/ca/cacert.pem", destfile="C:/.../cacert.pem")

donde el primer argumento es la url, es decir la dirección de internet de dónde se descarga el archivo, y el argumento destfile es el lugar de destino, es decir, el lugar de su ordenador en el que este archivo quedará almacenado. 32

A continuación, se crean dos objetos denominados my.key y my.secret. Cada uno de ellos es una de las claves, "Consumer Key (API Key)" y "Con- sumer Secret (API Secret)", incluidas en la web de la aplicación creada an- teriormente. Para crear estos objetos incluimos en R el siguiente código:

my.key <- "XX" my.secret <- "XX"

Una vez hecho esto, se pasa esta información a una función llamada OAuthF actory. Esta función se utiliza para proporcionar la acreditación necesaria de acceso de OAuth a su cuenta. Con el siguiente fragmento de código autorizaremos a R a leer los datos, donde los objetos anteriores y requestURL, accessURL y authURL son los parámetros necesarios para ob- tener la autorización. cred <- OAuthFactory$new(consumerKey=my.key, consumerSecret=my.secret, requestURL= " https://api.twitter.com/oauth/request\_token", accessURL=" https://api.twitter.com/oauth/access\_token", authURL=" https://api.twitter.com/oauth/authorize")

Para acceder a los datos de Twitter debido a que cambió su política API, (Interfaz de Programación de Aplicaciones, es el conjunto de funciones y pro- cedimientos o métodos que ofrece cierta biblioteca para ser utilizado por otro software) es necesario realizar la siguiente orden, incluyendo la ruta completa en la que guardó el archivo cacert.pem. Con ello se abre una dirección URL en la consola de R, que tendremos que copiar y pegar en un navegador. Así se tiene acceso a una página de Twitter que le suministrará un código numérico que debe copiar y pegar en R después de la llamada

cred$handshake(cainfo="C:/.../cacert.pem") Análisis Estadísticos con R. Construcción de libros en R. 33

Por último, se guardan todos estos datos para sus usos posteriores en una carpeta, mediante la función save() y comprobamos que funcionan correcta- mente con registerT witterOAuth, mediante las dos siguientes líneas:

save(cred, file="C:/.../twitter authentication.Rdata") registerTwitterOAuth(cred)

Ya estamos preparados para comenzar la extracción de datos de Twitter.

4.4. Análisis de datos de Twitter

El análisis práctico que presentamos está basado en el análisis de la re- percusión social de la serie televisiva The Walking Dead. Concretamente, el momento del análisis es el comienzo del rodaje de la nueva temporada de ésta. The Walking Dead es una serie de televisión dramática y de terror es- tadounidense creada y producida por Frank Darabont y basada en el cómic homónimo de Robert Kirkman. La serie está protagonizada por (Andrew Lincoln), un oficial de policía que al despertar de un coma se en- cuentra con un mundo repleto de zombis salvajes. Al encontrar a su familia, se une a un grupo de supervivientes a los que llega a encabezar. La historia, ambientada principalmente en Georgia, Estados Unidos, narra las vivencias de dicho grupo, el cual se enfrenta tanto a la plaga de zombis que se ha esparcido por el país, como a otros grupos de humanos que también luchan por subsistir. [18]

Esta serie constituye un claro referente del potencial actual de las redes sociales, la revista digital Social Media Today cita textualmente: "Empiezas con una persona que difunde una idea, y al final esa idea puede llegar a mi- llones", en referencia a esta serie que no sólo destaca por su aceptación entre el público sino que también se ha convertido en un modelo de marketing en el ámbito de las redes sociales. [24]

Planteamos a continuación la estrategia a seguir con el entorno de compu- tación R para obtener datos de twitter a partir de un hastag, en nuestro caso #thewalkingdead. Utilizaremos términos en inglés aunque Twitter también 34 permite realizar la búsqueda en español. Una vez obtenida la información procederemos a la depuración de ésta para su posterior análisis, aplicando para ello tanto técnicas de análisis de datos como de análisis de sentimientos tal y como expusimos en las secciones anteriores.

Trabajaremos con los libros twitteR, tm y wordcloud de R. El libro twit- teR proporciona una interfaz para la API de Twitter que permite extraer información a partir de esta red social, para ello es preciso establecer una serie de conexiones con la red social twitter a partir de la cuenta del usua- rio. Los datos de las redes sociales tienen unas características especiales que pasaremos a describir, una vez obtenidos. Existen varios libros en R que per- miten la extracción de datos pero el libro twitteR destaca por la facilidad del manejo y su flexibilidad. Los datos de texto, como ocurre con los tweets, tienen una estructura muy simple, comparada con la que presentan las hojas de cálculo estándar. El modo más útil de imponer una estructura a este tipo de datos es convertirlos en lo que denominaremos matriz término-documento (term-document matrix), en la que cada fila representa un término y cada documento constituye una columna diferente. De este modo, cada elemento (i,j) de la matriz representa el número de veces que un término concreto , i, (fila) aparece en un documento determinado, j, (columna).

Las matrices término-documento, tendrán tantas columnas como docu- mentos (tweets) se analicen y tantas filas como palabras se especifiquen en la colección de documentos, denominada corpus.

El libro tm proporciona una serie de funciones que permiten crear y ma- nipular este tipo de matrices a partir de los datos obtenidos de twitter.

Por último, una vez depurados los datos y construidas las estructuras ne- cesarias para su análisis en R, destaca el libro wordcloud. Este libro permite crear una serie de gráficos, conocidos como nubes de palabras, que ponen de manifiesto los términos más utilizados dentro de los tweets obtenidos.

Comenzamos por tanto con la determinación de la base de datos a anali- zar:

La función searchTwitter del libro twitteR, establece las condiciones para la búsqueda de los tweets relacionados con el hastag de interés. Los argu- mentos de esta función son:

searchstring: cadena de caracteres de la búsqueda que desea realizar en Análisis Estadísticos con R. Construcción de libros en R. 35

twitter. Use + para separar los términos de la consulta.

n: número máximo de tweets que desea buscar.

lang: si no es nulo, restringe los tweets a un lenguaje dado.

since: si no es nulo, restringe los tweets desde una fecha dada.

until: si no es nulo, restringe los tweets hasta una fecha dada.

locale: si no es nulo, se establece la configuración regional para la bús- queda.

geocode: si no es nulo, devuelve los tweets de los usuarios determinados por latitude y longitude. Son variables que se tienen al descargar los datos, indican la localización geográfica de los tweets. La inclusión de la localización en los tweets está desactivada de forma predeterminada y, como usuario, puedes activarla.

sinceID: si no es nulo, devuelve los tweets con identificador más reciente que el especificado.

maxID: si no es nulo, devuelve los tweets con mayor identificador que el especificado.

resultType: especifica el tipo de resultado de la búsqueda. El predefi- nido es mixed(resultados en tiempo real y más populares), puede ser recent(los más recientes) y popular(los más populares).

retryOnRateLimit: si no es cero bloqueará la búsqueda una vez rein- tentado X veces.

Una vez analizados los argumentos de la función, la aplicaremos para ob- tener 1500 tweets relacionados con nuestro hastag de interés:

twd<-searchTwitter("#thewalkingdead",n=1500)

Se obtiene así twd, una lista de R, con la información obtenida de Twitter. Los datos obtenidos, contienen información relativa al usuario que ha creado o retweeteado el tweet, el texto del mensaje, ... A modo de ejemplo, ponemos a continuación las cuatro primeras componentes de dicho objeto: 36 twd

[1] "dianayovza: RT sanchez_josemi: Ha llegado el momento.

Hablemos de #TheWalkingDead ...... http://t.co/ufMHP05Nnr http://t.co/OSACtz1Yxf"

[2] "dianayovza: NEED! #TheWalkingDead http://t.co/QYL2UYYaP5

Darkside Hommes ’Zombie Killer 13’ T-Shirt ... http://t.co/ufMHP05Nnr http://t.co/HmIrQQDePr"

[3] "dianayovza: Abraham [to a walker]: \"Aw, honey.

Look at you. You’re a damn mess.\" \n\n#TheWalkingDead\nSea... http://t.co/ufMHP05Nnr http://t.co/rfRWCUYjCY"

[4] "dianayovza: RT twdwalkerdead:

Rick and Daryl #TheWalkingDead #TransformationTuesday

\nBiggestTWD_Fan Fc... http://t.co/ufMHP05Nnr http://t.co/sqmFspiBfu"

Los datos así obtenidos, y tal y como hemos indicado anteriormente, han de transformarse en un data.frame que permita su manipulación. Utilizare- mos para ello la función do.call del libro base de R.

Esta función consta, en este caso, de dos argumentos: la función que desea aplicar, rbind, que combina por filas una matriz, un vector, o un data.frame, y una lista con los datos a los que desea aplicar la función anterior. Para obtener esta lista utilizamos la orden lapply, que devuelve una lista de la misma longitud que X, cada elemento de los cuales es el resultado de aplicar Análisis Estadísticos con R. Construcción de libros en R. 37

FUN al elemento correspondiente de X; siendo X un vector o una expresión de objetos y FUN la función que se aplica a los elementos de X, ambos son argumentos de esta función. Entonces ejecutamos: twd.df <- do.call(rbind, lapply(twd, as.data.frame))

Como resultado de la orden anterior tenemos un data.frame con 16 co- lumnas y 1500 filas. Cada columna es una variable y cada fila contiene la información de todas las variables de cada tweet. Las variables creadas son las siguientes:

text: contiene el texto publicado. favorited: indica si algún usuario lo ha marcado porque quiere archivar un enlace y volver a él más tarde, porque simplemente quiere archivar el tweet como futura referencia, porque le ha llamado la atención o porque simplemente le ha gustado. favoriteCount: contabiliza el número de favoritos que contiene el tweet. replyToSN (in_reply_to_screen_name): si el tweet es respuesta a otro contiene el nombre del usuario del tweet original. created: contiene la fecha y hora de publicación. truncated: es un valor lógico que señala si el texto es truncado, es decir, si supera los 140 caracteres aparecen puntos suspensivos. replyToSID (in_reply_to_status_id): esta variable contiene la identi- ficación del tweet original si éste es respuesta a otro. id: identificador del tweet. replyToUID (in_reply_to_user_id): si el tweet es respuesta a otro contiene el identificador del usuario del tweet original. statusSource: dirección HTML en la que se ha publicado el tweet. screenName: nombre del usuario que ha publicado el tweet. retweetCount: esta variable contiene el número de veces que el tweet ha sido retweeteado. isRetweet: es una variable de tipo lógico, que indica si el tweet es un retweet o no. 38

retweeted: indica si el tweet ha sido retweeteado por el usuario que se autentica.

longitude: indica la ubicación geográfica del tweet.

latitude: indica la ubicación geográfica del tweet.

El data.frame creado con las 16 variables para las cuatro salidas mostra- das anteriormente es:

twd.df text 1 RT sanchez_josemi: Ha llegado el momento. Hablemos de #TheWalkingDead ...... http://t.co/ufMHP05Nnr http://t.co/OSACtz1Yxf 2 NEED! #TheWalkingDead http://t.co/QYL2UYYaP5 Darkside Hommes ’Zombie Killer 13’ T-Shirt ... http://t.co/ufMHP05Nnr http://t.co/HmIrQQDePr 3 Abraham [to a walker]: "Aw, honey. Look at you. You’re a damn mess." \n\n#TheWalkingDead\nSea... http://t.co/ufMHP05Nnr http://t.co/rfRWCUYjCY 4 RT twdwalkerdead: Rick and Daryl #TheWalkingDead #TransformationTuesday \nBiggestTWD_Fan Fc... http://t.co/ufMHP05Nnr http://t.co/sqmFspiBfu favorited favoriteCount replyToSN created 1 FALSE 0 2015-05-27 08:32:29 2 FALSE 0 2015-05-27 08:32:24 3 FALSE 0 2015-05-27 08:32:17 4 FALSE 0 2015-05-27 08:32:12 truncated replyToSID id replyToUID 1 FALSE 603478871632191488 2 FALSE 603478850429919232 3 FALSE 603478820344242176 4 FALSE 603478799704031232 statusSource 1 IFTTT Análisis Estadísticos con R. Construcción de libros en R. 39

2 IFTTT 3 IFTTT 4 IFTTT

screenName retweetCount isRetweet retweeted 1 dianayovza 0 FALSE FALSE 2 dianayovza 0 FALSE FALSE 3 dianayovza 0 FALSE FALSE 4 dianayovza 0 FALSE FALSE longitude latitude 1 2 3 4

Una vez determinada la estructura, se guarda en un fichero de texto con la función write.csv. del libro utils. Esta función crea un fichero en formato csv en la dirección indicada por el usario.

write.csv(twd.df, "C:/.../twd.csv")

Como ya indicamos anteriormente, la información recogida a través de la red social, debe convertirse en una matriz término-documento, en la que cada fila representa un término y cada documento constituye una columna diferente. El ij-ésimo elemento de la matriz determina el número de veces que el término i (fila) aparece en el documento j (columna). Este tipo de transformaciones se llevan a cabo con las funciones del libro tm.

Previo a la escritura del fichero, es preciso construir una lista que contenga tan solo el texto de los tweets. Para ello el libro twitteR dispone de funcio- nes que permiten el acceso a algunas de las variables, en el caso del texto usaremos getT ext, otras posibles son getScreenName, getId, getReplyToSN, getReplyToUID, getStatusSource, getCreated, getTruncated, getFavorited, getRetweeted y getRetweetCount. El texto extraído mediante la siguiente orden es el siguiente: twd_list<-sapply(twd,function(x) x$getText()) 40 twd_list[1:4]

[1] "RT sanchez_josemi: Ha llegado el momento.

Hablemos de #TheWalkingDead ...... http://t.co/ufMHP05Nnr http://t.co/OSACtz1Yxf"

[2] "NEED! #TheWalkingDead http://t.co/QYL2UYYaP5

Darkside Hommes ’Zombie Killer 13’ T-Shirt ... http://t.co/ufMHP05Nnr http://t.co/HmIrQQDePr"

[3] "Abraham [to a walker]: \"Aw, honey. Look at you. You’re a damn mess.\" \n\n#TheWalkingDead\nSea... http://t.co/ufMHP05Nnr http://t.co/rfRWCUYjCY"

[4] "RT twdwalkerdead: Rick and Daryl #TheWalkingDead

#TransformationTuesday \nBiggestTWD_Fan Fc... http://t.co/ufMHP05Nnr http://t.co/sqmFspiBfu"

Los tweets no sólo nos dan la información del texto sino que también reco- gen datos relativos a los usuarios que los han creado así como el identificador del tweet. Son varias las funciones disponibles en el libro twitteR que per- miten obtener dicha información, concretamente presentamos las funciones getScreenNames y getId, que respectivamente recogen el nombre del usuario y el identificador del tweet publicado. A modo de ejemplo, siguiendo con los datos que hemos mostrado anteriormente, tenemos los siguientes resultados: twd_listnames<-sapply(twd,function(x) x$getScreenName()) twd_listnames[1:4]

[1] "dianayovza" "dianayovza" "dianayovza" "dianayovza" Análisis Estadísticos con R. Construcción de libros en R. 41

Los cuatro primeros tweets han sido publicados por dianayovza. twd_listid<-sapply(twd,function(x) x$getId()) twd_listid[1:4]

[1] "603478871632191488" "603478850429919232"

"603478820344242176" "603478799704031232"

El proceso de depuración de los datos continua con la eliminación de direcciones web o los caracteres mal escritos. Para eliminar estos valores uti- lizamos la función gsub. Esta función permite sustituir caracteres por otros valores, para ello basta incluir como argumentos de la función el carácter mal escrito que se desea sustituir, el carácter corregido y el objeto de R en el que se desea llevar a cabo la modificación. twd_list = gsub("ã¡", "a", twd_list) twd_list = gsub("ã c ", "e", twd_list) twd_list = gsub("ã^3", "o", twd_list) twd_list = gsub("ão", "u", twd_list) twd_list = gsub("ã..", "e", twd_list) twd_list = gsub("ã^2", "o", twd_list) twd_list = gsub("ã", "i", twd_list)

Realizadas las sustituciones anteriores tenemos que el objeto twd_list ha sido modificado, quedando de la siguiente forma: twd_list

[1] "RT sanchez_josemi: Ha llegado el momento. Hablemos de 42

#TheWalkingDead ...... http://t.co/ufMHP05Nnr http://t.co/OSACtz1Yxf"

[2] "NEED! #TheWalkingDead http://t.co/QYL2UYYaP5

Darkside Hommes ’Zombie Killer 13’ T-Shirt ... http://t.co/ufMHP05Nnr http://t.co/HmIrQQDePr"

[3] "Abraham [to a walker]: \"Aw, honey. Look at you.

You’re a damn mess.\" \n\n#TheWalkingDead\nSea...

http://t.co/ufMHP05Nnr http://t.co/rfRWCUYjCY"

[4] "RT twdwalkerdead: Rick and Daryl #TheWalkingDead

#TransformationTuesday \nBiggestTWD_Fan Fc... http://t.co/ufMHP05Nnr http://t.co/sqmFspiBfu"

Como ya indicamos anteriormente, la información recogida de los tweets debe convertirse en un Corpus o colección de documentos. Previamente es necesario convertir nuestra lista depurada en un vector mediante la función VectorSource. La función Corpus, aplicada sobre dicho vector proporciona la estructura definitiva sobre la que se aplicarán los análisis de la información extraída de la red (salvo una serie de modificaciones relativas al texto que pasaremos a señalar a continuación). twd_corpus <- Corpus(VectorSource(twd_list)) twd_corpus

<>

Por tanto, twd_corpus es un objeto de R, que está formado por 1500 documentos de texto.

Las modificaciones que realizaremos en el Corpus, entre otras, son con- vertir los caracteres alfabéticos en minúscula, eliminar las direcciones URLs, eliminar los signos de puntuación y las palabras sin significado, etc. con el fin Análisis Estadísticos con R. Construcción de libros en R. 43 de obtener un texto lo más claro posible. Para conseguir esto, se hace uso de la interfaz tm_map del libro tm, para aplicar funciones de transformación al corpus. Sus argumentos son: x: corpus.

FUN: función de transformación que se aplica al Corpus.

... otros argumentos de FUN. Las funciones de transformación posibles pueden obtenerse con la orden getT ransformations().

A continuación, definimos brevemente las funciones que aplicaremos al Corpus posteriormente, para su modificación.

removeNumbers: elimina los números de un documento de texto. Ar- gumentos:

• x: documento de texto. • ...

Devuelve un documento de texto sin números.

removePunctuation: elimina la puntuación de un documento de texto. Argumentos:

• x: documento de texto. • preserve_intra_word_dashes: valor lógico que indica si los guio- nes de las palabras deben mantenerse. • ...

Devuelve un documento de texto sin puntuación.

removeWords: elimina palabras de un documento de texto. Argumen- tos:

• x: documento de texto. • words: vector de caracteres indicando las palabras que deben eli- minarse. • ...

Devuelve un documento de texto sin algunas palabras. 44

stopwords: devuelve palabras vacías para diferentes idiomas. Argumen- tos:

• kind: cadena de caracteres que identifica la lista de palabras de parada deseada. Las posibles opciones son: catalan, romanian, da- nish, dutch, english, finnish, french, german, hungarian, italian, norwegian, portuguese, russian, spanish, y swedish.

Se aplican estas funciones al corpus mediante el siguiente código. En pri- mer lugar, transformamos en minúscula los caracteres, después creamos una función que elimina las direcciones web (removeURL), ya que sustituye la dirección por vacío. Posteriormente, eliminamos la puntuación y finalmente las palabras sin significado.

twd_corpus <- tm_map(twd_list, content_transformer(tolower)) twd_corpus <- Corpus(VectorSource(twd_list)) removeURL <- function(x) gsub("http[[:alnum:]]*", "", x) twd_corpus <-tm_map(twd_corpus, removeURL) twd_corpus <- Corpus(VectorSource(twd_corpus)) twd_corpus <- tm_map(twd_corpus, removePunctuation) twd_corpus <- Corpus(VectorSource(twd_corpus)) twd_corpus <- tm_map(twd_corpus, function(x) removeWords(x,stopwords("english")))

Una vez realizados estos cambios, se tiene un conjunto de documentos de texto, a partir del cuál se realizará el análisis.

Como se ha comentado efectuaremos un análisis de la repercusión social de la serie T he W alking Dead. Uno de los primeros pasos del análisis de datos de las redes sociales es estudiar las relaciones entre las palabras pu- blicadas o ver cuáles son las palabras más frecuentes, del tema estudiado, Análisis Estadísticos con R. Construcción de libros en R. 45 mediante diferentes gráficos como los diagramas de barras, los dendogramas o las nubes de palabras. Para determinar estas relaciones, en primer lugar, se construye una matriz que represente las relaciones entre los términos y los documentos, donde cada fila es un término y cada columna un documento, y cada elemento de la matriz es el número de veces que se encuentra el tér- mino en el documento. Esta matriz es la que anteriormente llamamos matriz término-documento que puede obtenerse con la función TermDocumentMa- trix del libro tm. Sus argumentos son:

x: términos de la matriz.

control: una lista con las opciones de control. Hay opciones globales o individuales (termFreq). Las globales son:

• bounds: vector de dos enteros que indican los dos límites de los documentos que se desea seleccionar. • weighting: función de ponderación.

Para construir la matriz a partir del corpus anterior, es necesario ejecutar en la consola la siguiente orden. La matriz creada está formada por 1694 términos (filas) y 1500 documentos (columnas). twd.tdm <- TermDocumentMatrix(twd_corpus) twd.tdm

<> Non-/sparse entries: 14516/2526484 Sparsity : 99% Maximal term length: 72 Weighting : term frequency (tf)

Debido a las grandes dimensiones de la matriz nos resulta difícil obtener e interpretar los resultados para generar conclusiones de ello. Por tanto, cuando hay una gran cantidad de términos, se puede reducir el tamaño de la matriz seleccionando aquellos que nos interesen, por ejemplo, los que aparecen un número mínimo de veces. Para la búsqueda de éstos se utiliza la función findF reqT erms del libro tm. Esta función encuentra los términos frecuentes en una matriz de documentos. Sus argumentos son:

x: DocumentTermMatrix o TermDocumentMatrix. 46

lowfreq: número que indica el límite inferior de la frecuencia.

highfreq: número que indica el límite superior de la frecuencia.

Y devuelve un vector de caracteres con los términos que en la matriz tienen una frecuencia entre lowfreq y highfreq.

Entonces para reducir la dimensión de la matriz en estudio, selecciona- mos aquellos términos que tienen una frecuencia mayor de cien, utilizando la función anterior. Los términos son: findFreqTerms(twd.tdm, lowfreq=100)

[1] "beth" "brentonthwaites" [3] "day" "good" [5] "greene" "jonbuckhouse" [7] "just" "long" [9] "morning" "started" [11] "tcoufmhp05nnr" "thewalkingdead" [13] "twdpics" "walkingdeadamc" [15] "watch" "watching" [17] "yesterday"

Otra forma de obtener la frecuencia de las palabras es simplemente con la suma de los elementos de la fila, mediante la orden rowSums. Tras cal- cularlas, se toman aquellos términos con una frecuencia mayor de 100. Para seleccionar el subconjunto de términos con ésta frecuencia se utiliza la orden subset. Cuyos argumentos son, el primero, los datos de los que se selecciona el subconjunto y, el segundo, la condición que deben verificar éstos. Esto es equivalente a la orden anterior, aunque en este caso no sólo se muestran los términos sino también sus frecuencias correspondientes.

Finalmente se representan en el siguiente histograma las frecuencias rela- tivas con la función barplot, que crea un diagrama de barras. frecuencias<-rowSums(as.matrix(twd.tdm)) frecuencias<-subset(frecuencias, frecuencias>=100) frecuencias Análisis Estadísticos con R. Construcción de libros en R. 47

beth brentonthwaites day 146 718 721 good greene jonbuckhouse 736 118 718 just long morning 536 730 723 started tcoufmhp05nnr thewalkingdead 532 411 1494 twdpics walkingdeadamc watch 217 583 125 watching yesterday 725 531 frecuenciasrelativas<-frecuencias/1500 frecuenciasrelativas beth brentonthwaites day 0.09733333 0.47866667 0.48066667 good greene jonbuckhouse 0.49066667 0.07866667 0.47866667 just long morning 0.35733333 0.48666667 0.48200000 started tcoufmhp05nnr thewalkingdead 0.35466667 0.27400000 0.99600000 twdpics walkingdeadamc watch 0.14466667 0.38866667 0.08333333 watching yesterday 0.48333333 0.35400000 barplot(frecuenciasrelativas,names.arg=names(frecuenciasrelativas),cex.names=0.7, xlab="Términos", ylab="Frecuencias",las=2) 48

Figura 4.1: Diagrama de barras

El diagrama de barras nos muestra la mayor frecuencia de aparición del término thewalkingdead, término que aparece en todos los tweets analizados. Otros términos a destacar son brentonthwaites, good, day, morning, yester- day, jonbuckhouse, ... con frecuencias relativas 0.479, 0.491, 0.481, 0.482, 0.354, 0.479, ... respectivamente. Brentonthwaites es el protagonista de la serie, por esto su gran aparición y el resto de términos como yesterday, mor- ning y good es debido a que como se ha comentado la mañana anterior a la obtención de los datos fue el comienzo de la grabación de la nueva temporada.

Si bien el diagrama de barras aporta una muy importante información al estudio del problema, en el análisis de redes se recurre a una representación gráfica equivalente pero con connotaciones particulares en el análisis que nos ocupa. Se trata del gráfico conocido como nube de palabras. Las nubes de palabras constituyen unos gráficos muy versátiles con diversas aplicaciones, Análisis Estadísticos con R. Construcción de libros en R. 49 entre las cuales podemos destacar [20]:

Aspecto atractivo de la representación.

Identificación de los términos más repetidos en un texto, discurso o noticia o aquellos que se han querido enfatizar.

Análisis de la densidad de palabras clave de una página web o blog

Comparación del contenido más relevante de dos o más documentos

No obstante, aunque este gráfico proporciona una información relevante en el estudio de las redes sociales, hemos de destacar que no establece ningún tipo de relación entre los términos analizados.

El libro wordcloud de R nos proporciona las funciones necesarias para su obtención. Los argumentos de esta función son los siguientes:

words: palabras.

freq: frecuencias.

scale: vector de longitud dos indicando el rango del tamaño de las pa- labras.

min.freq: frecuencia mínima para las palabras que desea representar.

max.words: número máximo de palabras.

random.order: valor lógico que indica si el orden de las palabras es aleatorio. En el caso de ser falso se representan en orden decreciente de frecuencia.

random.color: valor lógico que si es verdadero se asignan colores alea- torios. En caso contrario, se eligen en función de la frecuencia.

rot.per: proporción de palabras con 90 grados de rotación.

colors: color de las palabras de menor a mayor frecuencia.

ordered.colors: si es verdadero se asignan los colores ordenados.

use.r.layout: si es falso C++ se utiliza para la detección de colisiones, de lo contrario se usa R.

fixed.as: si es verdadero, el radio es fijo. 50

... otros parámetros de texto.

Igual que hicimos en para obtener el diagrama de barras, representamos los términos que aparecen un mínimo de 100 veces en los textos analizados: wordcloud(twd_corpus, min.freq=100, colors=c("yellow", "red", "blue"))

Los resultados se muestran en la figura 4.2. Se observa una representación en la que los términos destacados son brentonhwaites, walkingdead, jonbuck- house, equivalentemente a los obtenidos con el diagrama de barras.

Figura 4.2: Nube de palabras

Una vez establecidos los términos más relevantes en las conversaciones, analizadas las procedencias de estos y el porqué de su aparición, el siguiente paso en el análisis consiste en el establecimiento de relaciones entre los tér- minos y los actores que participan en ellas. Análisis Estadísticos con R. Construcción de libros en R. 51

Para establecer las relaciones entre términos recurriremos a una técnica estadística multivariante ya conocida: el análisis cluster. A través del dendo- grama es posible determinar agrupaciones de palabras que revelen aspectos importantes a considerar para, en el caso que nos ocupa, el seguimiento de la serie así como la inclusión de nuevos aspectos que pudieran interesar a los seguidores de ella. El dendograma, como es bien sabido, constituye un tipo de representación gráfica o diagrama de datos en forma de árbol que orga- niza los datos en subcategorías a partir de las cuales es posible establecer conclusiones.

El análisis de las relaciones entre actores se verá en la sección 4.5.

A través de un dendograma el análisis Cluster nos permite ver las rela- ciones semánticas entre palabras, y cómo se relacionan entre ellas. Es decir, nos permite ver "que conversaciones" se están produciendo y no sólo que pa- labras son más utilizadas. Mediante este análisis clasificaremos las palabras, según la relación entre ellas, en 3 grupos.

Para realizar el análisis Cluster en primer lugar obtenemos las palabras más comunes, de forma diferente a los casos anteriores, con la función re- moveSparseTerms del libro tm. Los argumentos necesarios son la matriz de documentos y el número que indica la proporción de ceros de un término antes de considerarlo escaso (sparse). Además se convierte la matriz de do- cumentos en un data.frame para seguir trabajando con los datos. Se tiene una matriz de 21 términos(filas) y 1500 documentos(columnas). twd2.tdm <-removeSparseTerms(twd.tdm, sparse=0.95) twd2.tdm <> Non-/sparse entries: 10101/21399 Sparsity : 68% Maximal term length: 15 Weighting : term frequency (tf) twd2.df <- as.data.frame(inspect(twd2.tdm))

El objetivo como hemos comentado es estudiar las relaciones entre las pa- labras. El análisis Cluster mide estas relaciones mediante una distancia por lo que primero es necesario tipificar los datos del data.frame con la orden scale, 52 para evitar la dependencia respecto a las unidades de medida empleadas. La orden para ello es twd2.df.scale <- scale(twd2.df)

Se muestran algunas de las filas y columnas de la matriz resultante, en concreto las 5 primeras palabras (filas) y los 7 primeros documentos (colum- nas).

twd2.df.scale[1:5,1:7]

1 2 3 4 5 6 7 beth -0,316623793 -0,316623793 -0,316623793 -0,316623793 -0,316623793 -0,21821789 -0,21821789 brentonthwaites -0,316623793 -0,316623793 -0,316623793 -0,316623793 -0,316623793 -0,21821789 -0,21821789 cesar2574 -0,316623793 -0,316623793 -0,316623793 -0,316623793 -0,316623793 -0,21821789 -0,21821789 day -0,316623793 -0,316623793 -0,316623793 -0,316623793 -0,316623793 -0,21821789 -0,21821789 good -0,316623793 -0,316623793 -0,316623793 -0,316623793 -0,316623793 -0,21821789 -0,21821789

Una vez tipificados, podemos calcular las distancias entre cada uno de los términos con el resto. Teniendo así una matriz simétrica, cuyas filas y columnas son el número de términos y cada elemento de la matriz (i, j) con- tiene la distancia entre el término i y el j. La matriz se crea con la función dist, cuyos argumentos son los datos a partir de los que se crea la matriz de distancias y el tipo de distancia, en este ejemplo se usa la distancia euclídea, teniendo: twd.dist <- dist(twd2.df.scale, method = "euclidean")

beth brentonthwaites Análisis Estadísticos con R. Construcción de libros en R. 53 brentonthwaites 60.706703 cesar2574 36.607252 57.179329 day 60.886389 4.674243 good 61.883478 12.010869 greene 16.307532 58.475364 houston 36.864919 57.344634 jonbuckhouse 60.706703 0.000000 just 54.815044 27.962995 long 61.768553 11.403961 morning 60.961888 5.572068 seasons 36.713899 57.247665 started 54.408102 27.156611 tco2mjmjaoixo 18.967588 57.667447 tcoufmhp05nnr 55.376061 62.189747 thewalkingdead 106.688849 97.227187 twdpics 34.677860 66.104180 walkingdeadamc 58.892292 35.292238 watch 37.399528 59.799749 watching 61.237163 8.042776 yesterday 54.351007 27.042040

cesar2574 day good brentonthwaites cesar2574 day 57.370064 good 58.427191 12.397191 greene 32.774309 58.661885 59.696141 houston 4.351020 57.534821 58.588975 jonbuckhouse 57.179329 4.674243 12.010869 just 50.880850 28.350972 30.433371 long 58.305454 11.673042 16.562346 morning 57.450184 6.362179 10.640161 seasons 2.796334 57.438173 58.494069 started 50.442178 27.555944 29.694149 tco2mjmjaoixo 31.310087 57.856573 58.904969 tcoufmhp05nnr 51.825579 62.365160 62.597539 thewalkingdead 108.620158 97.114763 96.482459 twdpics 44.994997 66.269233 67.186484 walkingdeadamc 55.249198 35.600430 35.999572 watch 30.657990 59.982152 60.892132 54 watching 57.742202 8.419966 14.455006 yesterday 50.380589 27.443040 29.589405

greene houston jonbuckhouse brentonthwaites cesar2574 day good greene houston 33.061861 jonbuckhouse 58.475364 57.344634 just 52.333101 51.066548 27.962995 long 59.576997 58.467575 11.403961 morning 58.740243 57.614712 5.572068 seasons 32.893385 3.333451 57.247665 started 51.906704 50.629485 27.156611 tco2mjmjaoixo 9.686784 31.610962 57.667447 tcoufmhp05nnr 54.212548 52.007903 62.189747 thewalkingdead 107.927968 108.532978 97.227187 twdpics 31.029238 45.204879 66.104180 walkingdeadamc 56.589455 55.420260 35.292238 watch 34.540151 30.965202 59.799749 watching 59.025880 57.905900 8.042776 yesterday 51.846854 50.568124 27.042040

just long morning brentonthwaites cesar2574 day good greene houston jonbuckhouse just long 30.198997 morning 28.512752 12.692449 seasons 50.957633 58.372472 57.518198 started 6.666902 29.453893 27.722364 tco2mjmjaoixo 51.428783 58.784222 57.936020 Análisis Estadísticos con R. Construcción de libros en R. 55 tcoufmhp05nnr 68.127627 63.226695 62.039793 thewalkingdead 100.666482 96.556074 97.067388 twdpics 60.738356 67.080646 66.338606 walkingdeadamc 23.768199 37.088979 35.729399 watch 53.808877 60.877420 60.058787 watching 28.882454 13.954804 9.784385 yesterday 7.117385 29.348292 27.610140

seasons started tco2mjmjaoixo brentonthwaites cesar2574 day good greene houston jonbuckhouse just long morning seasons started 50.519628 tco2mjmjaoixo 31.434710 50.994825 tcoufmhp05nnr 51.900964 67.800634 55.071173 thewalkingdead 108.584158 100.887007 108.361801 twdpics 45.081806 60.371354 32.506113 walkingdeadamc 55.319918 22.814024 55.754217 watch 30.785253 53.394266 35.872773 watching 57.809873 28.102465 58.225602 yesterday 50.458133 2.491905 50.933904

tcoufmhp05nnr thewalkingdead brentonthwaites cesar2574 day good greene houston jonbuckhouse just 56 long morning seasons started tco2mjmjaoixo tcoufmhp05nnr thewalkingdead 99.021222 twdpics 59.186514 103.431387 walkingdeadamc 70.005601 98.853359 watch 42.732496 107.444537 watching 62.608560 96.893961 yesterday 67.754825 100.917777

twdpics walkingdeadamc watch brentonthwaites cesar2574 day good greene houston jonbuckhouse just long morning seasons started tco2mjmjaoixo tcoufmhp05nnr thewalkingdead twdpics walkingdeadamc 64.441919 watch 42.103493 57.714383 watching 66.591658 36.197075 60.235181 yesterday 60.319904 22.677525 53.336086

watching brentonthwaites cesar2574 day Análisis Estadísticos con R. Construcción de libros en R. 57 good greene houston jonbuckhouse just long morning seasons started tco2mjmjaoixo tcoufmhp05nnr thewalkingdead twdpics walkingdeadamc watch watching yesterday 28.212730

Obtenemos una matriz cuadrada de dimensión 21, aunque no aparecen todas las filas y columnas con todos los términos debido a la simetría que ésta posee. A partir de esta matriz es posible llevar a cabo el análisis Cluster. Para ello, se usa la función hclust del libro stats y se representan los distin- tos grupos clasificatorios. El número de grupos depende del estudio ó si es determinado con antelación, en esta situación tomamos 3. Los argumentos de la función son la matriz de distancias y el método con el cuál desea clasi- ficar las palabras, ya que en el análisis Cluster existen diferentes métodos de clasificación. El código es el siguiente:

twd.fit <- hclust(twd.dist, method="ward.D") plot(twd.fit,main= "Análisis Cluster-TWD") rect.hclust(twd.fit, k=3, border="blue") 58

Figura 4.3: Cluster-ward

La figura 4.3 nos muestra los resultados obtenidos al aplicar las técnicas cluster sobre los datos. Hemos de señalar que tras aplicar diferentes procedi- mientos ward.D2, single, complete, average, mcquitty, median ó centroid, los resultados obtenidos han sido todos equivalentes. Se obtiene una agrupación de términos que podemos fijar en tres clusters diferentes:

La serie en sí, representada por su título.

Los actores.

Términos relacionados con los contenidos abordados en la serie.

Continuaremos el ejemplo con un Análisis de Sentimientos como se co- mentó al inicio de la sección. El lenguaje R también proporciona distintos libros y funciones para realizar este análisis, explicado en el capítulo 3, ade- más del análisis de datos. Siguiendo con este estudio, de la serie "The Walking Dead", se clasificarán los tweets utilizando el clasificador Naïve Bayes. Res- ponderemos a la pregunta, ¿cuántos tweets hay positivos? ¿y negativos?. En esta parte del análisis clasificaremos los tweets de diferentes formas, primero en positivos y negativos, y después en 6 grupos diferentes, los cuáles explica- remos más tarde. Análisis Estadísticos con R. Construcción de libros en R. 59

Para ello, utilizaremos funciones de los libros e1071 y sentiment. El pri- mero de ellos contiene funciones para el análisis de clases latentes, máquinas de vectores soporte, agrupación cluster, clasificador de Bayes, etc. El libro sentiment está formado por herramientas para realizar el análisis de senti- mientos, incluye clasificadores bayesianos para la positividad y negatividad y clasificadores para distintas emociones.

Ahora supongamos la lista de tweets obtenida anteriormente. En primer lugar, creamos un data frame para poder a partir de éste realizar las ope- raciones necesarias y obtener conclusiones. Lo haremos usando la función as.data.frame cuyo argumento son los datos mediante los que se construye. Una vez obtenido, el siguiente objetivo es clasificar cada uno de los tweets en positivo o negativo dependiendo del mensaje que trasmita, para poder cono- cer el número total de tweets de cada tipo. En R, la función classify_polarity del libro sentiment clasifica la polaridad utilizando el clasificador Naïve Ba- yes entrenado con el léxico subjetivo de Janyce Wiebe. Este léxico consta de una lista de palabras clasificadas en positivas y negativas y a su vez se indica si la polaridad es débil o fuerte. Los argumentos de la función son: textColumns: data frame con los documentos de texto por filas. algorithm: cadena de texto que indica el algoritmo utilizado. pstrong: número que indica la probabilidad de que un término muy subjetivo aparezca en el texto. pweak: número que indica la probabilidad de que un término débilmente subjetivo aparezca en el texto. prior: número que indica la probabilidad a priori antes de utilizar el clasificador Naïve Bayes. verbose: valor lógico, si es verdadero muestra el resultado detallado de la clasificación. ... otros parámetros de la función create_matrix. Con esto obtenemos un data.frame con 4 columnas y una fila para ca- da documento. Cada columna indica la probabilidad de que un documento exprese un sentimiento positivo, la probabilidad de que un documento ex- prese un sentimiento negativo, la relación de probabilidades entre opiniones positivas y negativas (si es 1 es neutral, mayor que 1 positivo y menor que 1 negativo) y la categoría más probable. 60

Las órdenes necesarias son: twd2.df<-as.data.frame(twd_list) bayes<-classify_polarity(twd2.df,algorithm="bayes", pstrong=0.5,pweak=1,prior=1)

Mostramos a modo de ejemplo algunos de los documentos y sus correspon- dientes columnas. Concretamente, los seis primeros y los seis últimos.

bayes

POS NEG 1 9.47547003995745 0.445453222112551 2 1.03127774142571 17.1191924966825 3 8.78232285939751 18.5054868578024 4 1.03127774142571 0.445453222112551 5 9.47547003995745 8.78232285939751 6 16.5333679773693 18.5054868578024

POS/NEG BEST_FIT 1 21.2715265477714 positive 2 0.0602410272345239 negative 3 0.474579400524914 negative 4 2.31512017476245 positive 5 1.07892526745566 neutral 6 0.893430586528906 negative === POS NEG 1495 17.2265151579293 9.47547003995745 1496 1.03127774142571 0.445453222112551 1497 17.2265151579293 9.47547003995745 1498 17.2265151579293 9.47547003995745 1499 17.2265151579293 0.445453222112551 1500 17.2265151579293 9.47547003995745 Análisis Estadísticos con R. Construcción de libros en R. 61

POS/NEG BEST_FIT 1495 1.81801167491282 neutral 1496 2.31512017476245 positive 1497 1.81801167491282 neutral 1498 1.81801167491282 neutral 1499 38.6718836070664 positive 1500 1.81801167491282 neutral

Con este resultado podemos afirmar si un tweet concreto es positivo, ne- gativo o neutro pero de todo el conjunto no sabemos cuantos hay de cada categoría. En R no existe una función que contabilice el número de tweets positivos o negativos, por tanto creamos una función que realice este re- cuento. La función hará uso de la categoría más probable obtenida con la función classify_polarity. Entonces, es necesario almacenar los datos en un data.frame y acceder a la variable BEST _FIT . Mediante un contador, final- mente, nos devolverá el número de tweets de cada clase, es decir, el número de tweets positivos y negativos. bayes<-as.data.frame(bayes) tposneg<-function(bayes){ pos=0; neg=0; for (i in 1: length(bayes$BEST_FIT)){ if(bayes$BEST_FIT[i]!="neutral"){ if(bayes$BEST_FIT[i]=="positive"){ pos=pos+1} else{ neg=neg+1; } } } print(paste("Positivos:" pos, "Negativos: " neg)) }

"Positivos: 516"

"Negativos: 410" 62

Obtenemos que hay 516 tweets positivos y 410 negativos, lo que indica que en los 1500 tweets hay más opiniones positivas que negativas sobre esta serie.

Además de esta clasificación, con la función classify_emotion del li- bro sentiment se pueden clasificar en 6 grupos diferentes: joy (alegría), an- ger(ira), disgust(disgusto), fear(miedo), sadness(tristeza), y surprise (sorpre- sa). Esta función clasifica los documentos utilizando el clasificador de Naïve Bayes entrenado con el léxico de Carlo Strapparava y Alessandro Valitutti. Sus argumentos son:

textColumns: data frame con los documentos de texto por filas.

algorithm: cadena de texto que indica el algoritmo utilizado.

prior: número que indica la probabilidad a priori antes de utilizar el clasificador Naïve Bayes.

verbose: valor lógico, si es verdadero muestra el resultado detallado de la clasificación.

... otros parámetros de la función create_matrix.

Esta función devuelve también un data.frame, pero con siete columnas y una fila para cada documento, en cada columna se indica la probabilidad de que un documento exprese un sentimiento de las categorías anteriores(ira, alegría, ...) y el mejor ajuste.

Aplicando esta función a los tweets extraídos tenemos la clasificación de cada tweet en los diferentes grupos:

bayes1<-classify_emotion(twd2.df,algorithm="bayes",prior=1) bayes1<-as.data.frame(bayes1) bayes1 ANGER DISGUST FEAR JOY 1 1.46871776464786 3.09234031207392 2.06783599555953 1.02547755260094 2 1.46871776464786 3.09234031207392 2.06783599555953 1.02547755260094 3 1.46871776464786 3.09234031207392 2.06783599555953 1.02547755260094 4 1.46871776464786 3.09234031207392 2.06783599555953 1.02547755260094 Análisis Estadísticos con R. Construcción de libros en R. 63

5 1.46871776464786 3.09234031207392 2.06783599555953 1.02547755260094 6 1.46871776464786 3.09234031207392 2.06783599555953 1.02547755260094

SADNESS SURPRISE BEST_FIT

1 1.7277074477352 2.78695866252273 2 1.7277074477352 2.78695866252273 3 1.7277074477352 2.78695866252273 4 1.7277074477352 2.78695866252273 5 1.7277074477352 2.78695866252273 6 1.7277074477352 2.78695866252273 === ANGER DISGUST FEAR JOY 1495 1.46871776464786 3.09234031207392 2.06783599555953 7.34083555412328 1496 1.46871776464786 3.09234031207392 2.06783599555953 1.02547755260094 1497 1.46871776464786 3.09234031207392 2.06783599555953 7.34083555412328 1498 1.46871776464786 3.09234031207392 2.06783599555953 7.34083555412328 1499 1.46871776464786 3.09234031207392 2.06783599555953 7.34083555412328 1500 1.46871776464786 3.09234031207392 2.06783599555953 7.34083555412328

SADNESS SURPRISE BEST_FIT 1495 1.7277074477352 2.78695866252273 joy 1496 1.7277074477352 2.78695866252273 1497 1.7277074477352 2.78695866252273 joy 1498 1.7277074477352 2.78695866252273 joy 1499 1.7277074477352 2.78695866252273 joy 1500 1.7277074477352 2.78695866252273 joy

Análogamente al caso anterior se construye una función que cuente el número de tweets de cada categoría, utilizando la mejor clasificación propor- cionada por la función classify_emotions. tipo<-function(bayes){ pjoy=0 panger=0 pdisgust=0 pfear=0 psadness=0 psurprise=0 64

for (i in 1:length(bayes$BEST_FIT)){ if(!is.na(bayes$BEST_FIT[i])){ if(bayes$BEST_FIT[i]=="joy"){ pjoy=pjoy+1} else if(bayes$BEST_FIT[i]=="anger"){ panger=panger+1} else if(bayes$BEST_FIT[i]=="surprise"){ psurprise=psurprise+1} else if(bayes$BEST_FIT[i]=="fear"){ pfear=pfear+1} else if(bayes$BEST_FIT[i]=="sadness"){ psadness=psadness+1} else if(bayes$BEST_FIT[i]=="disgust"){ pdisgust=pdisgust+1} } } print(paste("Anger",panger,"; ","Disgust", pdisgust,";", "Fear",pfear,";","Joy",pjoy,";", "Sadness",psadness,";","Surprise",psurprise)) } tipo(bayes1)

[1] "Anger 10 ; Disgust 4 ; Fear 6 ; Joy 781 ; Sadness 17 ; Surprise 1"

La salida de la función como se ha comentado es el número de tweets de cada categoría, donde se observa que el mayor número de tweets es de la clase joy(alegría) con gran diferencia respecto al resto de categorías.

4.5. Relaciones entre usuarios

Como ya indicamos en la sección anterior, el análisis de redes sociales no solo es de interés por el establecimiento de agrupaciones entre términos sino que su importancia radica en la posibilidad de establecer relaciones entre los individuos que participan en las conversaciones.

En Twitter, estas relaciones tienen un cariz especial por su asimetría, su Análisis Estadísticos con R. Construcción de libros en R. 65 falta de reciprocidad, tal y como se ha comentado anteriormente.

El entorno de computación estadística R dispone de funciones específicas para este tipo de análisis que permiten visualizar gráficamente las relaciones establecidas entre los usuarios, permitiendo distinguir a simple vista entre seguidores y seguidos en la red así como la relevancia de la participación de determinados individuos en la red.

Exponemos a continuación, brevemente, como generar un grafo que mues- tre las relaciones de los seguidores y seguidos con un usuario, su clasificación en grupos mediante el algoritmo de las k-medias y por último la relación existente entre usuarios.

Comenzamos el análisis con el estudio del protagonista de la serie, Rick Grimes (Andrew Lincoln), conocido en twitter con el nombre de usuario: andylincolnnet.

Para proceder el análisis es preciso, en primer lugar disponer de la infor- mación del usuario. Para ello utilizaremos la función getUser del libro twitteR que permite establecer interacciones sobre un usuario. Los argumentos de es- ta función son:

user: usuario.

users: vector con los identificadores o los nombres de usuarios o una mezcla de ellos.

includeNA: valor lógico. Si es verdadero a los usuarios que no existen les asigna NA.

... argumentos opcionales de get.

Esta función devuelve un objeto de la clase user, como se muestra en las siguientes líneas.

usuario<-getUser("andylincolnnet") usuario [1] "andylincolnnet" 66

Para estudiar las relaciones de los seguidos y los seguidores con Andrew Lincoln, es necesario extraer estos usuarios. Para obtenerlos utilizamos la función lookupUsers, teniendo una lista de objetos de la clase user, que con- tiene los identificadores y nombres de cada uno. En las siguientes líneas se muestran algunos de éstos.

seguidos<-lookupUsers(usuario$getFriendIDs()) seguidos[1:8]

$‘3172331574‘ [1] "TeamAndyLincoln"

$‘31672638‘ [1] "Cudlitz"

$‘54125479‘ [1] "cserratos"

$‘18382902‘ [1] "AlannaMasterson"

$‘986235307‘ [1] "SonequaMG"

$‘23173468‘ [1] "TylerJamesWill"

$‘182199162‘ [1] "alexandrabreck1"

$‘3131268557‘ [1] "CharlieCoxNews" seguidores <-lookupUsers(usuario$getFollowerIDs()) Análisis Estadísticos con R. Construcción de libros en R. 67 seguidores[1:8] $‘1654541000‘ [1] "TwdJuan"

$‘3219363378‘ [1] "Nurjanah10000"

$‘1065301818‘ [1] "ceylan34783493"

$‘2958063463‘ [1] "That1weirdgrl"

$‘908662825‘ [1] "AurelieetKevin"

$‘2875695851‘ [1] "BelenFernadez7"

$‘36781719‘ [1] "hack329"

$‘2393685324‘ [1] "ClouseEva"

Una vez obtenidos los nombres de los usuarios buscados nos interesa ver las relaciones que existen entre ellos y el protagonista, es decir, si Andrew los sigue o le siguen o se siguen mutuamente. Estas relaciones es posible obtenerlas mediante la orden merge del libro base que combina dos data frames por filas o columnas comunes. Sus argumentos son:

x, y: data frames que van a ser fusionados.

by, by.x, by.y: especificaciones de las columnas utilizadas para la fusión.

all.x: valor lógico, si es verdadero se añaden filas adicionales a la salida, uno para cada fila de x.

all.y: valor lógico, si es verdadero se añaden filas adicionales a la salida, 68

uno para cada fila de y. El valor por defecto es falso, de forma que sólo las filas con datos de x e y se incluyen en la salida.

sort: valor lógico que indica si se clasifica por columnas.

...

Haciendo uso de ésta se tienen las relaciones.

# Obtiene los nombres de seguidos y seguidores

seguidos <- sapply(seguidos,name) seguidos[1:8] 3172331574 31672638 "Team Andy Lincoln" "Michael Cudlitz" 54125479 18382902 "Christian Serratos" "Alanna Masterson" 986235307 23173468 "Sonequa Martin-Green" "Tyler James Williams" 182199162 3131268557 "Alex Breckenridge" "Charlie Cox News" seguidores <- sapply(seguidores,name) seguidores[1:8] 1654541000 3219363378 1065301818 "juan valencia" "Janah Riggs" "ceylan" 2958063463 908662825 2875695851 "SnowTails" "Aurélie&Kevin " "Beluu Fernández" 36781719 2393685324 "Roxi Hacker" "Eva"

# Crea un dataframe con las relaciones relaciones <- merge(data.frame(usuario=’andylincolnnet’, Follower=seguidos[1:20]), data.frame(usuario=seguidores[1:20], Follower=’andylincolnnet’), all=T) relaciones

usuario Follower Análisis Estadísticos con R. Construcción de libros en R. 69

1 andylincolnnet a norman stalker 2 andylincolnnet Alanna Masterson 3 andylincolnnet Alex Breckenridge 4 andylincolnnet Charlie Cox News 5 andylincolnnet Christian Serratos 6 andylincolnnet Dominic Cooper News === usuario Follower 35 Marcell Glaser andylincolnnet 36 Rick Parker andylincolnnet 37 Roxi Hacker andylincolnnet 38 RSSMW LTD andylincolnnet 39 SnowTails andylincolnnet 40 wendy vaughn andylincolnnet

Para poder representar gráficamente los resultados obtenidos recurriremos al libro igraph de R que proporciona una serie de funciones para el análisis gráfico de redes. Concretamente utilizaremos la función graph.data.frame, que crea un grafo de uno o dos data frames. Sus argumentos son:

d: data frame con los datos.

directed: valor lógico que indica si desea que el gráfico sea dirigido o no.

vertices: data frame con los vértices. Si es nulo se utilizarán las dos primeras columnas de d.

x: objeto gráfico.

what: caracter que indica si se debe devolver información sobre vértices, aristas o ambos. Por defecto es de las aristas.

Por último, se añaden unas líneas de código para cambiar los colores de los vértices. Y finalmente se representa el gráfico con la función tkplot del libro igraph. tkplot sirve como centro de un dibujo gráfico interactivo. Sus argumentos son:

graph: gráfico a representar.

canvas.width, canvas.height: tamaño del área de dibujo.

tkp.id: identificador de la ventana para cerrar, cambiar, etc tkplot. 70

window.close: deja esto en valor predeterminado.

width: anchura del rectángulo para las nuevas coordenadas.

height: altura del rectángulo para las nuevas coordenadas.

newlayout: nuevo diseño, ver el parámetro layout de tkplot.

norm: valor lógico que indica si se deben normalizar las coordenadas.

coords: matriz de dos columnas con las nuevas coordenadas de los vér- tices.

degree: grado para girar el gráfico.

rad: grado para girar la representación en radianes.

... otros parámetros de plotting.

# Crea un grafo de las relaciones g <- graph.data.frame(relaciones, directed = TRUE)

V(g)$color<-"lightblue" V(g)$color[1] <- "red" tkplot(g)

La representación obtenida se muestra en la figura 4.4. En dicha gráfica se observan a una serie de seguidores como Ceylan o Eva, que simplemente son seguidores del actor. Por otra parte se puede determinar también indi- viduos a los que el actor simplemente sigue, como son The Walking Dead ó Christian Serratos. En esta representación como comentamos anteriormente hemos restringuido los usuarios seleccionados, para obtener una gráfica más clara y sencilla y así visualizar las relaciones que deseamos. Análisis Estadísticos con R. Construcción de libros en R. 71

Figura 4.4: Relaciones con seguidores y seguidos.

A partir de estos resultados, nos planteamos establecer agrupaciones de seguidores y seguidos. Utilizaremos para ello el algoritmo de las k-medias. El propósito de este método es la partición de un conjunto de n observaciones en k grupos en el que cada observación pertenece al grupo más cercano a la media.

Las órdenes getFollowers y getFriends descritas anteriormente permiten obtener tanto los seguidores como los tweets seguidos de un usuario particu- lar. Los resultados obtenidos se organizan en un data.frame utilizando para ello la función twListtoDF, del libro twitteR que convierte las listas de twit- ter en data frame. Sus argumentos son:

twList: lista de objetos de twitter. Las clases permitidas son status, user y directMessage. 72

Crear un data.frame sirve para facilitar el manejo de los datos. El código es el siguiente, en el que se muestran algunos de los seguidores y seguidos para visualizar la estructura de los datos. seguidos <- usuario$getFriends() seguidos[1:8]

$‘3172331574‘ [1] "TeamAndyLincoln"

$‘31672638‘ [1] "Cudlitz"

$‘54125479‘ [1] "cserratos"

$‘18382902‘ [1] "AlannaMasterson"

$‘986235307‘ [1] "SonequaMG"

$‘23173468‘ [1] "TylerJamesWill"

$‘182199162‘ [1] "alexandrabreck1"

$‘3131268557‘ [1] "CharlieCoxNews" seguidores <- usuario$getFollowers() seguidores[1:8]

$‘1654541000‘ [1] "TwdJuan"

$‘3219363378‘ Análisis Estadísticos con R. Construcción de libros en R. 73

[1] "Nurjanah10000"

$‘1065301818‘ [1] "ceylan34783493"

$‘2958063463‘ [1] "That1weirdgrl"

$‘908662825‘ [1] "AurelieetKevin"

$‘2875695851‘ [1] "BelenFernadez7"

$‘36781719‘ [1] "hack329"

$‘2393685324‘ [1] "ClouseEva" todos <- union(seguidos,seguidores) todos.df = twListToDF(todos) todos.df[1:3] description statusesCount followersCount favoritesCount friendsCount url name created protected verified screenName location lang id listedCount followRequestSent profileImageUrl

1 The Andrew Lincoln Fanbook & Barnardo’s Project 1473 672 2470 747 http://t.co/9g0718Z4fD Team Andy Lincoln 25/04/2015 15:30 FALSE FALSE TeamAndyLincoln en 3172331574 2 FALSE http://pbs.twimg.com/profile_images/592721033687408640/Pi-YUSNO_normal.png

2 Analog man in a very public digital world. and yup I’m that guy. 20115 271401 6 1225 http://t.co/7lRxFyAd51 Michael Cudlitz 16/04/2009 6:31 FALSE 74

TRUE Cudlitz Southland en 31672638 1575 FALSE http://pbs.twimg.com/profile_images/508773026788564992/FGIaa62m_normal.jpeg

3 Today I Shall Behave As If This Is The Day I Will Be Remembered. INSTAGRAM - KISHSERRATOS - KISSHYJEWELRY 5602 197943 72 2314 http://t.co/jKTPBFlmy9 Christian Serratos 06/07/2009 5:24 FALSE TRUE cserratos en 54125479 4625 FALSE http://pbs.twimg.com/profile_images/3093449694/ 140af2f7f3ff5d36f38c61f51a642975_normal.jpeg

todos.df[todos.df==0]<-1

El siguiente paso es estudiar a qué grupo pertenece cada usuario, calcu- lando la distancia entre él y los centroides de los grupos. Este algoritmo crea los grupos tal que la suma de los cuadrados de los puntos a los centros de los conglomerados sea mínima. Debido a las posibles diferencias que pueden existir entre las variables, número de seguidores y seguidos, se transforman tomando logaritmos para que la agrupación sea más adecuada. Y se guardan estos datos en un data frame. todos.df$logFollowersCount <-log(todos.df$followersCount) todos.df$logFollowersCount[1:8]

[1] 6.510258 12.511353 12.195734 11.786291 12.288159 [6] 12.726957 11.027686 6.862758 todos.df$logFriendsCount <-log(todos.df$friendsCount) todos.df$logFriendsCount[1:8]

[1] 6.616065 7.110696 7.746733 5.755742 4.744932 6.035481 [7] 5.209486 3.555348 datos <- data.frame(todos.df$logFriendsCount,todos.df$logFollowersCount) datos[1:8,] todos.df.logFriendsCount todos.df.logFollowersCount Análisis Estadísticos con R. Construcción de libros en R. 75

1 6.616065 6.510258 2 7.110696 12.511353 3 7.746733 12.195734 4 5.755742 11.786291 5 4.744932 12.288159 6 6.035481 12.726957

Finalmente, con estos datos se realiza el algoritmo de las k − medias.R consta de la función kmeans del libro stats el cuál contiene funciones para cálculos estadísticos y generación de números aleatorios. Los argumentos de la función son:

x: matriz de datos.

centers: número de grupos.

iter.max: número de iteraciones máximo.

nstart: número de centros iniciales.

algorithm: nombre del algoritmo(Lloyd y Forgy).

object: objeto de la clase k-means de R.

method: nombre del método(centers ó classes).

Esta función devuelve un objeto de la clase "kmeans", es decir, una lista con al menos las siguientes componentes:

cluster: un vector de enteros (de 1 a k) que indica el cluster al que se asigna cada punto.

centers: una matriz con los centros de los clusters.

totss: la suma total de cuadrados.

withinss: vector de la suma de los cuadrados, de cada uno de los com- ponentes de cada grupo.

tot.withinss: suma total de los cuadrados dentro de la agrupación.

betweenss: suma de los cuadrados entre clusters.

size: número de puntos en cada grupo. 76

iter: número de iteraciones.

Las órdenes necesarias son las siguientes, en las que clasificamos en 3 gru- pos y los puntos iniciales varían para mejorar la solución:

#k medias con 3 grupos, 10 iteraciones y elige 100 veces 3 puntos iniciales distintos. kmedias<- kmeans(datos, centers=3, iter.max=10, nstart=100) #Añade el grupo de cada usuario tanto seguidores como seguidos todos.df$cluster <- kmedias$cluster #gráfico de los grupos plot(logFollowersCount ~ logFriendsCount, col = cluster, data = todos.df, pch=19)

Figura 4.5: Seguidores y seguidos k-medias (3 grupos).

El gráfico 4.4 puede ampliarse con más relaciones. A veces es interesante conocer si los seguidos de un usuario también comparten seguidos. Con este Análisis Estadísticos con R. Construcción de libros en R. 77 objetivo, se crea el siguiente código que representa un gráfico para compro- bar esta característica. Al igual que en los casos anteriores el primer paso es extraer los nombres de los seguidos, primero usando la función getF riends y luego getScreenName para obtener los nombres de la lista (por comodidad sólo seleccionamos 8 de los seguidos). Y creamos un data frame con dichos nombres. Las órdenes utilizadas para obtenerlo junto con sus salidas son:

usuario <- getUser("andylincolnnet") usuario [1] "andylincolnnet" seguidos <- usuario$getFriends(n=8)

$‘3172331574‘ [1] "TeamAndyLincoln"

$‘31672638‘ [1] "Cudlitz"

$‘54125479‘ [1] "cserratos"

$‘18382902‘ [1] "AlannaMasterson"

$‘986235307‘ [1] "SonequaMG"

$‘23173468‘ [1] "TylerJamesWill"

$‘182199162‘ [1] "alexandrabreck1"

$‘3131268557‘ [1] "CharlieCoxNews" df <- lapply(seguidos,function(x) x$getScreenName()) 78 df [,1] X3172331574 "TeamAndyLincoln" X31672638 "Cudlitz" X54125479 "cserratos" X18382902 "AlannaMasterson" X986235307 "SonequaMG" X23173468 "TylerJamesWill" X182199162 "alexandrabreck1" X3131268557 "CharlieCoxNews" df <- t(data.frame(df)) df [,1] [1,] "TeamAndyLincoln" [2,] "Cudlitz" [3,] "cserratos" [4,] "AlannaMasterson" [5,] "SonequaMG" [6,] "TylerJamesWill" [7,] "alexandrabreck1" [8,] "CharlieCoxNews" row.names(df) <- NULL

Obtenido el data.frame con los nombres, se desean buscar los seguidos de los seguidos de Andrew. En R no existe una función que realice esta opera- ción directamente por lo que nosotros creamos una apropiada. Esta función extraerá 10 seguidos de cada uno de los seguidos del protagonista de la serie, y entre la búsqueda de los de uno y otro le introducimos un tiempo de parada de 10 segundos. Conseguidos los nombres, se crea una lista con ellos.

tiempoparada = 10 f <- lapply(seguidos,function(x){ a <-x$getFriends(n=10) Análisis Estadísticos con R. Construcción de libros en R. 79

Sys.sleep(tiempoparada) return(a)}) lista.nombres <- lapply(f, function(l2){lapply(l2, function(x) x$getScreenName())}) lista.nombres <- lapply(lista.nombres, function(x){t(data.frame(x))}) lista.nombres <- sapply(lista.nombres, function(x){paste(x,collapse = ’ ’ )})

Mostramos algunas de las salidas para así visualizar su estructura. En el primer caso, se observa los identificadores de dos seguidos de Andrew y 10 seguidos de cada uno de ellos. Para modificar esta estructura creamos un data.frame que tiene 3 dimensiones, la primera son los seguidos de cada se- guido, las columnas su identificador y su nombre y la tercera el identificador de cada seguido de Andrew. Y por último, todos los seguidos de cada seguido los unimos en un sólo objeto. lista.nombres <- lapply(f, function(l2){lapply(l2, function(x) x$getScreenName())}) lista.nombres[1:2]

$‘3172331574‘ $‘3172331574‘$‘3317359325‘ [1] "EllaAstor"

$‘3172331574‘$‘2197574994‘ [1] "tokedowding"

$‘3172331574‘$‘3225573211‘ [1] "7e5d7cecda2d444"

$‘3172331574‘$‘2203189291‘ [1] "Whitetigress1"

$‘3172331574‘$‘2523622760‘ [1] "ZaynsMilf"

$‘3172331574‘$‘3167831544‘ 80

[1] "pattydixon1964"

$‘3172331574‘$‘611530014‘ [1] "LiamBarrettEsq"

$‘3172331574‘$‘1601419177‘ [1] "IshyTweets"

$‘3172331574‘$‘29151815‘ [1] "ZombieRiot"

$‘3172331574‘$‘2960002020‘ [1] "ebi_coulter"

$‘31672638‘ $‘31672638‘$‘3195524545‘ [1] "jamespuppetDN"

$‘31672638‘$‘95744005‘ [1] "JasonRyanTV"

$‘31672638‘$‘16047127‘ [1] "Summerrey"

$‘31672638‘$‘110069319‘ [1] "DahliaLegault"

$‘31672638‘$‘39679397‘ [1] "jkulyan"

$‘31672638‘$‘2325915732‘ [1] "jenhuff1971"

$‘31672638‘$‘256569299‘ [1] "harryscxrls"

$‘31672638‘$‘785241643‘ [1] "BeccaBaby2015"

$‘31672638‘$‘70518745‘ Análisis Estadísticos con R. Construcción de libros en R. 81

[1] "katrosenfield"

$‘31672638‘$‘2258401779‘ [1] "ciarawhyte0" lista.nombres <- lapply(lista.nombres, function(x){t(data.frame(x))}) lista.nombres[1:2]

$‘3172331574‘ [,1] X3317359325 "EllaAstor" X2197574994 "tokedowding" X3225573211 "7e5d7cecda2d444" X2203189291 "Whitetigress1" X2523622760 "ZaynsMilf" X3167831544 "pattydixon1964" X611530014 "LiamBarrettEsq" X1601419177 "IshyTweets" X29151815 "ZombieRiot" X2960002020 "ebi_coulter"

$‘31672638‘ [,1] X3195524545 "jamespuppetDN" X95744005 "JasonRyanTV" X16047127 "Summerrey" X110069319 "DahliaLegault" X39679397 "jkulyan" X2325915732 "jenhuff1971" X256569299 "harryscxrls" X785241643 "BeccaBaby2015" X70518745 "katrosenfield" X2258401779 "ciarawhyte0" lista.nombres <- sapply(lista.nombres, function(x){paste(x,collapse = ’ ’ )}) lista.nombres[1:2] 82

3172331574

"EllaAstor tokedowding 7e5d7cecda2d444

Whitetigress1 ZaynsMilf pattydixon1964

LiamBarrettEsq IshyTweets ZombieRiot ebi_coulter" 31672638

"jamespuppetDN JasonRyanTV Summerrey

DahliaLegault jkulyan jenhuff1971 harryscxrls BeccaBaby2015 katrosenfield ciarawhyte0"

En general, para este tipo de gráficos se tiene una gran cantidad tanto de filas como de columnas, (en este ejemplo no se posee un número tan elevado porque se han seleccionado algunos de los usuarios) por lo que es útil trabajar con matrices de dispersión. Estas matrices son matrices en las que la mayoría de los elementos son ceros y sólo conviene tener en cuenta las entradas distintas de cero. En R el libro Matrix permite crear este tipo de matrices con la orden Matrix, cuyos argumentos son: data: vector de datos númerico o matriz.

nrow: número de filas.

ncol: número de columnas.

byrow: valor lógico. Si es falso la matriz se crea por columnas sino por filas.

dimnames: lista con dos componentes, que serán los nombres de cada una de las dimensiones.

sparse: valor lógico, que indica si la matriz es dispersa o no.

doDiag: sólo si sparse = F ALSE, es un valor lógico que indica se considera la matriz diagonal. Pero antes de esto, es necesario crear una matriz que tenga como columnas los seguidos y como filas los seguidos de los seguidos de Andrew y estudiar si tienen relación, se puede conseguir con una matriz de términos-documentos, Análisis Estadísticos con R. Construcción de libros en R. 83 que al igual que anteriormente primero es necesario crear un Corpus. corpus <- Corpus(VectorSource(lista.nombres)) corpus <> nombrestdm <- as.matrix(TermDocumentMatrix(corpus))

En la siguiente salida observamos algunas relaciones. Por ejemplo, 7e5d7cecda2d444 está relacionado con el primer seguido, ó amc_tv está relacionado tanto con el número 4 como con el 5. Estas relaciones se observaran en el gráfico obje- tivo de este problema.

nombrestdm[1:5,] Docs Terms 1 2 3 4 5 6 7 8 7e5d7cecda2d444 1 0 0 0 0 0 0 0 ali_reeed 0 0 0 0 0 0 1 0 amc_tv 0 0 0 1 1 0 0 0 andrewgarfields 0 0 0 0 0 0 0 1 anniemoho 0 0 0 0 0 0 1 0 df<-colnames(nombrestdm)

Además, para crear la matriz dispersa podemos filtrar algunos seguidos es decir, aquellos que verifiquen alguna condición. Por ejemplo, aquellos que tengan un número de seguidos mayor que un número determinado. En esta situación se utilizan todos debido a los datos que se tienen, ya que los hemos restringido anteriormente al seleccionar solamente 8 y 10. numamig = 1 nombrestdm <- Matrix(nombrestdm[rowSums(nombrestdm)>=numamig,], sparse = TRUE ) nombrestdm[1:5,] 5 x 8 sparse Matrix of class "dgCMatrix" Docs 84

Terms 1 2 3 4 5 6 7 8 7e5d7cecda2d444 1 ...... ali_reeed ...... 1 . amc_tv . . . 1 1 . . . andrewgarfields ...... 1 anniemoho ...... 1 .

# Obtenemos indices de columnas y filas de elementos no nulos indices <- summary(nombrestdm)

En la salida anterior se observan las 5 primeras filas de la matriz de dis- persión construida con la orden Matrix.

Finalmente, se crean al igual que en el primer ejemplo las relaciones con la función merge y se representa el gráfico con la función tkplot.

# Construimos data.frame con relaciones usuario -> seguidos # Relaciones: Andrew con sus seguidos relacion <- data.frame(User=’andylincolnnet’,Friend=df)

User Friend 1 andylincolnnet 1 2 andylincolnnet 2 3 andylincolnnet 3 4 andylincolnnet 4 5 andylincolnnet 5 6 andylincolnnet 6

# Seguidos con sus seguidos relacion <- merge(relacion, data.frame(User=colnames(nombrestdm)[indices$j], Friend = rownames(nombrestdm)[indices$i]),all=T)

User Friend 1 andylincolnnet 1 Análisis Estadísticos con R. Construcción de libros en R. 85

2 andylincolnnet 2 3 andylincolnnet 3 4 andylincolnnet 4 5 andylincolnnet 5 6 andylincolnnet 6 === User Friend 83 8 nami_1104 84 8 netflixanz 85 8 netflixde 86 8 netflixfr 87 8 netflixuk 88 8 theayeletzurer

## Creamos el grafo de las relaciones g <- graph.data.frame(relacion, directed = FALSE) V(g)$label <- V(g)$name V(g)$color <- "lightblue" V(g)$color[1] <- "red" inx <- match(df,V(g)$name)

inx [1] 2 3 4 5 6 7 8 9

V(g)$color[inx] <- "lightgreen" tkplot(g)

El gráfico obtenido es el siguiente, donde podemos comentar por ejemplo que dos de los seguidos, 4 y 5, tienen un amigo en común, amc_tv como también se mostraba en las matrices. Así sabemos que algunos de los segui- dos de Andrew tienen también seguidos comunes. 86

Figura 4.6: Grafo relaciones entre los seguidos de los seguidores de Andrew Lincoln.

En resumen, comentamos algunas de las conclusiones que hemos obtenido en el análisis de la serie. Mediante las diferentes técnicas del análisis de datos hemos visualizado las palabras más comunes tweeteadas por los usuarios, que debido al comienzo del rodaje de la nueva temporada de The Walking Dead son los protagonistas que participan en ésta y palabras relacionadas con es- tas grabaciones. En los distintos gráficos obtenidos puede observarse que por ejemplo bretonthwaites o yesterday son palabras muy frecuentes en los da- tos analizados. También el Análisis de Sentimientos nos permite afirmar que los usuarios parecen estar entusiasmados con la serie, o concretamente con el comienzo de esta nueva temporada. Esto se debe a que la mayoría de los tweets descargados son positivos y además, transmiten un mensaje de alegría.

Finalmente, en los grafos representados en este capítulo hemos estudiado las diferentes relaciones del protagonista de la serie con sus seguidos y segui- dores. Observando que algunos usuarios mediante los que mantiene contacto Análisis Estadísticos con R. Construcción de libros en R. 87 en twitter son personajes de la serie, o personas que trabajan en televisión, incluso alguna de las cadenas donde se emite la serie como por ejemplo, Fox. 88 Capítulo 5

Conclusiones

El análisis de redes sociales (ARS) es una estrategia metodológica basada en el análisis matemático de la teoría de grafos y los aportes de la sociología. El ARS analiza la morfología, los patrones de comportamiento y las relacio- nes de los individuos que componen las redes sociales.

Para la ciencia, el concepto de red social hace referencia a un conjunto finito de actores y relaciones (emociones, conductas, actitudes, etc) que los vinculan entre sí. Estas relaciones se pueden representar en forma de uno o varios grafos o mediante matrices, en las cuales las filas y columnas represen- tan los actores y cada elemento de la matriz toma el valor 1 ó 0 dependiendo si existe relación entre el individuo de la fila i−ésima con el individuo de la columna j−ésima o no respectivamente.

Internet en general y las redes sociales en particular, proporcionan una importante fuente de información y recursos que deben ser considerados en el estudio de la evolución de situaciones y que vendrán marcados por el es- tablecimiento de relaciones y conexiones entre los usuarios del sistema.

Hoy en día, entornos de comunicación como Facebook, Twitter o Linke- dIn se han convertido en algo imprescindible para millones de personas que dedican varias horas al día a relacionarse a través de ellas.

Pero las redes sociales no pueden considerarse sólo un sistema de comu- nicación. Son también un importante medio de transmisión de información, en tiempo real, que en los últimos tiempos está llegando a desbancar, en lo relativo a la eficacia, a los medios tradicionales de información, como son la prensa y la televisión.

89 90

En este ámbito surge el concepto de Análisis de Redes Sociales. El aná- lisis de redes es un análisis estructural que se define como una metodología basada en un conjunto de técnicas analíticas que abarcan desde la obtención de la información hasta la medición y obtención de conclusiones a partir del estudio de las relaciones entre las diferentes fuentes de información o la ocu- rrencia de determinados eventos.

En el capítulo 1 hemos explicado las diferentes redes sociales junto con los diferentes elementos que componen una red social como introducción. Estas redes sociales proporcionan gran cantidad de información que es necesaria gestionar para poder extraer conclusiones acerca de los datos publicados por los usuarios.

La disponibilidad de grandes cantidades de datos impide que los datos se analicen de forma manual. Entonces surge la necesidad de usar nuevas técnicas estadísticas, cuyo objetivo sea convertir los datos en conocimiento para extraer conclusiones. Este proceso es el que se conoce como Análisis de datos o Minería de datos. Este análisis se explica en el segundo capítulo, ade- más diferentes métodos o técnicas que permiten obtener conclusiones. Será necesario distinguir el tipo de información que se desea extraer de los datos para decidir cuál es la técnica más adecuada para tomar una decisión en una determinada situación. Algunas de las técnicas son el análisis Cluster, redes neuronales, etc.

Como ya hemos indicado anteriormente, las redes sociales constituyen una importante fuente de información sobre los individuos y las relaciones que se establecen entre ellos, pero también aportan datos sobre las opiniones o los sentimientos que aparecen en los individuos respecto a temas concretos abordados en las redes sociales. El Análisis de Sentimientos explicado en el capítulo 3 nos permite clasificar las opiniones mediante procesos computacio- nales. En este capítulo hemos explicado dos formas de clasificarlas mediante el clasificador de Naïve Bayes o las máquinas vectores sporte.

Finalmente, en el último capítulo hemos aplicado las distintas técnicas explicadas en los capítulos anteriores a un caso práctico, el estudio de la re- percusión de la serie televisiva The Walking Dead en la red social Twitter. Para este estudio hemos utilizado el lenguaje estadístico R, y hemos analiza- do 1500 tweets con el hastag thewalkingdead. Primero, hemos realizado un análisis de datos, teniendo que el día anterior a la obtención de los tweets comenzó el rodaje de la nueva temporada, a partir de las palabras más co- munes y sus relaciones. Análisis Estadísticos con R. Construcción de libros en R. 91

Además hemos realizado un análisis de sentimientos, en el que hemos obtenido que la serie parece tener éxito o al menos, los usuarios de twitter parecen estar contentos con ella, ya que la mayor parte de los tweets son de "alegría".

Este capítulo finaliza con varios grafos en los que se pueden observar las diferentes relaciones de los usuarios de twitter. Concretamente, del protago- nista de la serie con sus seguidos y seguidores en la red social Twitter.

Por último es importante comentar, como se puede observar a lo largo del trabajo, la gran cantidad de funciones de las que dispone el lenguaje R, que facilitan todo el estudio desde la obtención de los datos hasta la obtención de conclusiones. 92 Bibliografía

[1] A. Hanneman, Robert. Introducción a los métodos del Análisis de Re- des Sociales. (2000). Departamento de Sociología de la Universidad de California Riverside.

[2] Heimann, Richard y Danneman, Nathan. Social Media Mining with R. (2014).

[3] Islas, Octavio y Ricaurte, Paola. Investigar las redes sociales. (2013).

[4] Leonidas Aguirre, Julio. Introducción al Análisis de Redes Sociales. (2011).

[5] Lozano Pérez, Sergio. El Desarrollo Sostenible como ámbito de aplica- ción del Análisis de Redes Sociales. (2006). no 14.

[6] M. Googreau, Steve, S. Handcock, Mark, R. Hunter, David, T. Butts, Carter y Morris, Martina. Journal of Statistical Software. A statnet Tu- torial. (2008). Volume 24, Issue 9.

[7] Monsalve Moreno, Mauricio. Análisis de redes sociales: un tutorial. (2008).

[8] Sanz Menéndez, Luis. Análisis de redes sociales: o cómo representar las estructuras sociales subyacentes. Consejo Superior de Investigaciones Científicas (CSIC). Unidad de Políticas Comparadas (UPC). Grupo de Investigación sobre Políticas de Innovación, Tecnología, Formación y Educación (SPRITTE). (2003).

[9] Zhao, Yanchang. R and Data Mining: Examples and Case Studies. (2013) .

[10] http://cran.r-project.org/web/packages/e1071/e1071.pdf

[11] http://cran.r-project.org/web/packages/tm/tm.pdf

93 94

[12] http://cran.r-project.org/web/packages/twitteR/twitteR.pdf

[13] https://dlegorreta.wordpress.com/2015/03/26/clasificacion-binaria- naive-bayes/

[14] http://mpqa.cs.pitt.edu/lexicons/subj_sense_annotations/

[15] http://pendientedemigracion.ucm.es/info/pecar/Historia.htm

[16] http://www.bvs.sld.cu/revistas/ibi/vol29_2_10/ibi13210.htm

[17] http://www.cad.com.mx/historia_de_twitter.htm

[18] https://es.wikipedia.org/wiki/The_Walking_Dead_(serie_de_televisión)

[19] https://www.ibm.com/developerworks/ssa/local/im/que-es-big-data/

[20] Lázaro Ávila, María 2014 http://www.hablandoencorto.com/2014/02/herramientas- crear-nubes-de-palabras.html

[21] http://www.europapress.es/sociedad/noticia-desarrollan-metodo- automatico-detectar-ironia-comentarios-usuarios-redes-sociales- 20120627130544.html

[22] http://www.humanodigital.com.ar/la-importancia-de-las-redes- sociales-en-mi-vida/#.VZvKpvntmko

[23] http://www.icesi.edu.co/CRAN/web/packages/sentiment/sentiment.pdf

[24] http://www.masterdepublicidad.com/marketing-thewalking-dead/

[25] http://www.rdatamining.com/

[26] https://sites.google.com/site/miningtwitter/questions/sentiment/sentiment