Un conjunto de notebooks en R para extraer datos de Twitter y visualizarlos
Este repositorio se ha generado para hacer llegar a los investigadores unas herramientas que les permitan analizar información de Twitter sin que tengan que tener conocimientos de programación. Estas herramientas están en la línea de t-hoarder y de t-hoarder_kit, pero añadiéndoles una capa de visualización.
Este conjunto de herramientas están programadas en R, en formato notebook, que combina código R con texto enriquecido (Markdown). Esto permite una documentación más legible de los pasos a seguir. Se pueden ejecutar desde RStudio que es una aplicación de escritorio disponible para Windows, linux y Mac. Están pensados para que se ejecuten de una vez (opción run all) pero pueden ejecutarse paso a paso. Se aconseja ejecutarlos en Rstudio en modo visual (pestaña de la ventana de código) para que sea más legible.
El paso de parámetros se realiza en la primera casilla del cuaderno. Podría haber creado una aplicación interactiva con Shiny pero implicaría una configuración más compleja de las herramientas. En este momento me ha parecido lo más razonable y al alcance de todo el mundo organizarlo en notebook con la esperanza de que usándose, se despierte la curiosidad por R y algunos se animen a hacer sus pinitos.
Estos notebooks trabajan con esta estructura de directorios prefijada.
Los cuadernos para acceder a los datos (data) y las claves (keys) lo hacen de manera relativa al directorio dónde está el cuaderno. Aunque está configurado que el directorio de trabajo sea el del cuaderno, no siempre funciona. En el caso de que no encuentre los datos se debe configurar "Session / Set Working Directory / To Source File Location".
dir_raiz ----+-----datos # Se guardan los datos, cada dataset en un directorio independiente
|
+-----keys # se guardan los ficheros con las claves de acceso.
|
+-----notebooks # Se guardan los notebooh en R
Al descargar los datos de github con , se descargará esta estructura. Si se opta por otra forma de organizar los datos, los notebooks tendrán que ser modificados en la casilla de "Entorno de Trabajo"
Twitter ofrece desde el inicio de su creación un conjunto de APIs (Aplication Programming Interface) que permiten acceder mediante programas a sus datos. Con el tiempo han ido apareciendo nuevas APIs según las necesidades de acceso a la información, algunas gratis y otras de pago. También han ido evolucionando las versiones. Actualmente conviven la V1.1 y la V2.
Las APIs gratuitas que se usan para descargar datos son la API Standard (V1.1) y la API Académica (V2). Para la primera no se requiere ningún permiso, pero para la segunda hay que solicitar el acceso y está reservada a investigadores académicos.
Para poder utilizar estos notebooks es preciso disponer de un perfil en Twitter y, una app, con las que se generarán la credenciales de acceso a las APIs de Twitter.
Para evitar tener que especificar en cada notebook cuales son las claves de acceso, se configuran una vez, antes de usar los notebooks de descarga de datos de Twitter.
A las APIs se accede mediante un protocolo OAuth (Open Authorization). Se trata de un protocolo para permitir la autorización de un servicio a otro sin compartir las credenciales de usuario reales, como un nombre de usuario y contraseña.
Para acceder a las APIs es necesario crear una app de la que se obtendrán las claves consumer_key, consumer_secret y Bearer Token. Con estas claves existen dos métodos de acceso:
- Modo aplicación: Solo hay que usar la clave Bearer Token. Con esta opción solo se pueden hacer consultas para descargar tweets.
- Modo usuario: Es necesario crear un token de usuario con las claves de la app consumer_key y consumer_secret. Cuando el usuario da permiso a la aplicación, se generarán las credenciales access_token y access_secret
Desde la creación de la API V2 ya no es posible crear aplicaciones nuevas, por lo tanto hay que utilizar una app ya creada. Con este ejemplo se pone a disposición una app y un programa en python para crear un token con un usuario.
El método de acceso a las APIs en este ejemplo será Modo usuario
Para obtener las credenciales que nos permitan trabajar en Modo usuario usaremos el script python make_token_Twitter.ipynb disponible en github. Este script se puede ejecutar en el entorno colab de google.
Una vez obtenidas las claves se almacenarán en el directorio keys y se ejecutará el notebook cfg_API_standard.Rmd. Esto solo habrá que hacerlo una vez. Las credenciales por defecto se guardarán en el directorio keys y serán usadas en adelante por los notebooks de descarga de datos de Twitter.
Cuando Twitter concede el acceso a la API Académica proporciona una app. Acedemos a ella desde el Developer portal. En el caso que no la hubiera creado, la crearemos desde este portal.
Una vez creada, deberemos tener algo parecido a esto:
El acceso a las claves de la app se realiza desde el developer portal, pulsando en la llave.
La clave que vamos a usar es bearer token. La primera vez el valor es visible, lo copiaremos y lo pegaremos en un fichero de texto plano cuidando que no haya espacios ni tabulaciones. Es mejor usar la opción de copia que ofrece el portal.
- En Windows podemos usar el editor bloc de notas. ¡¡Atención!! comprobar que están visibles las extensiones de los ficheros (por defecto las esconde) como hacer visibles las extensiones de los ficheros
- En Mac TextEdit. Escribir un fichero de texto plano sin formato con la extensión .txt no es trivial. aquí una manera de hacerlo
Si por algún error no se copiara la clave, se puede regenerar y volver a repetir el proceso de copia y pega en el editor de texto plano.
Se recomienda que estos ficheros tengan el prefijo "key", el nombre de la app y la extensión "txt". Deben ser guardados en el directorio keys,
A continuación se ejecutará el notebook cfg_API_academic.Rmd. Esto solo habrá que hacerlo una vez. Las credenciales por defecto se guardarán en el directorio keys y serán usadas en adelante por los notebooks de descarga de datos de Twitter.
Estos notebook permiten la descarga de datos de Twitter y su visualización.
Se recomienda ejecutar lo cuadernos en Rstudio en modo Visual para que sean más legibles y tengamos un índice de los chunks
Una vez obtenidos los datos a con los notebooks de descarga, para llevar a cabo la visualización se propone dos ciclos:
-
Ciclo simplificado: los datos se pueden visualizar directamente. Es una forma muy rápida conocer la estructura del dataset, aunque no se podrán generar todas las gráficas por falta de datos.
-
Ciclo completo : se procederá a su análisis de red con la herramienta Gephi, que entre otras funciones permite la clasificación de usuarios según sus conexiones. Esta clasificación se puede incorporar a los tweets, permitiendo generar todas las gráficas.
Es sencillo y rápido. En solo dos pasos podemos averiguar aspectos importantes de la propagación
-
Fase 1: notebooks de descarga de tweets
- search_tweets_API_standard.Rmd para las búsquedas de tweets con la API Standard (V1.1)
- user_tweets_API_standard.Rmd para las búsquedas de tweets de un usuario en concreto con la API Standard (V1.1)
- search_tweets_API_academic.Rmd para las búsquedas de tweets con la API Académica (V2)
-
Fase 2: Notebooks de visualización
- spread_tweets.Rmd para visualizar propagación de tweets
- profiling_user.Rmd para visualizar perfiles de usuarios
Es más elaborado pero permite un análisis en profundidad de la propagación al tener en cuenta los datos del análisis de red.
-
Fase 1: notebooks de descarga de tweets
- search_tweets_API_standard.Rmd para las búsquedas de tweets con la API Standard (V1.1)
- search_tweets_API_academic.Rmd para las búsquedas de tweets con la API Académica (V2)
-
Fase 2: notebook de generación de un fichero gdf para gephi
- csv2gdf.Rmd obtiene de los datos descargados un fichero gdf que describe los nodos (perfiles de usuario) y las conexiones por RTs
-
Fase 3: Análisis de red en Gephi, con cálculo de la modularidad. Se exportarán de los datos de los nodos a un fichero csv
-
Fase 4: notebook para la incorporación de la clasificación de usuarios de gephi a los tweets
- classify_tweets.Rmd clasifica los tweets en función de la clasificación de usuarios de Gephi
-
Fase 5: Notebooks de visualización
- spread_tweets.Rmd para visualizar propagación de tweets (con el parámetro ARS = TRUE)
Se incluyen un conjunto de ficharos en R con las funciones compartidas por los notebooks. Las funciones permiten que no haya código duplicado y que los cuadernos sean más legibles. Estas son las funciones:
- share_functions.R contiene unas funciones básicas utilizadas por todos los notebooks
- share_functions_API_academic.R contiene las funciones específicas para la descarga de la API académica
- share_functions_API_standard.R contiene las funciones específicas para la descarga de la API standard
- share_functions_viz.R contiene unas funciones básicas para visualización
- share_functions_spread_tweets.R contiene las funciones específicas para la visualización de propagación
- share_functions_profiling_user.R contiene las funciones específicas para la visualización de perfiles
Existen dos conjuntos de visualizaciones:
- Visualizaciones de propagación
- Visualizaciones de perfilado de usuarios
En ambos casos se ofrece la opción de poder hacer zoom en las gráficas especificando un rango de fechas
- Summary: Diagrama de barras con los distintos tipos de tweets
- Tweets vs. reach: una gráfica de doble escala para representar la proporción entre los tweets y el alcance (reach). Adicionalmente, etiqueta a los perfiles que se definen como influencers con el parámetro min_followers_influencers
- Tweets vs. Rts: una gráfica de doble escala que representa la proporción entre tweets y retweets
- Tweets by lang: un line chart con la propagación según los idiomas utilizados
- Tweets by Hashtags: columnas apiladas con la propagación según los hashtags encontrados con más frecuencia
- cumulative site mentions: Propagación temporal de los sitios web más referenciados
- Tweets by comumunity (solo en ciclo completo): columnas apiladas con la propagación por comunidades
- Locations by group (solo en ciclo completo): nube de palabras de la localización declarada de los autores de los tweets por comunidad
- Most frequent words by group (solo en ciclo completo): nube de palabras de los textos de los tweets por comunidad
- Daily routine: un scatter plot con la publicación diaria por horas
- Daily activity: una chart line segregado por tipo de tweet (original, RT, reply o quote)
- Impact: line chart de doble escala de los tweets publicados vs
- Fav
- RTs
- Replies
- Quotes
- Impresions
- Engagement: Line chart con la evolución de las impresiones
- Word cloud
- Most frequent words
- Most frequent retweets
Las consultas no son exactamente igual en la API V1,1 que en la API V2, la primera dejó de actualizarse cuando se liberó la segunda que es donde se incluyen todas las novedades. Con todo, en la V1,1. se pueden hacer consultas avanzadas.
Ingredientes:
- Probar en la web de Twitter la mejor query para consultar los datos.
- Recordar: el que mucho abarca poco aprieta. No más de cuatro OR
- Ver cuántos datos se va a descargar con la query (solo API Académica)
- Descargar cuanto antes los datos.
- Tengo API académica: search_tweets_API_academic.Rmd
- No tengo API académica: search_tweets_API_standard.Rmd
Elaboración:
-
Tengo mucha prisa: Visualizar los datos de forma global:
- Para ver la propagación spread_tweets.Rmd
- Para ver el ruido: suspicious_users.Rmd (por hacer)
- Para inspeccionar un usuario: profiling_users.Rmd (por adaptar)
-
Tengo tiempo para analizarlo:
- Generar un gdf para analizarlo con Gephi: csv2gdf.Rmd
- Renderizar el grafo en gephi y exportar la tabla de datos en el directorio del dataset. ¡OJO!, comprobar que se salvan los nodos pulsando en opciones del formulario de exportación
- Clasificar los tweets con classify_tweets.Rmd
- Visualizar los datos de forma global y por comunidades:
- Para ver la propagación spread_tweets.Rmd
- Para ver el ruido: suspicious_users.Rmd (por hacer)
- Para inspeccionar un usuario: profiling_users.Rmd (por adaptar)
Ingredientes:
- Descargar los datos
- Tengo API académica: search_tweets_API_academic.Rmd (query from:user_name OR to:user_name)
- No tengo API académica: users_tweets_API_standard.Rmd ( Solo hay que dar el user_name).(por hacer)
Elaboración:
- Inspeccionar el usuario: profiling_users.Rmd (si se bajaron los datos con la API estándar, no se podrá generar la gráfica de cambio de nombre)
(más antiguo de 10 días)
Ingredientes:
- Probar en la web de Twitter la mejor query para consultar los datos.
- Recordar: el que mucho abarca poco aprieta. No más de cuatro OR
- Ver cuántos datos se va a descargar con la query
- Descargar los datos.
- Tengo API académica: search_tweets_API_academic.Rmd
- No tengo API académica: No es posible hacerlo
Elaboración:
- Generar un gdf para analizarlo con Gephi: csv2gdf.Rmd
- Renderizar el grafo en gephi y exportar la tabla de datos en el directorio del dataset. ¡OJO!, comprobar que se salvan los nodos pulsando en opciones del formulario de exportación
- Clasificar los tweets con classify_tweets.Rmd
- Visualizar los datos de forma global y por comunidades:
- Para ver la propagación spread_tweets.Rmd
- Para ver el ruido: suspicious_users.Rmd (por hacer)
- Para inspeccionar un usuario: profiling_users.Rmd (por adaptar)
Ejemplo de los tweets y el impacto de la Embajada rusa
query -> from:EmbajadaRusaES OR to:EmbajadaRusaES OR retweets_of:EmbajadaRusaES OR url:twitter.com/EmbajadaRusaES
Ejemplo con el perfil de Elon Musk
query -> from:elommusk