Wikileaks hat vor einigen Jahren die SMS veröffentlicht, die während des Anschlages auf das World Trace Center am 11. September 2001 verschickt wurden. Ich habe mir die Daten etwas genauer angeschaut.

Zunächst habe ich mir die Rohdaten heruntergeladen. Es gibt eine Datei, die alle Nachrichten in einer überschaubar großen Textdatei enthält. Nach dem Auspacken landet eine Datei mit dem nüchternen Namen "messages_all.txt" auf meinem Rechner. Ein Blick in die Datei verrät schnell ihren Aufbau. Die einzelnen Felder wie Datum und Uhrzeit sind durch Leerzeichen voneinander getrennt. Es gibt seltsame Codes und den eigentlichen Text der Nachricht.

Zunächst müssen die Daten etwas aufbereitet werden, um eine saubere CSV-Datei zu erhalten, die ich in eine Datenbank importieren kann. Zuerst habe ich die Datei nach einem Zeichen durchsucht,  das überhaupt nicht in der Datei enthalten ist. Dieses Zeichen kann ich dann als Feldtrenner verwenden. Bei '§' wurde ich fündig. Dies soll mein Feldtrenner werden. Mit einem kleinen Script, das ich an sed verfüttere, sollte eine CSV-Datei entstehen, die ich in sqlite einlesen kann.

s/  */§/ # Leerzeichen im vorderen Bereich entfernen
s/  */§/
s/  */§/
s/  */§/
s/  */§/
s/  */§/
s/\[// # Eckige Klammern entfernen
s/\]// #
s/"//g # " wird beim Import in sqlite falsch interpretiert

Anschließend kann ich sqlite öffnen. Ich erstelle zuerst eine Tabelle für meine Daten.

CREATE TABLE msgs (
  datum date,
  zeit time,
  anbieter varchar,
  id varchar,
  kennung varchar,
  kennung2 varchar,
  text varchar);

Die Daten können nun in diese neue Tabelle importiert werden. Dazu öffne ich sqlite und führe die beiden folgenden Befehle aus.

.separator "§"
.import messages.csv msgs

Eine erste Anfrage zeigt mir, wie viele Nachrichten verschickt wurden. Diese Zahl stimmt mit der Anzahl der Zeilen aus der Textdatei überein, die ich mit "wc -l messages_all.txt" erhalte - es scheint also geklappt zu haben.

SELECT COUNT(*) FROM msgs;
count(*)
----------
448358

448358 Nachrichten. 448358 Geschichten. 448358 Schicksale. Ein Blick durch die Textdatei verrät, dass sich dort sowohl ganz persönliche Schicksale wiederfinden als auch Computer, die in regelmäßigen Abständen Fehlerberichte an ihre Administratoren verschicken. Auch die Einsatzkräfte vor Ort kommunizieren auf diesem Wege.

Ich erstelle mir ein kleines Bash-Skript, mit dessen Hilfe ich meine Anfragen schnell mittels gnuplot visualisieren kann.

#!/bin/bash

SQL=$1
CSVFILE=/tmp/gnuplot.csv

# Mit tail -n +3 wird die Ausgabe erst ab der dritten Zeile in die Datei umgeleitet
# sqlite beginnt mit einer leeren Zeile und gibt dann die header aus
sqlite3 -csv messages_all.sqlite "${SQL}" |tail -n +3 > $CSVFILE

gnuplot -p -e "set datafile separator \",\";plot [] [0:] \"$CSVFILE\""

Ich kann dem Skript einen SQL-Befehl übergeben. Die Ausgabe wird als CSV-Datei abgespeichert und von gnuplot anschließend visualisiert.

Ich möchte mir zunächst einen Überblick über die Verteilung der Anzahl der SMS über den Tag verschaffen, setze den folgenden SQL-Befehl ab und erhalte das folgende Bild.

-- Abfragen über den zeitlichen Verlauf mit Dezimalzeiten
select strftime('%H',zeit)+strftime('%M',zeit)/60.0 zeit2, count(*) anzahl
from msgs
group by datum, zeit2

Anzahl SMS nach Uhrzeit

Ab kurz vor 9 gibt es einen starken Anstieg als das erste Flugzeug in den ersten Turm fliegt. Die Anzahl der verschickten SMS vervierfacht sich plötzlich. Ich versuche, die Anfrage abzuwandeln und bin nun nur noch an Nachrichten interessiert, deren Text das Wort "plane" enthält. Ich erhalte das folgende Ergebnis.

select
  strftime('%H',zeit)+strftime('%M',zeit)/60.0 zeit2,
  count(*) anzahl
from msgs
where text like '%plane%'
group by datum, zeit2

SMS mit Text plane

Das Bild zeigt auch hier einen erkennbaren Anstieg der Anzahl der SMS. Ich probiere weitere Einschränkungen aus - emotionale Schlüsselwörter wie 'love', 'war' und 'terror' - und werde den Eindruck nicht los, hier doch ganz private Schicksale zu durchleuchten.

Ich bekomme ein mulmiges Gefühl und beende meine Recherche vorerst. Ich schließe alle Fenster und lasse die SMS zunächst ruhen. Man könnte noch tiefer recherchieren, eine Begriffswolke auf den SMS erzeugen und auf einem Zeitstrahl abbilden. Auch andere Analysen sind denkbar: Wie lässt sich der Absturz der Computerrechner darstellen? Wie kann die Kommunikation der Rettungskräfte visualisiert werden?

Eines habe ich bei meinem Projekt gelernt: Die Daten erzählen ihre ganz eigene Geschichte - vielleicht hat sie sogar etwas mit der Realität zu tun. Vielleicht aber auch nicht. Und: Daten haben etwas mit Menschen zu tun. Daher müssen wir sie schützen, auf sie aufpassen und sorgsam mit ihnen umgehen.


kunst screencast bildung ZDF cloud Smarthome workshop Termin rs232 JavaScript Funktionen INN server raspberrypi xmpp Mathe ubuntu Linux Newsgroup ccc sdr wiki NNTP Testverfahren Informatik Second Life Clonezilla Tools Psychologie Arduino Spaß das-labor Linkliste bloggen gamejam ITA podcast esp8266 debian 35c3 Text game-engine Comic IoT admin dtp Twitter fun bio lernen mooc SciFi Spiele Sketchnotes pdf ctf programmierung Studium Geschichten hardware Tafelbild c't Tipp Kino Commandline ldlmooc Film python e-mail git Dortmund Latex Sport TV hacking Windows software buch heise Wissenschaft serielle Schnittstelle importiert ldl badge Archiv Datenbank audio Taschenrechner 3dDruck Usenet HP35s video Gesellschaft Bilder Chat Konferenz GPIO 34c3 RSS docker