Este pasado viernes 14 de julio a las 00:00 horas comenzó oficialmente el período establecido por la Cámara Nacional Electoral de campaña de cara a estas PASO 2017. Hasta el próximo 11 de agosto a las 08:00 estamos en campaña.

Además de la cuestión formal, ya que está más que claro que la campaña es cada vez más permanente que formal, para este proyecto es un momento clave ya que es el punto de partida del análisis concreto sobre la campaña en Twitter (había que definir un marco temporal para que el análisis sea consistente en términos metodológicos). Aprovechamos esta oportunidad entonces para contar una de las partes técnicas que está detrás del proceso de alcanzar resultados analíticos: tener los tuits disponibles.

Ya mencionamos que estaremos capturando los tuits de 40 cuentas de candidatos de CABA y PBA, esos tuits a priori serán los que permitan realizar análisis de diferente tipo. También podríamos aclarar que en realidad estos 40 son un recorte del conjunto real que está siendo capturado que contempla 94 candidatos, expandiendo los límites más allá de las listas mencionadas y las provincias predefinidas (en la captura “ampliada” se incluyen los principales candidatos de Mendoza, Córdoba y Santa Fé, así como se extiende el alcance en PBA y CABA).

Explicaremos entonces como estamos haciendo para capturar estos tuits.

R no es sólo una letra

R es un lenguaje y  entorno de programación diseñado específicamente para trabajar con datos a nivel estadístico, desarrollar visualizaciones y combinar la data. Permite además incorporar diferentes “paquetes” que le agregan funcionalidades por encima de las ya predefinidas. Además de R como entorno de programación, utilizaremos R Studio que es una interfaz gráfica que hace que el diálogo con la Matrix sea un poco más fácil para humanos promedio (no programadores).

Una vez descargados estos dos programitas, deberíamos cargar los siguientes paquetes para que esto funcione:

  • RCurl
  • Rjsonio
  • ROAuth
  • stringr
  • TwitteR

No todos ellos vienen preinstalados. Para instalar paquetes nuevos dentro del entorno de R Studio se hace a través de este lugar:

Conectando con Twitter

Una vez que tenemos el entorno listo, es decir los paquetes que mencionamos arriba instalados y activados (no es suficiente con instalarlos, hay que chequear en el listado que el checkbox de cada paquete esté tildado), deberíamos comenzar el proceso de conectar con la API de Twitter para realizar el pedido de la data que quiero capturar. Esto implica un paso más que es el de obtener las credenciales necesarias.

Para hacer esto debemos crear una app que conecte con Twitter. Esto suena mucho más difícil de lo que efectivamente es. Ingresando a My Apps en el portal de desarrollo de Twitter y habiendo logueado con nuestra cuenta podremos crear un App cargando unos datos básicos:

Habiendo completado este primer paso debemos obtener las siguientes credenciales:

  • api_key
  • api_secret
  • token
  • token_secret

Guardemos esto en un txt o algún archivo que nos quede a mano ya que cada vez que querramos pedirle datos a Twitter vía R vamos a necesitarlos.

Pidiéndole la data a José Twitter

Ya con las credenciales listas, abrimos R Studio, comprobamos que estén los paquetes activos y empezamos a ingresar código en la consola (A, B, C y D lo deberán reemplazar con sus propias credenciales).

# Declarando las credenciales del API de Twitter
api_key <- "A"
api_secret <- "B"
token <- "C"
token_secret <- "D"

Estas primeras líneas le asignan los valores de nuestras credenciales a las variables ‘api_key’, ‘api_secret’, etc. Ahora lo que debemos hacer es convocar estas variables al conectarnos con la API de Twitter para que nos permita dialogar con su motor.

# Invocando las credenciales para conectar con Twitter
setup_twitter_oauth(api_key, api_secret, token, token_secret)

Si la conexión funcionó bien deberíamos ver el siguiente mensaje en la consola:

[1] "Using direct authentication"

Una vez conectados con el motor de Twitter deberíamos hacerle el pedido de lo que queremos capturar. En este caso nos interesa que el API nos entregue el total de tuits emitidos por los usuarios que componen una lista. Esto tiene un límite en términos temporales, una semana aproximadamente. Utilizaremos el API de búsquedas de Twitter. Pueden encontrar toda la documentación sobre la sintaxis aquí.

# Haremos una búsqueda a través del SearchAPI.
tweets <- searchTwitter("#PASOenTwitter", n=100, lang="es")

Este código llena la variable “tweets” con los 100 primeros tuits que contienen el hashtag #PASOenTwitter que fueron publicados en español. En realidad el código que usamos es distinto ya que en vez de pedirle los tuits que contienen un hashtag, queremos todos los emitidos por los usuarios de una lista: twitter.com/juanibelbis/lists/pasoentwitter

# Haremos una nueva búsqueda a través del SearchAPI.
corpustweets <- searchTwitter("list:juanibelbis/pasoentwitter", n=10000, lang="es")

Como ven, a diferencia de la vez anterior, le cambiamos el nombre a la variable que ahora se llama “corpustweets” y a través del API le solicitamos que nos entregue los primeros 10 mil tuits emitidos en español por los usuarios que componen esa lista.

Es probable que salte un error en este punto:

Warning message:
In doRppAPICall("search/tweets", n, params = params, retryOnRateLimit = retryOnRateLimit, :
100 tweets were requested but the API can only return 19

Esto lo que nos indica es que estamos pidiendo 100 tuits, pero  la API nos puede devolver sólo 19 (por el límite temporal). La solución es muy fácil, cambiemos el 100 en el código del pedido por 19 o menos.

Las manos en la data

Una vez que logramos que los tuits estén en nuestra variable “corpustweets” deberíamos lograr que esto sea trabajable. Para ello en mi caso damos dos pasos más. El primero es convertir esta variable en lo que R llama un DataFrame. Para ello debemos introducir el siguiente código:

# Convertimos los datos obtenidos en una matriz
corpustweets.df <- twListToDF(corpustweets)

Luego de esto, podemos hacer un montón de cosas y seguramente mencionaremos alguna de ellas más adelante. Por ahora convertiremos esta matriz en un archivo .csv que nos permitirá trabajar la data en Excel o algún otro programa de hojas de cálculo.

# Ahora convertimos el DataFrame en un archivo
write.csv(corpustweets.df, file="corpustweets.csv")

¿Y ahora?

Bueno, hasta aquí llegamos por hoy. Ya tenemos al menos resuelta la cuestión de acceder a la data cruda de Twitter. El próximo post de estos va a estar orientado a trabajar los datos que nos devuelve la API de búsqueda de Twitter. Veremos algunos paquetes específicos de R orientados en este sentido y otras formas de trabajar la data por afuera.

Cualquier duda que surja y podamos contestar lo haremos aquí. Lo que no podamos contestar a priori, trataremos de buscarle la vuelta.

Juani Belbis

Juani Belbis

Consultor en innovación cívica y gestión de campañas electorales. Maestrando en Gestión de Contenidos de la Universidad Austral.
juanibelbis.com.ar
Juani Belbis

2 Comments

Xavier · 3 Agosto, 2017 at 5:40 pm

Muy copado el blog!!!

Otro método para capturar tuits - #PASOenTwitter · 28 Octubre, 2017 at 12:33 pm

[…] uno mejor, así que contaremos también este otro que es el que vengo utilizando últimamente. Anteriormente trabajamos con un paquete de R llamado TwitteR, hoy utilizaremos otro denominado rtweet. Este paquete nos permite capturar un poco más de una […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Related Posts

Codeando

El método más simple para capturar tuits con IFTTT

Veremos hoy otra forma de capturar tuits, aunque quizás no es la más completa, pero sin dudas es la más simple. En este caso no utilizaremos R, ni ningún lenguaje de programación. La herramienta para Read more…

Codeando

Otro método para capturar tuits

Ya abordamos aquí un método para capturar tuits, pero hemos encontrado uno mejor, así que contaremos también este otro que es el que vengo utilizando últimamente. Anteriormente trabajamos con un paquete de R llamado TwitteR, Read more…