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:

APIS
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:

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.

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:

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:

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:

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

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?