Convertir les tweets Twitter en points?

14

J'ai fait des recherches sur l'utilisation de R pour dater Twitter, mais je n'ai pas vraiment trouvé de réponse ou de tutoriel décent pour ma question.

Je souhaite extraire des tweets de Twitter avec un certain hashtag, dans un certain délai, et tracer l'emplacement de ces tweets sur une carte dans QGIS ou ArcMap.

Je sais que les tweets peuvent être liés à la géolocalisation, mais comment puis-je extraire ces informations en premier lieu?

Bradley_Jay
la source
Cela pourrait aider: mike.teczno.com/notes/streaming-data-from-twitter.html J'avoue que je n'ai pas tout lu, mais il semble qu'ils montrent comment obtenir chaque emplacement de tweets.
ianbroad
1
il semble que vous pourriez perdre les balises de produit "r", "qgis" et "arcgis" car il vous suffit d'extraire les coordonnées de l'API de Twitter. Une fois que vous avez ces informations, vous ajoutez les points à n'importe quel produit en utilisant ses fonctionnalités standard
Stephen Lead
Une erreur 401 se produit lors de l'exécution du code.
shikhar

Réponses:

22

J'ai trouvé un moyen d'utiliser purement Python pour obtenir les coordonnées des tweets en utilisant un filtre de mots. Il ne semble pas que beaucoup de gens incluent l'emplacement avec leurs tweets.

Ce n'est peut-être pas ce que vous recherchez non plus, car il s'agit de données de diffusion en direct. Vous pouvez le tester en mettant un mot de filtre unique, puis en tweetant ce mot depuis votre compte Twitter. Vous verrez votre tweet apparaître en Python presque instantanément. Ce serait assez cool à utiliser pour un événement énorme.

Vous devrez installer Tweepy .

pip install tweepy

Et obtenir une API Twitter Key .

Ensuite, vous pouvez utiliser ce script comme modèle:

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

Consultez également cette documentation sur Twitter, elle montre ce que vous pouvez mettre dans le filtre.

Voici le résultat de mettre le filtre en "Halloween" pendant quelques minutes:

entrez la description de l'image ici

Et pour l'enfer, voici les 2000 premiers tweets qui ont mentionné Halloween!

http://i.stack.imgur.com/bwdoP.png entrez la description de l'image ici

Joyeux Halloween!

ianbroad
la source
Ce serait 100% ce que je cherchais si cela me permettait de peigner également les anciens tweets. Je vais jouer avec ça et voir ce que je peux trouver. Merci beaucoup!
Bradley_Jay
@Bradley_Jay Aucun problème. Selon ce qui suit, Twitter ne met pas vraiment à disposition des tweets plus anciens. stackoverflow.com/questions/1662151/…
ianbroad
Vous pouvez également filtrer avec un cadre de délimitation au lieu de «suivre», par exemple locations = [- 180, -90,180,90]
Matt