• Keine Ergebnisse gefunden

Aggregation Framework

4   Methoden zur Erfassung, Verwaltung und Auswertung von Tweets

4.3   Methoden der Datenanalyse

4.3.2   Verarbeitung und Analyse mit MongoDB

4.3.2.2   Aggregation Framework

{

"metadata.iso_language_code" : "de", "count" : 18517

}, {

"metadata.iso_language_code" : "en", "count" : 739

}, [...]

Listing 15 beginnt mit einer einfachen Auszählung aller Dokumente in einer Col-lection. Diese allgemeine Abfrage liefert einen erstmaligen Überblick der Tweet-Anzahl. Hierfür wurde der Count-Befehl verwendet und schließlich um einen Datumsfilter erweitert. Um Tweets des relevanten Zeitraums in deutscher Sprache zu erhalten, wird Count mit dem Filter Find ergänzt, der die Abfrage des ur-sprünglichen Befehls ersetzt. Der Datensatz beinhaltet demnach 18.517 Tweets in deutscher Sprache. Zudem besteht die Möglichkeit, Daten anhand eines Schlüssels zu gruppieren und zu zählen (hier die Textsprache). Der Group-Befehl kombi-niert dabei Count mit einem Zähler und Datumsgrenzen als Bedingung.

Die Abfragen mittels Count und Group stellen zwei sehr einfache und schnelle Möglichkeiten zur Häufigkeitsanalyse. Diese Methoden geben jedoch nur (gezählte) Werte in der Kommandozeile aus und erlauben weder ein direktes Spei-chern der Ergebnisse in Collections, noch eine Restrukturierung der Daten. Zudem sind diese Methoden nur auf 20.000 Datensätze beschränkt und bei Datensets, die mittels Sharding auf mehrere Server verteilt sind, nicht anwendbar (Trelle, 2014, S. 200). Für diese Zwecke und für komplexere Abfragen eignet sich das Aggrega-tion Framework.

4.3.2.2 Aggregation Framework

Das Aggregation Framework wurde eingeführt, um die technische Lücke zwi-schen den schnellen aber einfach konzipierten Abfrage-Methoden und dem kom-plexen aber mächtigen MapReduce zu schließen. Das Framework ist in zwei Kom-plexe gegliedert: einer stufenweisen Pipeline, die Dokumente sequentiell verar-beitet, und Expressions, die die Dokumente innerhalb der Pipeline manipulieren (Chodorow, 2013, S. 127-130). Eine Aggregationspipeline besteht aus einer Kette mehrerer vordefinierter Prozeduren, die sequentiell auf die Dokumente angewen-det werden. So kann eine Vielzahl an Operationen mithilfe einer mehrstufigen

94 4 Methoden zur Erfassung, Verwaltung und Auswertung von Tweets Pipeline verbunden werden. Die Pipeline leitet dabei die Daten von einer Prozess-stufe mit jeweils spezifischen Operationen zur nächsten weiter. Abbildung 13 stellt den Ablauf der Aggregation schematisch dar.

Abbildung 13: Schematische Darstellung einer Aggregation Pipeline. Eigene Darstellung.

Die Manipulation an Dokumenten erfolgt innerhalb einer Stufe der Pipeline über Expressions. Diese Expressions reagieren dabei immer nur auf den momentanen Zustand der aktuell verarbeiteten Dokumente. Es können folglich keine zusätzli-chen Daten anderer Dokumente außerhalb der Pipeline hinzugefügt werden. Die möglichen Funktionen von Expressions gehen von einfachen Bedingungs-Ver-knüpfungen ($and, $or, …) und Vergleichen ($eq, $gt, …) über einfache ma-thematische Funktionen ($multiply, $add, …) bis hin zur Manipulation von Strings ($toLower, $toUpper, …).

In Listing 16 wird zunächst ein einfacher aggregate-Befehl ausgeführt: Alle Tweets der Collection tatort_tweets sollen anhand der durch Twitter erkannten Textsprache iso_language_code gruppiert werden. Schließlich wird die An-zahl der Tweets je Sprache gezählt und in einer absteigend sortierten Liste ausge-geben. Bereits hier zeigen sich die Vorteile gegenüber den einfachen Abfrage-Me-thoden: Es ist gibt keine Limitierung der Datenmenge27 und es besteht die Mög-lichkeit, Ergebnisse anhand von Werten zu sortieren.

Der zweite aggregate-Befehl verdeutlicht das Konzept von Pipeline und Ex-pressions. Zuerst werden Tweets ausgewählt, die im gewünschten Zeitraum ver-öffentlicht wurden, und anhand der Sprache gruppiert. Daneben erfasst ein Zähler die Anzahl der Tweets je Sprache und errechnet die durchschnittliche Retweet-Zahl je Sprache. Die nächste Stufe sortiert die ermittelte Liste mit den Ergebnissen absteigend anhand der Gruppengröße (nach Sprache) und begrenzt das Ergebnis

27 Anmerkung: Mit zunehmender Größe der Collection steigt folglich auch die Dauer der Ausführung der Datenbank-Befehle.

4.3 Methoden der Datenanalyse 95 auf 10 Einträge. Diese Top 10-Liste von Tweets und durchschnittlichen Retweets nach Sprache schreibt die letzte Stufe in die neue Collection top. Die nun dauer-haft gespeicherten Datensätze stehen so als Ausgangsmaterial für weitere Analy-sen zur Verfügung. Der find-Befehl gibt die Liste schließlich aus.

Listing 16: Aggregation-Framework in MongoDB

> db.tatort_tweets.aggregate(

... {$group: {_id: "$metadata.iso_language_code", ... ... count: {$sum:1}}},

... {$sort: {count: -1}});

{ "_id" : "de", "count" : 18517 } { "_id" : "en", "count" : 739 } [...]

> db.tatort_tweets.aggregate(

... { $match : {"created_at":

... ... {$gte: ISODate("2015-04-11T12:00:00.000Z"), ... ... $lt: ISODate("2015-04-13T12:00:00.000Z")}}}, ... { $group : {

... ... _id: "$metadata.iso_language_code", ... ... count: {$sum:1},

... ... avgRetweets: {$avg: "$retweet_count"}}}, ... {$sort: {count:-1}},

... {$limit: 10}, ... {$out: "top"});

> db.top.find()

{ "_id" : "de", "count" : 18517, "avgRetweets" : 6.2377814980828425 }

{ "_id" : "en", "count" : 739, "avgRetweets" : 0.5940460081190798 }

{ "_id" : "und", "count" : 476, "avgRetweets" : 2.926470588235294 }

{ "_id" : "fr", "count" : 134, "avgRetweets" : 0.1417910447761194 }

[...]

Dieses Beispiel zeigt, dass bereits in der Datenbank eine sinnvolle Selektion und Umstrukturierung von Twitter-Daten erfolgen kann. So besteht die Möglichkeit, Daten anhand von (errechneten) Werten zu vergleichen, zu gruppieren und sortie-ren sowie die Ergebnisse in eine separate Collection zu schreiben. Jedoch gibt es

96 4 Methoden zur Erfassung, Verwaltung und Auswertung von Tweets auch hier, wie bei den Abfragemethoden technische Einschränkungen: Wenn group und sort-Befehle bereits zu Beginn der Pipeline eingesetzt werden, hängt die Zahl der maximal analysierbaren Tweets von der Verfügbarkeit des Arbeits-speichers ab. Für kumulative Operationen wie die Gruppierung oder Sortierung von Daten muss zuerst das komplette Datenset eingelesen werden. Werden dabei mehr als 10% des verfügbaren Arbeitsspeichers belegt, bricht der aggregate-Prozess ab.

Neben einer guten Rechnerausstattung ist es daher sinnvoll, Daten in frühen Stufen der Pipeline zu filtern. Beispielsweise können einzelne Werte extrahiert und in eine neue Collection geschrieben werden. Diese Collection kann dann wie-derum als Ausgangspunkt für weitere Analysen im Aggregation Framework die-nen, oder – bei Export der Daten – für andere Analyse-Programme. Zudem muss beachtet werden, dass der Algorithmus zur Spracherkennung von Twitter nicht immer zuverlässig arbeitet und auch nicht alle Tweets anhand ihrer Sprache klas-sifizieren kann. In Listing 16 befanden sich beispielsweise 467 undefinierbare Tweets („_id“: „und“).

Neben dem Aggregation-Framework, das wohl für die meisten Anwendungs-fälle genügt, unterstützt MongoDB noch eine weitere Technik zur Datenaggrega-tion, die plattformübergreifend bei sehr großen und stetig wachsenden Datensets angewendet wird: MapReduce.