Twitter-Tweets in Punkte umwandeln?


14

Ich habe einige Nachforschungen über die Verwendung von R für Datamine Twitter angestellt, aber ich habe keine richtige Antwort oder ein anständiges Tutorial für meine Frage gefunden.

Ich bin daran interessiert, Tweets von Twitter mit einem bestimmten Hashtag innerhalb eines bestimmten Zeitraums abzurufen und die Position dieser Tweets auf einer Karte in QGIS oder ArcMap zu zeichnen.

Ich weiß, dass an Tweets eine Geolokalisierung gebunden sein kann, aber wie kann ich diese Informationen zuerst extrahieren?


Dies könnte helfen: mike.teczno.com/notes/streaming-data-from-twitter.html Ich gebe zu, ich habe nicht alles gelesen, aber es scheint, als würden sie zeigen, wie man die einzelnen Tweets findet.
ianbroad

1
Anscheinend könnten Sie die Produkt-Tags "r", "qgis" und "arcgis" verlieren, da Sie nur die Koordinaten aus der Twitter-API extrahieren müssen . Sobald Sie diese Informationen haben, fügen Sie die Punkte zu jedem Produkt hinzu, indem Sie dessen Standardfunktionalität verwenden
Stephen Lead,

Beim Ausführen des Codes tritt ein 401-Fehler auf.
Shikhar

Antworten:


22

Ich habe einen Weg gefunden, mit Python die Koordinaten für Tweets mithilfe eines Wortfilters zu ermitteln. Es sieht nicht so aus, als würden viele Leute ihren Tweets den Ort hinzufügen.

Dies ist möglicherweise auch nicht das, wonach Sie suchen, da es sich um Live-Streaming-Daten handelt. Sie können es testen, indem Sie ein eindeutiges Filterwort eingeben und dieses Wort dann über Ihr Twitter-Konto twittern. Ihr Tweet wird fast sofort in Python angezeigt. Dies wäre ziemlich cool, um es für ein großes Ereignis zu nutzen.

Sie müssen Tweepy installieren .

pip install tweepy

Und hol dir einen Twitter API Key .

Dann können Sie dieses Skript als Vorlage verwenden:

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

Schauen Sie sich auch diese Dokumentation von Twitter an. Sie zeigt, was Sie in den Filter einfügen können.

Hier ist das Ergebnis, wenn Sie den Filter für ein paar Minuten auf "Halloween" stellen:

Bildbeschreibung hier eingeben

Und zum Teufel, hier sind die ersten 2000 Tweets, in denen Halloween erwähnt wird!

http://i.stack.imgur.com/bwdoP.png Bildbeschreibung hier eingeben

Fröhliches Halloween!


Dies wäre zu 100% das, wonach ich gesucht habe, wenn ich damit auch ältere Tweets durchkämmen könnte. Ich werde damit herumspielen und sehen, was ich mir einfallen lassen kann. Vielen Dank!
Bradley_Jay

@ Bradley_Jay Kein Problem. Laut dem Folgenden stellt Twitter ältere Tweets nicht wirklich zur Verfügung. stackoverflow.com/questions/1662151/…
ianbroad

Sie können auch mit einem Begrenzungsrahmen anstelle von 'track' filtern, z. B. locations = [- 180, -90,180,90]
Matt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.