Analizar Twitter con la Stream API en RStudio

RStudio es una herramienta perfecta para hacer análisis de datos, pero para analizar datos, lo más importante es tener datos, y eso gracias a Internet, no es nada complicado de conseguir. Por ejemplo, Twitter es una fuente de información inagotable, si queremos investigar qué pasa ahí dentro podemos conseguir tweets y meterlos en RStudio. Pero hay formas de hacerlo todo sin salir del programa usando la API de Twitter (concretamente la Stream API) y un par de librerías de RStudio, ¿lo vemos?

RStudio-Twitter

RStudio y Twitter

Primero me gustaría distinguir entre dos formas que hay para obtener datos de Twitter (hay más): el search (búsqueda de Tweets) y el stream (datos en tiempo real). Veamos las diferencias.

  • La Search API, muestra información muy similar a lo que obtenemos cuando usamos el buscador de Twitter. Pero es muy importante que sepas que esto está centrado en la popularidad de los tweets o su cercanía temporal, más que en dar una información completa. Citando la documentación “the Search API is focused on relevance and not completeness” (Twitter Developers API – Search). Esto quiere decir que con esta API, solamente tendremos acceso a una pequeña parte del océano que es Twitter, aunque al menos podemos consolarnos si pensamos que será la más relevante.
  • La Stream API, te interesará más si lo que quieres es tener acceso a la información completa. Esto funciona más como una “grabadora” en la que se van registrando todos los tweets a medida que se van creando. La ventaja es que no se te escapa nada, y la desventaja es que tienes que quedarte escuchando durante el tiempo de captura y no tendrías acceso a tweets antiguos (Twitter Developers API – Stream).

Sea cual sea la API que te interese, necesitarás acceso como desarrollador (developer). Así que si no has activado tu cuenta de Twitter como desarrollador, ve a esta URL https://apps.twitter.com y logueate. Nota: Necesitarás que tu cuenta esté verificada con un número de teléfono para poder darte de alta y crear apps de Twitter.

Cuando hayas resuelto el tema del registro, podrás hacer aplicaciones que utilicen la API de Twitter. Pulsa el botón de “Create New App” y vamos a configurarla. Ten en cuenta que las opciones que aparecen a continuación son muy generales, es decir, que se ajustan a todos los posibles tipos de aplicación que se pueden hacer en Twitter, así que algunas cosas no serán importantes para nosotros.

  • Name: nombre de la app. Pon algo descriptivo, pero recuerda que no puede estar repetido por otros usuarios y que, en nuestro caso, solamente lo vas a usar tú, así que no hace falta que busques algo bonito. Ej: RStudio API de Malnuer
  • Description: siguiendo lo dicho antes, de que solamente lo vas a usar tú, puedes poner aquí lo que te parezca mejor y que te sirva para saber por qué creaste esa app si te la encuentras 2 años después. Ej: Para hacer pruebas de recogida de Tweets en RStudio
  • Website: una vez más, solamente lo verás tú, así que pon lo que tú quieras. Ej: http://malnuer.es
  • Callback URL: esto es importante que lo dejes vacío. Si pusieses una URL aquí, durante el proceso de autentificación serías redirigido a esa dirección, pero no queremos eso. Si no pones nada, se usa otro sistema basado en la creación de un pin de autorización, y eso sí es lo que queremos.
  • Yes, I agree (Developer Agreement): marca esta casilla para poder continuar.

Bien, ahora ve a la pestaña de “Keys and Access Tokens” donde podrás ver las credenciales de la aplicación que necesitarás luego. La Consumer Key (API Key) y el Consumer Secret (API Secret) sirven para identificar a tu aplicación.

Nota: En algunos casos si se quiere identificar al usuario que usa la aplicación, podemos generar unas claves personales llamadas Access Token y Access Token Secret. Para obtenerlas ve abajo a la sección “Your Access Token” y pulsa en el botón “Create my access token”, pero en este artículo no vamos a usarlo.

Hemos acabado con Twitter por ahora, vamos a abrir por fin nuestro RStudio y empezaremos por instalar algunas librerías que nos harán falta. Seguramente recuerdes que para instalar librerías el comando es install.packages(“nombre_librería”), así que necesitamos estas:

install.packages("ROAuth")
install.packages("streamR")

Con el primero haremos la autentificación usando el protocolo OAuth que es el que se utiliza con la API de Twitter, y con el segundo leeremos el Stream API. Nota: Estos paquetes seguramente instalen algunas dependencias extra.

¿Todo instalado? Bien, vamos a cargar las librerías en memoria:

library(ROAuth)
library(streamR)

Lo siguiente es obtener el permiso para usar la API de Twitter, usando nuestros tokens de aplicación y la librería ROAuth. Pero cuidado porque la API sólo puede usarse sobre SSL, así que necesitaremos las credenciales del certificado, que tendrán que estar en formato PEM para usarlo con nuestra librería. Debo decir que con esta parte me hago un poco de lío, así que mejor voy a pasar a la receta directamente. Necesitas conseguir un archivo con las credenciales en formato PEM y ponerlo en la carpeta de trabajo para que lo pueda usar la librería. Este archivo lo puedes conseguir aquí: Certificados de seguridad en formato PEM. Puedes descargarlo manualmente o puedes usar esta línea en RStudio que hará el trabajo por ti:

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

Si ya tenemos el archivo descargado, podemos usar la librería ROAuth para obtener el acceso. Hacen falta dos líneas, la primera (un poco larga) creará un objeto de autorización con los datos necesarios, y la segunda ejecutará el protocolo OAuth (handshake):

autorizacion <- OAuthFactory$new(consumerKey='xxxxxxxxxxxxxxxxxxxxxxxxx',consumerSecret='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy',requestURL='https://api.twitter.com/oauth/request_token',accessURL='https://api.twitter.com/oauth/access_token',authURL='https://api.twitter.com/oauth/authorize')

autorizacion$handshake(cainfo='cacert.pem')

Sustituye los caracteres azules por tu consumer key y los naranja por tu consumer secret. No puedo explicar mucho de estas líneas, sólo que contienen los datos necesarios para iniciar el llamado “baile de tokens“. Aquí el cliente y el servidor se envían informaciones cifradas uno al otro para asegurarse de que todo está en orden y es seguro. En medio de esta danza, se pedirá al usuario que de permiso a la aplicación desde una página del navegador que se abrirá automáticamente en algún momento (si no se abre, lo puedes hacer manualmente con la URL que habrá aparecido en la consola de RStudio). Cuando acabes con la página de autorización aparecerá un Pin de 7 cifras que aparecerá en pantalla. Vuelve a RStudio y pégalo en la consola que estará en modo input esperando a que lo introduzcas.

Hecho todo esto, el objeto autorización estará completo y podrá usarse con la librería streamR para obtener datos ¡Vamos a capturar tweets! Tenemos que elegir alguna palabra que nos sirva de filtro y también debemos limitar de alguna manera la cantidad de datos, para evitar que se nos vaya de las manos. Elegiremos por ejemplo la palabra “gracias” (en español) que es bastante genérica y vamos a limitar a 30 segundos o 1000 tweets, lo que ocurra antes.

filterStream(file.name="tweets_gracias.json", track="gracias", tweets=1000, oauth=autorizacion, timeout=30, lang="es")

Indicamos que los resultados se deben guardar en un archivo llamado tweets_gracias.json, y como ves le hemos tenido que pasar el objeto autorización. Cuando lo ejecutes verás un cartelito avisando de que se están capturando los tweets. Vamos a esperar a que acabe…

¿Ya está? pues ahora tenemos los tweets en formato JSON. Vamos a cargarlos en un dataset de RStudio, podemos usar esta función:

gracias <- parseTweets(tweets='tweets_gracias.json')

Ahora, puedes hacer doble click sobre la variable gracias en el panel de “Environment” o simplemente escribir View(gracias) en la consola y podrás echar un vistazo a los datos. Hay mucha información de cada tweet, seguro que ya se te empiezan a ocurrir cosas que representar y explorar. Pero no quiero alargarme y este artículo se centra en conseguir los datos más que en investigar en ellos.

De todas formas no puedo acabar sin hacer un histograma sencillo por lo menos. Por ejemplo, del número de amigos que tiene la gente que ha agradecido algo en ese ratillo que hemos estado escuchando: (tus resultados serán distintos a los míos y tendrás que ajustarlos de otra forma seguramente)

hist(gracias$friends_count, breaks=2000, main="Histograma de número de amigos", xlim=c(0,5000), xlab="Número de amigos", ylab="Frecuencia")
Histograma de número de amigos

Histograma de número de amigos en RStudio

Para terminar, una pregunta. ¿Es esta la mejor forma de obtener información de Twitter? Debo decir que probablemente no. Esta manera es cómoda y rápida, pero es demasiado básica. Lo más probable es que si estás metido en alguna investigación, necesites filtrar los datos con mucha más precisión. Podrías querer escuchar durante mucho tiempo y descartar lo que no te interese en tiempo real en vez de guardar todo. Sin embargo, siempre es bueno tener un buen arsenal de alternativas y nos puede servir para recoger algunos datos rápidos en un momento concreto o para tener unas primeras impresiones antes de pasar a hacer un estudio más profundo…


 

Nota importante: Si has hecho todo lo que aparece en este artículo, tendrás el objeto autorización que te permite jugar con la Stream API de Twitter. Si quieres seguir en otro momento puedes guardar el objeto en un archivo para no tener que volverte a autentificar (aunque tampoco es que sea demasiado traumático).

Cuando tengas el archivo autorización puedes usar esta línea para guardarlo en un archivo:

save(autorizacion, file="autorizacion.Rdata")

Y cuando quieras recuperarlo, bastará con cargar el archivo, puedes usar esto:

load("autorizacion.Rdata")
Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn