¿Convertir tweets de Twitter en puntos?

14

He estado investigando sobre el uso de R para datamine twitter, pero realmente no he encontrado una respuesta o un tutorial decente para mi pregunta.

Estoy interesado en extraer tweets de Twitter con un cierto hashtag, dentro de un cierto período de tiempo, y trazar la ubicación de esos tweets en un mapa en QGIS o ArcMap.

Sé que los tweets pueden tener una geolocalización vinculada a ellos, pero ¿cómo puedo extraer esta información en primer lugar?

Bradley_Jay
fuente
Esto podría ayudar: mike.teczno.com/notes/streaming-data-from-twitter.html Admito que no lo leí todo, pero parece que muestran cómo obtener la ubicación de cada tweet.
ianbroad
1
parece que podría perder las etiquetas de producto "r", "qgis" y "arcgis", ya que solo necesita extraer las coordenadas de la API de Twitter. Una vez que tenga esa información, agregaría los puntos a cualquier producto utilizando su funcionalidad estándar
Stephen Lead
Se está produciendo un error 401 al ejecutar el código.
shikhar

Respuestas:

22

Encontré una manera de usar Python para obtener las coordenadas de los tweets usando un filtro de palabras. No parece que muchas personas incluyan la ubicación con sus tweets.

Es posible que esto no sea lo que buscas porque se trata de datos de transmisión en vivo. Puede probarlo poniendo una palabra de filtro única y luego tuiteando esa palabra desde su cuenta de Twitter. Verá que su tweet aparece en Python casi al instante. Sería genial usarlo para algún gran evento.

Tendrás que instalar Tweepy .

pip install tweepy

Y obtenga una clave API de Twitter .

Entonces puede usar este script como plantilla:

import json
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener

#Enter Twitter API Key information
consumer_key = ''
consumer_secret = ''
access_token = ''
access_secret = ''

file = open("C:\\Output.csv", "w")
file.write("X,Y\n")

data_list = []
count = 0

class listener(StreamListener):

    def on_data(self, data):
        global count

        #How many tweets you want to find, could change to time based
        if count <= 2000:
            json_data = json.loads(data)

            coords = json_data["coordinates"]
            if coords is not None:
               print coords["coordinates"]
               lon = coords["coordinates"][0]
               lat = coords["coordinates"][1]

               data_list.append(json_data)

               file.write(str(lon) + ",")
               file.write(str(lat) + "\n")

               count += 1
            return True
        else:
            file.close()
            return False

    def on_error(self, status):
        print status

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
twitterStream = Stream(auth, listener())
#What you want to search for here
twitterStream.filter(track=["Halloween"])

Consulte esta documentación de Twitter también, muestra lo que puede poner en el filtro.

Aquí está el resultado de poner el filtro como "Halloween" durante unos minutos:

ingrese la descripción de la imagen aquí

Y para el placer de hacerlo, ¡aquí están los primeros 2000 tweets que mencionaron Halloween!

http://i.stack.imgur.com/bwdoP.png ingrese la descripción de la imagen aquí

¡Feliz Halloween!

ianbroad
fuente
Esto sería el 100% de lo que estaba buscando si de alguna manera me permitiera revisar tweets más antiguos también. Voy a jugar con esto y ver qué se me ocurre. ¡Muchas gracias!
Bradley_Jay
@Bradley_Jay No hay problema. Según lo siguiente, Twitter realmente no hace que los tweets más antiguos estén disponibles. stackoverflow.com/questions/1662151/…
ianbroad
También puede filtrar con un cuadro delimitador en lugar de 'seguimiento', por ejemplo, ubicaciones = [- 180, -90,180,90]
Matt