Von einem Studenten habe ich eine Anfrage zu meinem Artikel zur Berichterstattung zur Bundestagswahl 2017 erhalten. Deshalb möchte ich an dieser Stelle ein wenig die Methodik hinter der Auswertung erklären.

Daten-Sammlung

Die Daten wurden von Spidern mit dem Scraping-Framework scrapy gesammelt. Hierzu habe ich für jede untersuchte Nachrichtenseite einen dedizierten Spider programmiert. Die Spider liefen auf einer von mir entwickelten Plattform namens Molescrape. Die Plattform übernimmt die Ausführung der Spider in festen Intervallen (z.B. alle 15 oder alle 60 Minuten) und filtert mehrfach gecrawlte Elemente an einer eindeutigen ID. Die ID muss für jede Seite speziell festgelegt werden, da der Artikel-Titel nicht ausreicht. Dieser wird - wie von David Kriesel in seinem Vortrag SpiegelMining vorgestellt wurde - teilweise mehrfach geändert. Da der Titel in der Regel auch in die URL übernommen wird, war mir auch die URL als ID zu unsicher. Deshalb habe ich mir bei jeder Seite eine numerische ID gesucht. Bei vielen Seiten findet man diese direkt in der URL wieder, bei anderen im HTML-Code.

Im Detail habe ich diese IDs zur Deduplizierung verwendet:

  • bild.de: numerische ID aus der URL
  • faz.net: numerische ID aus der URL
  • spiegel.de: numerische ID aus der URL
  • sueddeutsche.de: numerische ID aus der URL, allerdings mit unterschiedlichen Selektoren (je nachdem, ob es ein DPA-Artikel ist oder ein eigener Artikel der Süddeutschen Zeitung)
  • zeit.de: Slug aus der URL, es war keine numerische Artikel-ID auffindbar

Die Spider werden wie bereits erwähnt in fixen Intervallen gestartet und suchen dann alle von der Startseite direkt sichtbaren verlinkten Artikel. Dabei kann man für jede Seite anhand des URL-Schemas erkennen, ob es sich bei einem Link um einen Link auf einen Artikel handelt. Es werden also nur Artikel erfasst, die auf der Startseite erscheinen und dort einen ausreichend großen Zeitraum sichtbar sind (ca. eine Stunde).

Aus den Artikeln habe ich den Titel über dem Artikel (also nicht den Titel im Browser-Fenster), das Datum, die Artikel-Kategorie, den Autor und den Artikel-Text extrahiert. Beim Artikel-Text ist bei mehrseitigen Artikeln jeweils nur die erste Seite enthalten.

Daten-Auswertung

Die so gesammelten Daten habe ich anschließend mit einem Jupyter-Notebook ausgewertet. Dabei habe ich mich auf Artikel beschränkt, die zwischen dem 18.09.2017 und dem Nachmittag des 23.09.2017 (Auswertezeitpunkt) veröffentlicht wurden. Der genaue Auswertezeitpunkt bzw der zuletzt ausgewertete Artikel ist leider nicht mehr feststellbar.

Für die erste Auswertung habe ich dann untersucht, in welcher Häufigkeit die Parteinamen in Überschriften der Zeitungen genannt werden. Für CDU, CSU, SPD, FDP und AfD ist dies aufgrund der eindeutigen Namen unproblematisch. Für die Grünen und die Linke ist dies schwieriger, da diese Begriffe auch in normalen Kontexten vorkommen können. In dieser Auswertung wurden die Titel nur nach “Grüne” und “Linke” untersucht. Es ist davon auszugehen, dass deshalb die Zahlen für diese beiden Parteien tendenziell etwas zu hoch ausfallen, da auch Artikel wie “Grüne Energie auf dem Vormarsch” oder “Briten fahren auf der linken Straßenseite” erkannt würden. Letzteres Beispiel wird deshalb erkannt, weil ich Überschriften unabhängig von Groß- und Kleinschreibung untersucht habe. Bei der Auswertung habe ich keinerlei Rücksicht auf Wortgrenzen genommen, sodass “Grünen” ebenfalls unter dem Suchbegriff “Grüne” erkannt wurde. Ignoriert man die Groß- und Kleinschreibung waren die Suchbegriffe letztlich diese:

  • cdu
  • spd
  • fdp
  • linke
  • afd
  • grüne

Die Auswertung der Kandidaten-Nennungen in Überschriften erfolgte auf die gleiche Art. Auch hier wurden die Namen unabhängig von Groß- und Kleinschreibung in den Titeln gesucht und die passenden Artikel gezählt. Der Auswertezeitraum ist derselbe wie zuvor.

Die Auswertung der Parteinamen in den Texten erfolgte wieder ähnlich, allerdings habe ich für einen Treffer verlangt, dass das Wort exakt begrenzt sein muss. Das heißt, um den Parteinamen herum müssen Leerzeichen oder Sonderzeichen stehen. Ein Parteiname gefolgt von einem Punkt oder Bindestrich zählt also als Treffer. Aber beim Suchbegriff “Linke” zählt “Linken” nicht mehr als Treffer, weil das Wort ein n zu viel enthält. Auch habe ich hier nicht mehr nach Grüne gesucht, sondern nach Grünen. Mir erscheint es sehr viel wahrscheinlicher, dass in einem Volltext ein Satz wie “Die Grünen wollen” oder “Bündnis 90/Die Grünen wollen” geschrieben wird. Die Suchbegriffe waren hier folgende (Groß- und Kleinschreibung war wieder egal):

  • cdu
  • spd
  • fdp
  • linke
  • afd
  • grünen

Basis für die Auswertung der Verbindungen zwischen Parteien war die Auswertung der Parteinennungen in Artikeltexten. Hierzu habe ich zunächst einfach alle Artikel aufsummiert, in denen zwei Parteien genannt wurden. Dies habe ich für alle Kombinationen von zwei Parteinamen durchgezählt. In einer erweiterten Auswertung habe ich die kombinierten Häufigkeiten dann noch in Relation zu den Einzelhäufigkeiten mit dem Sorensen-Dice-Index normalisiert.

Fazit

Rückblickend gibt es natürlich Verbesserungspotential:

  • rückblickend ist nicht mehr klar ist, zu exakt welchem Zeitpunkt ich die Auswertung damals durchgeführt habe, also welche Artikel noch enthalten sind und welche nicht
  • das Jupyter-Notebook ist so programmiert, dass es nur ein unteres Limit für das Datum gibt. Würde ich es heute also nochmal ausführen, würden ohne Anpassungen am Notebook zu viele Artikel ausgewertet werden
  • die CSU wurde in den ersten Auswertungen vergessen
  • im Artikel habe ich bereits genannt, dass der Suchbegriff “Grüne” vermutlich auch zu vielen Falsch-Positiven geführt haben könnte; dies hätte man durch einen Blick in die Ergebnisdaten verifizieren und evtl. das Suchkriterium anpassen sollen
  • bei mehrseitigen Artikeln wurde lediglich die erste Artikelseite ausgewertet, hier hätte man die Spider so programmieren sollen, dass sie alle Seiten abrufen
I do not maintain a comments section. If you have any questions or comments regarding my posts, please do not hesitate to send me an e-mail to blog@stefan-koch.name.