Convertendo tweets do Twitter em pontos?

14

Eu tenho feito algumas pesquisas sobre o uso de R para datamine o twitter, mas ainda não encontrei uma resposta ou um tutorial decente para a minha pergunta.

Estou interessado em extrair tweets do twitter com uma certa hashtag, dentro de um determinado período de tempo, e traçar a localização desses tweets em um mapa no QGIS ou no ArcMap.

Sei que os tweets podem ter geolocalização vinculada a eles, mas como extrao essas informações em primeiro lugar?

Bradley_Jay
fonte
Isso pode ajudar: mike.teczno.com/notes/streaming-data-from-twitter.html Admito que não li tudo, mas parece que eles mostram como obter a localização de cada tweet.
Ianbroad #
1
parece que você pode perder as tags de produto "r", "qgis" e "arcgis", pois você só precisa extrair as coordenadas da API do Twitter. Depois de obter essas informações, você adicionaria os pontos a qualquer produto usando sua funcionalidade padrão
Stephen Lead
O erro 401 está chegando ao executar o código.
Shikhar

Respostas:

22

Encontrei uma maneira de usar o Python puramente para obter as coordenadas dos tweets usando um filtro de palavras. Não parece que muitas pessoas incluam localização com seus tweets.

Pode não ser o que você procura, porque se trata de dados de transmissão ao vivo. Você pode testá-lo colocando uma palavra de filtro exclusiva e depois twittando essa palavra na sua conta do Twitter. Você verá seu tweet aparecer no Python quase que instantaneamente. Isso seria muito legal de usar em algum grande evento.

Você precisará instalar o Tweepy .

pip install tweepy

E obtenha uma chave de API do Twitter .

Então você pode usar este script como um modelo:

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"])

Confira esta documentação do Twitter também, ela mostra o que você pode colocar no filtro.

Aqui está o resultado de colocar o filtro como "Halloween" por alguns minutos:

insira a descrição da imagem aqui

E, para o inferno, aqui estão os primeiros 2000 tweets que mencionaram o Halloween!

http://i.stack.imgur.com/bwdoP.png insira a descrição da imagem aqui

Feliz Dia das Bruxas!

ianbroad
fonte
Isso seria 100% o que eu estava procurando se, de alguma forma, me permitisse vasculhar também os tweets mais antigos. Vou brincar com isso e ver o que posso fazer. Muito obrigado!
Bradley_Jay
@Bradley_Jay Sem problemas. De acordo com o seguinte, o Twitter realmente não disponibiliza tweets mais antigos. stackoverflow.com/questions/1662151/…
ianbroad
Você também pode filtrar com uma caixa delimitadora, em vez de 'faixa', por exemplo, locais = [- 180, -90,180,90]
Matt