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.


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