Skip to content

Set of basic tools in R to extract data from the Twitter API and visualize graphics

License

Notifications You must be signed in to change notification settings

congosto/t-hoarder_R

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

T-hoarder_R

Un conjunto de notebooks en R para extraer datos de Twitter y visualizarlos

Motivación

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.

Entorno de trabajo

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"

Requisitos

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.

Ciclo Análisis

Configurar las credenciales de acceso a la API Standard

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

Crear credenciales

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.

guía para crear credenciales

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.

Credenciales de acceso a la API Académica

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:

Developer portal.

El acceso a las claves de la app se realiza desde el developer portal, pulsando en la llave.

baeren token

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.

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.

Descripción de los notebooks

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 modo visual

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.

Ciclo simplificado

Es sencillo y rápido. En solo dos pasos podemos averiguar aspectos importantes de la propagación

Ciclo Análisis simplificado

  • 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

Ciclo completo:

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.

Ciclo Análisis completo

  • 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)

Funciones

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

Visualizaciones disponibles

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

Visualizaciones de propagación

  • 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

Visualizaciones de perfilado de usuarios

  • 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

Recetas para usar T-hoarder_R

Tipos de consultas

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.

Hay una noticia que se está difundiendo mucho y no sé si es cierta

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)

Hay un usuario que es sospechoso

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)

Quiero analizar algo de larga duración

(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)

Ejemplos de Visualizaciones

De propagación de tweets

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

Summary

Ejemplo de Summary del dataset

Tweets vs. reach

Ejemplo de Tweets vs. reach

Tweets vs. Rts

Ejemplo de Tweets vs. Rts

Tweets by lang

Ejemplo de Tweets vs. lang

Tweets by Hashtags

Ejemplo de Tweets vs. Hashtags

cumulative site mentions

Ejemplo de Propagación de los Sitios web

Tweets by comumunity

Ejemplo de Propagación de los Sitios web

Locations by group

Ejemplo de Origen de los tweets

Most frequent words by group

Ejemplo de Origen de los tweets

De perfilado de usuarios

Ejemplo con el perfil de Elon Musk

query -> from:elommusk

Daily routine

Ejemplo de Daily routine

Daily activity

Ejemplo de Daily activity

tweets vs. Rts

Ejemplo de tweets vs. Rts

Engagement

Ejemplo de Engagement

Most frequent words

Ejemplo de Palabras más frecuentes

Most frequent retweets

Ejemplo de Perfiles más retuiteados

About

Set of basic tools in R to extract data from the Twitter API and visualize graphics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published