Código para almacenar únicamente aquellos tweets que tengan geolocalización utilizando Tweepy y Python.

En este proyecto vamos a generar una pequeña investigación desde el punto de vista del Big Data y de las redes sociales. Exactamente, hemos utilizado Twitter como fuente textual, una red social en la que se nos permite recolectar tweets geolocalizados por zonas.

Para quien no lo conozca, Twitter permite el envío de mensajes en texto plano de corta longitud, con un máximo de 280 caracteres. Estos mensajes, llamados tweets, se muestran en la página principal del usuario y pueden ser capturados a través de una API proporcionada por la propia red social.

Este ejemplo va a consistir en la implementación de un script en Python que almacene continuamente todos los tweets que se escriben sobre el Coronavirus, en ingles y estén geolocalizados. De esta forma, podríamos investigar en que país o ciudad se escribe más sobre una determinada temática.

Qué resuelve este ejemplo con Tweepy

El objetivo no es descargar todos los tweets de un tema, sino conservar únicamente los registros que contienen información geográfica útil. Esta diferencia importa porque la mayoría de tweets no incluye coordenadas y mezclar mensajes localizados con mensajes sin localización dificulta cualquier mapa o análisis fiable.

El flujo es sencillo: autenticarse contra la API, abrir un listener de streaming, comprobar si existen campos de coordenadas y escribir una fila normalizada en CSV. Para preparar después los datos puedes revisar también la guía de preparación de datos.

Para más información de cómo funciona Tweepy, les recomiendo que visiten la url: https://1938.com.es/app-coronavirus-twitter o si prefieres un vídeo tutorial visita la siguiente url: https://www.youtube.com/watch?v=vCFioQizM4w

El código completo lo puedes descargar en la siguiente url https://github.com/al118345/Tweepy_Example/blob/master/Tweepy_ejemplo_localizacion.py

Análisis del script.

Como podéis observar, el código no tiene ningún misterio. El objetivo de esta implementación es buscar todos los tweets en el idioma inglés (en), que contengan la palabra Coronavirus y almacenar únicamente aquellos que tengan información sobre la geolocalización en el momento que fueron escrito.

Dicho esto y antes de empezar con las partes más importantes del código, voy a mostrar en la siguientes tabla que información geolocalizada se puede obtener de un tweet.

status.created_atstatus.textstatus.geostatus.coordinatesstatus.place
2021-05-24 14:49:33Coronavirus Update: WHO head slams ‘scandalous inequity’ in COVID vaccines with 10 countries accounting for 75% of doses administered https://t.co/3myGLUUaKm #Nifty #Sipgrab #UnitingPeopleWithThePossibilities{'type': 'Point', 'coordinates': [12.8898216, 77.65212771]}{'type': 'Point', 'coordinates': [77.65212771, 12.8898216]}Place(_api=<tweepy.api.API object at 0x7f9a270791c0>, id='5f55bb82cf16ac81', url='https://api.twitter.com/1.1/geo/id/5f55bb82cf16ac81.json', place_type='city', name='Bengaluru South', full_name='Bengaluru South, India', country_code='IN', country='India', bounding_box=BoundingBox(_api=<tweepy.api.API object at 0x7f9a270791c0>, type='Polygon', coordinates=[[[77.330578, 12.731936], [77.330578, 13.114293], [77.786319, 13.114293], [77.786319, 12.731936]]]), attributes={})

Cómo se puede comprobar, en un tweet se almacena la localización en diferentes formatos y tipo de coordenadas. Por una parte, en la propiedad place podemos obtener el nombre completo de la ciudad, estado o país dónde se localiza el usuario en el momento de escribir el tweet y, por otra parte, en coordinates o geo tenemos los puntos coordinados.

Pero no todos los tweets escritos tienen activada esta funcionalidad, es decir, de cada 100 tweets escritos sobres el coronavirus únicamente 1 posee esta información sobre su localización.

Para únicamente obtener el tweet que disponga de información geografica, debemos fijarnos en la línea 15 del código mostrado en la parte superior. Exactamente la siguiente linea.

Esta linea solamente permite almacenar tweets que tengan el campo coordinate rellenado. Podéis contextualizar la funcionalidad expuesta dentro de la siguiente función, cuya única finalidad es, dado un tweet (status ) comprobar si esta geoposicionado. En caso afirmativo lo almacena en el fichero, en caso negativo, continuamos.

El encargado de proporcionar los tweets a la función analizada es el fragmento de código expuesto a continuación. Su única función es activar el listener encargado de ir obteniendo los diferentes tweets publicados por una temática/idioma determinado.

Por último, recordar que es necesario obtener y rellenar las credenciales de acceso para que funcione correctamente el script. Para ello recomiendo visitar la siguiente url https://1938.com.es/app-coronavirus-twitter dónde se expone cómo se puede obtener dicha información.

Explicación en Youtube

Limitaciones prácticas

Este tipo de dataset debe interpretarse con cuidado. Los tweets geolocalizados son una muestra pequeña y sesgada de la conversación completa: el usuario debe tener activada la localización, la API debe exponer el campo y el proceso de captura debe estar activo justo cuando se publica el mensaje.

Antes de usarlo en un análisis real conviene separar captura y limpieza. El script de streaming debería guardar datos; otro proceso posterior puede deduplicar, validar coordenadas, añadir país o ciudad y preparar el CSV para mapas, dashboards o minería de texto.