Analítica web
Reflexiones desde el mercado español de Analítica Web

Cómo llevar los datos de Twitter a la nube

Se lee en 3 minutos

Trabajar desde la nube, como Steve Jobs

En este post voy a mostrar cómo trabajar en la nube con Twitter, Google Cloud Platform, Python y Jupyter, de forma muy simple y con apenas unos pocos recursos gratuitos. A pesar de la sencillez del ejemplo que voy a generar, mi objetivo es utilizar tecnologías diferentes y variadas para mostrar el potencial que tiene el trabajo en la nube.

Esquema

Sin más, mi objetivo es extraer una serie de datos de Twitter para poder jugar con ellos, almacenarlos y mostrarlos gráficamente. Todo ello, utilizando recursos sencillos en la nube. Seguiré el siguiente esquema:

Schema Twitter Analytics

APIS

Twitter

Con una cuenta de Twitter, tendremos que acceder para generar los accesos (claves, tokens) y dar acceso a nuestra aplicación desde la que extraer el dato de Twitter:

api twitter token

BigQuery

Igual que en Twitter, necesitamos obtener las claves para poder acceder a nuestro Data Warehouse (en este caso, he optado por la solución de Google, ya que es posible tener una cuenta en GCP (Google Cloud Platform) gratuita de prueba.

schema GCP BQ

De esta forma, puedo hacer uso de BigQuery, donde almacenaré mis datos creando una base de datos que usaré más tarde para representar gráficamente la información.

Lo primero que hice fue crear un proyecto y activar la API de BigQuery:

IAM GCP

Código

Para trabajar he optado por un lenguaje de programación como Python, por la comodidad y sencillez de hallar librerías en la red. Para trabajar con Python, recomiendo hacerlo desde Jupyter o desde Spyder, ambos accesibles fácilmente desde el navegador Anaconda. Personalmente, me encuentro más cómodo desde Spyder, ya que tiene un editor que te muestra las variables, arrays, dataframes, etc., además de una consola que te muestra el dato de salida de manera fácilmente interpretable.

A pesar de ello, he encontrado problemas a la hora de conectar varios métodos de las librerías, debido a las diferentes versiones de Python, por lo que, finalmente recomiendo usar Jupyter ya que no ha presentado conflicto alguno.

El código que he generado es el siguiente:

import pandas as pd
import tweepy
from tweepy import OAuthHandler, Stream, Cursor, API

# set secrets 
consumer_key = "XXX" 
consumer_secret = "XXX"
access_token = "XXX"
access_token_secret = "XXX"
project_id = 'training-bigquery'

auth = OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 
api = tweepy.API(auth)

search_text = ("divisapost")
search_result = api.search(search_text, count=200)

outtweets = [[tweet.text,
              str(tweet.created_at),
              tweet.user.screen_name, 
              tweet.favorite_count, 
              tweet.retweet_count, 
              tweet.user.followers_count/(tweet.user.friends_count+1),
              tweet.favorite_count + tweet.retweet_count] for tweet in search_result]
atts=['tweet','time_stamp','user','favorites','retweets','influence', 'scope']
divisapost=pd.DataFrame(data=outtweets, columns=atts)
divisapost
pd.io.gbq.to_gbq(divisapost, 'twitter.divisapost', project_id, if_exists='replace')

Donde utilizo las siguientes librerías:

  • tweepy: para conectar con Twitter y extraer los datos.
  • pandas: para crear dataframes y conectar con BigQuery.

En los enlaces se puede encontrar la documentación para instalarlas, así como los recursos que ofrecen y cómo emplearlos.

Con esta última, utilizo los datos extraídos de Twitter para insertarlos en un dataframe (podríamos decir que es como una matriz, pero que admite diferentes formatos además de los numéricos), creando el esquema que luego detectará BigQuery para crear la base de datos.

Haré una búsqueda del tema “divisapost” y así extraer los tweets que lo contienen, además del timeline del usuario “@divisadero”. De estos tweets, me interesa:

  • Texto del tweet
  • TimeStamp del tweet
  • Nombre de usuario del tweet
  • Número de followers del usuario
  • Número de amigos del usuario
  • Número de retweets del tweet
  • Número de favorites del tweet

Además, crearemos un par de métricas imaginarias para tener una idea del alcance de cada tweet así como de la influencia de cada usuario (me arriesgo a críticas de los más puristas en el campo “social text mining”):

  • Influencia: ratio followers/amigos
  • Alcance: retweets + favorites

BigQuery

El esquema que generamos tiene la siguiente forma:

schema BQ

BigQuery identifica el tipo de campo de forma automática, creando el esquema que le indicamos anteriormente desde el script en Python.

Un detalle importante en este punto es que el “time_stamp” es de tipo “string” (texto) en lugar de numérico o de fecha. Esto se debe a que lo he forzado desde el código de Python para que sea compatible con el resto de módulos.

DataStudio

El último paso involucra a una herramienta de visualización de datos: DataStudio, de la que ya hemos hablado anteriormente en este post o en este otro.

Conectando BigQuery como fuente, identificamos las dimensiones y las métricas:

datastudio sources BQ

Podremos hacer rankings, ver qué usuario tiene mayor influencia o qué tweet ha tenido más alcance:

twitter datastudio dashboard

El resultado del dashboard creado con Data Studio es público, por lo que puede visualizarse desde aquí.

Hay infinidad de opciones, ¿qué otras se te ocurren?

 

*Fuentes de las imágenes: Twitter, Google Cloud Platform, Python, Jupyter. 

Escribe tu comentario

1 × cuatro =

Navegar