<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Streaming von Twitter-Daten in eine JMP-Datentabelle
Scrollen Sie bis zum Ende, wenn Sie nur das Video möchten.
Ich habe einige minimale Tests dieser JSL auf Mac und Windows in JMP 11 und 12 durchgeführt.Das Video nutzt die Funktionen einer zukünftigen Version von JMP, aber lassen Sie sich davon nicht aufhalten.Fügen Sie hier einen Kommentar zu Ihrer Erfahrung hinzu.Die JSL befindet sich in der angehängten ZIP-Datei.
Dieser Beitrag berührt, zumindest leicht, eine Reihe von Themen.
- Twitter-Konto
- Streaming-Daten
- Bitmanipulation
- JSON
- OAuth-Autorisierung, Signierung
- cURL
- Kartenkoordinaten
Übersicht: Entpacken Sie die JSL in ein Verzeichnis.Erstellen Sie eine Twitter-App und kopieren Sie die Schlüssel in eine JSL-Datei.(Windows) Holen Sie sich eine Kopie von cURL und geben Sie den Pfad in MAIN.jsl ein.Führen Sie die Datei MAIN.jsl aus.
Beginnen
Sie benötigen ein Twitter-Konto und müssen die Nutzungsbedingungen von Twitter lesen und verstehen, bevor Sie beginnen.(Die Daten, die Sie in einem Stream sammeln, gehören nicht Ihnen und unterliegen Einschränkungen hinsichtlich der Art und Weise, wie Sie sie verwenden können.Ich werde Ihnen keinen Rat geben, was in Ordnung ist und was nicht.)
Verwenden Sie Ihr Twitter-Konto https://apps.twitter.com/ um eine neue Anwendung zu erstellen.Dies ist KEINE App wie ein Mobiltelefon.Dabei handelt es sich um eine Reihe von Schlüsseln, die einem Programm den Zugriff auf den Twitter-Stream ermöglichen.Bei diesem Programm kann es sich um eine App auf einem Mobiltelefon oder um JSL oder ein ähnliches Python-Programm handeln http://www.tweepy.org/ bietet.(Ich habe mit Tweepy angefangen und bin dann den JSL-Pfad eingeschlagen.Tweepy oder eine andere Python-basierte Lösung ist möglicherweise besser als diese JSL-Lösung.)
Klicken Sie auf „Neu“, um eine neue Bewerbung zu erstellen, erfinden Sie einen Namen, den noch niemand verwendet hat, fügen Sie eine Beschreibung hinzu, geben Sie den Namen Ihrer Website ein und lassen Sie die Rückruf-URL leer.Sie müssen einen Website-Namen angeben, können aber, wie bereits erwähnt, einen Platzhalter verwenden.Lesen Sie die Vereinbarung und klicken Sie dann auf „Twitter-Anwendung erstellen“.

Sie sind auf einem Bildschirm mit Registerkarten gelandet. Die dritte Registerkarte, Schlüssel und Zugriffstoken, ist die gewünschte.

Oben finden Sie einen Teil dessen, was Sie benötigen: den Consumer Key und das Consumer Secret.Sie benötigen den Verbraucherschlüssel und das Geheimnis.Machen Sie weiter und starten Sie Ihr JMP-Projekt. Es werden mehrere Dateien vorhanden sein. Erstellen Sie also ein Verzeichnis, entpacken Sie die JSL-Dateien, bearbeiten Sie EncryptedKeys.JSL und beginnen Sie mit dem Ausfüllen:
// apps.twitter.com verwenden um eine neue Anwendung zu erstellen.Kopieren Sie die Schlüssel hier.
ConsumerKey = "Pnb…LAZ";
ConsumerSecret = "AF4C…………………………qNvXp";
Klicken Sie unten auf die Schaltfläche „Meinen Zugriffstoken erstellen“, um die letzten beiden Werte abzurufen.

Kopieren Sie sie ... Der Zugriffstoken steht alle in einer Zeile mit einem Bindestrich ...
accessToken = "3…………………………-………………………………………………am";
accessTokenSecret = "rc………………………HJ";
EncryptedKeys.JSL besteht aus fünf Zeilen, einschließlich des Kommentars.Es wird in eine andere Datei eingebunden; Sie sollten die Sicherheit des Computers berücksichtigen, auf dem Sie EncryptedKeys.JSL speichern.Zwei der Schlüssel gelten als öffentlich, zwei sind jedoch Geheimnisse, die nur Sie kennen sollten.Niemand sonst benötigt die öffentlichen Schlüssel, sodass sie alle an einem Ort bleiben können.
Besuchen https://apps.twitter.com/ und stellen Sie sicher, dass die App existiert, dann können Sie sich von Twitter abmelden.
Twitter-Streaming
Twitter bietet andere Möglichkeiten zur Nutzung seines Dienstes https://dev.twitter.com/ die das Abrufen bestimmter Tweets und das Erstellen neuer Tweets ermöglichen, beim Streaming geht es jedoch darum, Tweets in Echtzeit mithilfe eines Filters zu sammeln.Der Filter, den Twitter anwenden kann, ist so konzipiert, dass er für seine Computer effizient ist und möglicherweise nicht genau das tut, was Sie wollen (denken Sie daran, wie viel Sie ihnen zahlen).Die interessantesten Suchanfragen beziehen sich auf Schlüsselwörter und geografische Gebiete. Das Ergebnis ist die Vereinigung (nicht die Schnittmenge) aller Suchbegriffe.Im Beispielvideo wurden „Frühstück“, „Mittagessen“ und „Abendessen“ ohne geografischen Begrenzungsrahmen verwendet.Weltweit wurden etwa 3 Tweets pro Sekunde abgerufen.Mit einem Begrenzungsrahmen um London ist es nicht möglich, die Suche auf London einzugrenzen; Das wird versuchen, alle Tweets aus London sowie Frühstück, Mittag- und Abendessen aus der ganzen Welt zurückzugeben.Ich bin immer noch unklar, wie viele Daten Twitter streamen wird; An einem Punkt dachte ich, Twitter würde die Geschwindigkeit drosseln, und an einem anderen Punkt dachte ich, Twitter würde den Stream stoppen, wenn ich die Daten nicht schnell genug verarbeiten könnte.Vielleicht stimmt beides.In einem früheren Experiment habe ich „Raleigh“ ausgewählt und einen Begrenzungsrahmen um Raleigh, NC, gelegt.Ich habe Tweets über gestohlene Raleigh-Fahrräder auf der ganzen Welt erhalten.
Vorsicht
Sie müssen Ihre eigene Filterung nach der Erfassung durchführen und möchten möglicherweise Ihre eigene Liste mit Wörtern erstellen, die Ihnen nicht gefallen.Wenn Sie öffentlich eine Liste unzensierter Tweets präsentieren, werden Sie sich schämen oder noch schlimmer.Denken Sie auch daran, dass Twitter Regeln für die Darstellung der Daten hat.
Geografische Auswahl
Dieser JSL-Ausschnitt wählt Suchbegriffe und geografische Standorte aus.Da der Code immer komplizierter wurde, begann ich, Namespaces zu verwenden:
include(“PICK.jsl”);
PICK:trackParm = "Mittagessen, Abendessen, Frühstück"; // Standardabfrage
PICK:pick(); // GUI zum Anpassen der Abfrage

Mit der Schaltfläche „Rechteck hinzufügen“ wurden zwei Rechtecke hinzugefügt.Die Werte im PICK-Namespace werden später zum Erstellen der Twitter-Abfrage verwendet.Es gibt nur eine geringe Menge an „und“-Fähigkeiten; Mit „Mittagessen essen, Abendessen essen, Frühstück essen“ könnten Tweets ausgewählt werden, die sowohl „essen“ als auch eine Mahlzeit enthalten.Aber meistens ist alles ODER-verknüpft (Vereinigung).
Mehr beinhaltet
include("JSON.jsl"); // Teilmenge der JSON-Bibliothek von Xan zum Parsen eines Tweets
include("BITS.jsl"); // Code für Bitmanipulation
include("AUTH.jsl"); // Code für oauth
include("SIGN.jsl"); // Code zum Signieren
include("PARM.jsl"); // Code zum Erstellen des http-Parameters für Curl
Dazu gehört das Laden einer Reihe von JSL sowie die Durchführung einiger kleiner Plausibilitätsprüfungen und Selbsttests.BITS braucht eine Minute, um einige Datenstrukturen zu initialisieren, um später schnelleren Code zu erstellen. Seien Sie geduldig, während das +++ im Protokollfenster gedruckt wird.JSON stammt aus Arbeit, die Xan früher gemacht hat ; Der Twitter-Stream wird im JSON-Format gesendet.AUTH und SIGN enthalten JSL, das die EncryptedKeys zur Authentifizierung („Anmeldung“) bei Twitter verwendet.Es ist kompliziert und verwendet ein externes Programm, das bereits auf Ihrem Computer installiert ist, um den SHA1-Hash zu erstellen.Als ich die Bitfunktionen geschrieben habe, dachte ich, ich müsste den SHA1-Hash implementieren, aber er ist auch kompliziert und ich bin froh, einen zu verwenden, der nicht debuggt werden muss.Das letzte Include, PARM, erstellt einen String für cURL.
cURL
Sie benötigen eine Kopie von cURL.Es existiert bereits auf dem MAC.Windows-Leute können es von bekommen http://curl.haxx.se/ nachdem Sie sich zuerst bei Ihren Systemmitarbeitern erkundigt haben.https://en.wikipedia.org/wiki/CURL ist ein Ausgangspunkt für Ihre cURL-Fragen.Ich habe heruntergeladen Win64 x86_64 CAB .(Ihr Computer ist I386, nicht IA64). Ziehen Sie „curl.exe“ per Drag-and-Drop auf den Desktop und stellen Sie sicher, dass JMP weiß, wo es zu finden ist (RunProgram erweitert $DESKTOP nicht, geben Sie die vollständige Antwort ein!):
cURLlocation="C:\Benutzer\Benutzer\Desktop\curl.exe";
cURL ist ein Befehlszeilendienstprogramm, auf das JMP über die RunProgram-Funktion zugreifen kann.Das cURL-Programm stellt die Verbindung zu Twitter her und leitet den Tweet-Stream zurück an JMP.
RunProgram(executable( cURLlocation ),options( cURLparms ),
readFunction(Function( {this},
buftxt ||= this << read( blob );
Verfahren();
If( this << isReadEOF,
Write( Right( Char( buftxt ), 100 ) ) );))
Es müssen nur noch die Funktion cURLparms und die Funktion „process()“ (oben verwendet) erklärt werden.
cURLparms kommt von PARM:curlParm( PICK:trackParm, PICK:locationParm ); Dabei wird PICK (ganz oben) verwendet, um herauszufinden, welche Begriffe und welche Standorte verfolgt werden sollen.Die Funktion „curlParm“ im PARM-Namespace verwendet die Variablen „consumerKey...applicationTokenSecret“ (weiter oben), um die Signatur/Autorisierung für die spezifischen Begriffe und Speicherorte durchzuführen.
Die Prozessfunktion übernimmt Daten von buftxt und fügt sie in eine Datentabelle ein.
Laufen
Erledigt!Legen Sie die angehängten Dateien im selben Verzeichnis wie EncryptedKeys.JSL ab, öffnen Sie main.jsl und führen Sie es aus.Der Dialog wird geöffnet; (Drücken Sie beim ersten Mal einfach OK, um die Suche zu verwenden, die die Kartenpunkte anzeigt.) Geben Sie ein paar Suchbegriffe oder einen kleinen Ort oder vielleicht beides ein.
Am Ende der JSL sehen Sie eine Schleife, die das RunProgram neu startet, wenn es unerwartet stoppt.Es verzögert sich um 60 Sekunden, um zu verhindern, dass die Twitter-Site missbraucht wird, wenn im Skript etwas schief geht.Internetverbindungen können tagelang bestehen bleiben oder mehrmals pro Stunde ausfallen.Es ist auch möglich, dass Twitter die Verbindung aus verschiedenen Gründen unterbricht.Die for-Schleife ist außerdem darauf beschränkt, nur wenige Male neu zu starten.
Die Skripte werden kaum getestet; Fragen Sie, ob es nicht funktioniert, danke!
Die zweite Datentabelle und die Karte hängen von den Standardwerten für Frühstück/Mittagessen/Abendessen im Eröffnungsdialog ab.Es gibt eine hartcodierte JSL, die nach Frühstücks-/Mittagessen-/Abendessen-Tweets sucht.Sie können es überarbeiten oder ganz herausschneiden.
Mit der STOP-Schaltfläche am unteren Rand der Karte wird das Skript (wahrscheinlich) ordnungsgemäß angehalten.Ich habe einen Fehler behoben, der möglicherweise verhindert, dass JMP auf MAC für eine zukünftige Version ordnungsgemäß beendet wird. Möglicherweise müssen Sie das Beenden in JMP 11 oder 12 erzwingen.
Präsentation (Erstellen eines Videos aus der Datentabelle)
Nachdem wir die Frühstücks-/Mittagessen-/Abendessen-Tweets eine Weile erfasst haben, sind genügend Daten vorhanden, um ein Video zu erstellen.Ideen aus mehreren aktuellen Beiträgen nutzen…In Ermangelung eines besseren Farbcodierungsstandards verwenden Sie Grün für den Beginn des Tages, Rot für den Abschluss des Tages und Blau für die Mittagszeit.Teilen Sie die Zeilen in Teilmengen auf, um nur diejenigen mit Standortdaten beizubehalten.Ich habe eine Formel verwendet, um xLon- und yLat-Spalten entweder aus Koordinaten oder dem Mittelpunkt von placeBounding_boxCoordinates zu erstellen:

Die Formel setzt den Wert auf „fehlend“, wenn die Koordinaten nicht verfügbar sind; nur etwa 5 % der Tweets haben Koordinaten.
Mit dieser Spaltenformel wurde eine Spalte zur Kategorisierung der Tweets erstellt, die jedoch für jede Sprache unterschiedlich ist:

Gefolgt von dieser Spaltenformel zum Kombinieren von Kategorien:

Um die Generierung der Videobilder zu beschleunigen, laden Sie die Teildaten in Matrizen:
dt = open("$desktop/sha1/TwitterFeed3.jmp");
xLonVec=dt:xLon<
yLatVec=dt:yLat<
kindVec = dt:kindCode<
timeVec = dt:dateUTC<
close(dt,nosave);
Erstellen Sie eine GraphBox, um die Frames zu erstellen:
Neues Fenster( „Mahlzeiten-Tweets“, // Die Markierungsgröße des Diagramms wird für die roten/grünen/blauen Tweet-Positionen verwendet
g = Graph Box( Frame Size( 1920, 900 ), <
);
Es gibt mehr JSL zum Festlegen der Achsen und zum Hinzufügen der Karte.Die meiste Arbeit wird in diesem Grafikskript erledigt, das die aus der Datentabelle geladenen Matrizen verarbeitet:
g[framebox( 1 )] << addGraphicsScript(
Transparenz(.8);
for(idx=lowIndex,idx<=highIndex,idx++,
Marker( Color State( match(kindVec[idx],1,"green",2,"blue",3,"red") ),{xLonVec[idx], yLatVec[idx]} );
)
);
Und der Treibercode, der bewirkt, dass die Karte mit unterschiedlichen Start- und Endzeiten neu gezeichnet wird und ein Bild aufnimmt:
nframes = seconds*30;// Sekunden bei 30fps
start = min(timeVec);
end = max(timeVec);
Dauer = Ende – Anfang;
Delta = Dauer / nFrames;
For( iframe = 0, iframe < nframes, iframe++,
mindate = start + (iframe - 0) * delta - 2*3600; // 2 Stunden zurück.
maxdate = start + (iframe + 1) * delta + 3600; // 1 Stunde vorwärts
lowIndex=floor(interpolate(mindate,timeVec,1::nrows(timeVec)));
highIndex=floor(interpolate(maxdate,timeVec,1::nrows(timeVec)));
g<
Warte( 1 );
g[framebox(1)]<
);
Irgendwann haben Sie die Frames für die Produktion eines Videos.Ich habe Blender (lange Lernkurve, aber leistungsstark) verwendet, um dieses fünfminütige Video zu erstellen, das 377.765 Tweets über 16 Tage enthält, einschließlich des US-amerikanischen Thanksgiving-Feiertags.Insgesamt gab es 8.187.114 Tweets, die meisten enthielten jedoch keine Daten zum Breiten- und Längengrad.Wenn ich das noch einmal mache, unterteile ich die erfassten Daten in Teilmengen. Die vollständige Tabelle mit 2,5 GB ist groß.
https://www.youtube.com/watch?v=N20KsrmdgOU Maximieren!
Keine Befestigung? klicken Sie hier um den Beitrag zu sehen.