Willkommen beim Medien-Atlas!

Im Medien-Atlas finden Sie vielfältige statistische Analysen über die deutsche Medien-Landschaft.

Wir, Simon Leiß, Janek Blankenburg und Raphael Schönball, laden bestimmte Informationen von Artikeln, die über die RSS-Feeds von Medienhäusern veröffentlicht wurden, per Web-Scraping in eine Datenbank und analysieren diese mithilfe diverser Data-Science-Methoden.

Die entnommenen Informationen der Artikel setzen sich aus folgenden Bestandteilen zusammen:

  • die Überschrift,
  • ein kurzer Zusammenfassungstext (auch: Aufhängertext),
  • die Themenzuordnung (auch: Schlagwörter),
  • das Ressort ,
  • das Datum der Veröffentlichung, sowie
  • die Autoren.

Wir haben nachfolgende überregionale Institutionen für die Auswertungen ausgewählt:

  • Süddeutsche Zeitung (SZ)
  • Frankfurter Allgemeine Zeitung (FAZ)
  • Die Bild (Bild)
  • Presseportal
  • Spiegel (SPON)
  • Tagesspiegel
  • taz
  • Die Welt
  • Die Zeit
  • Bundestag*
  • Bundesministerium für Wirtschaft und Energie*

* Die RSS-Feeds werden erfasst, allerdings in den Analysen nicht weiter berücksichtigt.

Um Ihnen ein eigenes Gefühl für die zugrunde liegenden Daten zu geben, haben wir verschiedene sogenannte Data-Cube-Facetten integriert. Mit diesen können Sie sich interaktiv Ihre eigenen Auswertungen zusammenstellen.

Welche Einsichten in die deutsche Medien-Landschaft mit dieser Datenbasis möglich sind, erfahren Sie nun auf den nächsten Seiten.

Von wem stammen die erfassten Artikel?

Von wem stammen die erfassten Artikel?

Größe des Wortschatzes

Wer hat wie viele unterschiedliche Wörter verwendet?

Mithilfe eines Python-Scripts werden alle 12 Stunden für alle veröffentlichenden Stellen je 1000 zufällige Artikel ausgewählt. Von diesen ausgewählten Artikeln wird die Anzahl der verschiedenen Wörter ermittelt.

Über die Option Auswahl kann gewählt werden, ob nur Überschriften, nur die Artikeltexte oder beides (Summe) dargestellt werden soll.

Über die Option Darstellung kann gewählt werden, ob der Anteil verschiedener Wörter in Relation zur Gesamtzahl der Wörter oder die absolute Anzahl dargestellt werden soll.

Für die Berechnung wird zunächst für jede veröffentlichende Stelle 1000 zufällige Überschriften & Artikeltexte ausgewählt. Alle darin vorkommenden Wörter werden danach mithilfe der Python-Library spacy gestemmt, d.h. in ihre Stammform reduziert. Bei diesen überführten Wörtern werden danach Duplikate entfernt, so lassen sich die Anzahl der verschiedenen vorkommenden Wörter bestimmen. Je nach Wahl der Option Darstellung wird diese Zahl noch durch die Gesamtzahl der Wörter in den ausgewählten Texten diviert.

Ein höherer Wert in der relativen Darstellung bedeutet, dass die Anzahl an verschiedenen Wörtern an der Gesamtzahl der Wörter geringer ist, der Wortschatz ist damit also insgesamt kleiner als bei einem niedrigen Wert.

Die Berechnung erfolgt für alle veröffentlichenden Stellen unabhängig voneinander, eine Beeinflussung ist hier nicht gegeben.

Einem Artikel werden meistens mehrere Schlagwörter oder generelle Themen zugeordnet.

Mit welchen Themen beschäftigen sich die meisten Artikel?

Ein Autor eines Artikels ordnet den Artikel mehreren Schlagwörtern oder generellen Themen zu. Eine Wordcloud visualisiert, wie häufig bei allen Artikeln aus der Datenbank welche Themen/Schlagwörter vom Verfasser ausgewählt worden sind. Es werden die 70 Themen dargestellt, die am häufigsten vorkommen und durch die Größe des jeweiligen Wortes in eine Rangfolge gebracht.

Maschinelles Lernen erkennt anhand der Wortwahl, von welchem Medienhaus ein Artikel stammt.

Dabei sind nachfolgende Wörter wichtig.

Alle 12 Stunden wird im Hintergrund mithilfe der glmnet-library eine Klassifizierung der Daten vorgenommen.
Dabei wird anhand des erfassten Shorttextes auf die veröffentlichende Stelle geschlossen.
Es wird ein multi-nomialer Response-Typ verwendet, da alle Publisher gleichzeitig klassifiziert werden.
Der Alpha-Parameter wurde dabei auf 1 gesetzt, dadurch wird lediglich die Lasso-Bestrafung verwendet und die Ridge-Bestrafung wird verworfen.

Anschließend wird die predict-Funktion verwendet, um für jeden Publisher herauszufinden, welche Wörter einen hohen Koeffzienten haben (und damit einen hohen Indikator darstellen).

Die berechneten Koeffizienten werden dann mithilfe einer Wordcloud dargestellt. Dafür werden zusätzlich die Koeffizienten noch logarithmiert, da bei einigen Publishern die Koeffizienten stark verschieden sind und sonst Wörter mit geringen Koeffizienten nicht angezeigt werden würden.

Maschinelles Lernen erkennt anhand der Wortwahl, welchem Ressort ein Artikel zuzuordnen ist.

Dabei sind nachfolgende Wörter wichtig.

Die Erarbeitung ist analog zu dem Verfahren unter Formulierstil/Indikator-Wörter, jedoch wird hier als Zielvariable das Ressort, statt dem Publisher verwendet.

Ein Artikel wird meist mehreren Schlagwörtern oder generellen Themen zugeordnet.

Wenn zwei Themen häufig miteinander vorkommen, sind sie im Netzwerk verbunden.

Zur Erstellung des Netzwerks wird geprüft, welche Kategorien gemeinsam in Artikeln auftreten. Derzeit werden hierfür nur Artikel aus dem Politik-Ressort der jeweiligen Zeitung betrachtet. Über den Regler lässt sich einstellen, wie oft zwei Kategorien mindestens gemeinsam auftreten müssen, damit eine Kante zwischen den entsprechenden Knoten vorhanden ist.

Das Netzwerk lässt sich durch Zoomen genauer betrachten, ebenfalls kann ein beliebiger Knoten angeklickt werden, um alle damit verbundenen Knoten hervorheben zu lassen. Weiterhin kann das Netzwerk umgeordnet werden, indem einzelne Knoten verschoben werden.

Topbegriffe des Tages

Diese Begriffe werden an einem Tag übermäßig häufig verwendet.


Zunächst werden für jeden Tag die 1000 am häufigsten vorkommenden Wörter bestimmt, dabei wird die Überschrift und der Shorttext mit einbezogen. Diese Wörter werden über alle Tage hinweg vereinigt, sodass eine Liste mit allen Wörtern, die an min. 1 Tag in den 1000 häufigsten Wörtern vorkommen, vorhanden ist.

Danach wird für jedes ausgewählte Wort die absolute Häufigkeit über alle Tage und die durchschnittliche Häufigkeit pro Tag bestimmt.

Für jeden Tag wird geprüft, ob das gewählte Wort an diesem Tag mindestens 10mal so oft wie im Durschnitt pro Tag vorkommt. Wörter, welche dieses Kriterium erfüllen werden gespeichert, dabei wird ebenfalls gespeichert, an welchem Tag dieses Wort ‘getrended’ ist.

Dieser Vorgang wird im Hintergrund alle 12 Stunden ausgeführt. Bei Auswahl eines Datums auf der Weboberfläche werden die gespeicherten Wörter für diesen Tag ausgelesen und, falls vorhanden, ausgegeben.

Erläuterung der Topbegriffe durch andere Wörter

Für einen Topbegriff werden inhaltlich ähnliche Wörter gesucht.

Zunächst werden alle Artikel für den ausgewählten Tag aus der Datenbank geladen. Die Artikel werden in 2 Teile unterteilt: Artikel, welche den eingegeben Filter in Überschrift oder Shorttext enthalten und Artikel, welche den Filter nicht enthalten. Wörter, welche insgesamt nur sehr selten vorkommen werden entfernt, da diese das Ergebnis sonst verfälschen würden.

Im nächsten Schritt wird mithilfe der glmnet-library ein binomiales Modell erstellt, dabei wird lediglich die Lasso-Bestrafung verwendet. Das Modell findet Wörter, welche einen hohen Koeffizienten haben und daher auf den gesuchten Filter schließen.

Bevor die gefundenen Wörter mithilfe einer Wordcloud dargestellt werden können, werden die Koeffizienten zunächst mit dem Faktor 100 000 multipliziert. Dies verhindert, dass die Wordcloud-Library Wörter mit Koeffizienten zwischen 0 und 1 nicht darstellt. Schließlich werden die Koeffizienten noch mithilfe einer Logarithmus-Funktion gestaucht, ohne diese Stauchung haben einige Wörter (vorallem solche, die den Filter direkt enthalten) einen extrem hohen Koeffizienten, wohingegen inhaltlich ähnliche Wörter einen niedrigen Koeffizienten haben und dadurch nicht mehr/nur sehr klein in der Wordcloud dargestellt werden.

Über das Projekt

Der Medien-Atlas ist ein Projekt, welches im Rahmen des Seminars „(POL20400) Political Data Science“ der Hochschule für Politik München (HfP) an der Technischen Universität München (TUM) im Wintersemester 2018/2019 entstanden ist.

Motivation

Nach einer lebendigen Debatte über Journalismus und Medien in Deutschland waren wir an empirischen Untersuchungen zu gewissen Streitpunkten interessiert, um private Debatten faktenbasierter und sachlicher führen zu können.

Grundlegendes Konzept

Ein Java Programm liest die RSS-Feeds der wichtigsten deutschen Nachrichtenhäusern ein und fügt sie zu einer Datenbank hinzu. Auf dieser Ebene werden verschiedenen Analysen und Auswertungen durchgeführt.

Im Folgenden sind sowohl der Prozess der Datenerfassung, als auch die verschiedenen Auswertungen genauer dokumentiert.

Die Grundidee war möglichst viele Artikel der größten deutschen Nachrichtenhäuser in einer Datenbank zu erfassen. Auf Grund von rechtlichen Bedenken haben wir uns dazu entschieden nur die Daten zu erfassen, die in den jeweiligen RSS-Feeds der Zeitungen veröffentlicht werden. Im Allgemeinen lässt sich feststellen, dass jede Zeitung für jedes Ressort einen eigenen RSS-Feed pflegt.

Überblick

Der allgemeine Prozess zur Datenerfassung verläuft wie folgt:

Ein cronjob startet alle 5 Minuten ein Java-Programm. Dieses lädt nacheinander alle RSS-Feeds und konvertiert diese in ein einheitliches Datenformat. Im nächsten Schritt wird für jeden Artikel geprüft, ob er zwischen der letzten und der aktuellen Zugriffszeit veröffentlicht wurde. (Dies ist nötig, um auch Artikel die vorveröffentlicht wurden nur einmal zu erfassen.) Ist dies der Fall, wird der Artikel in der Datenbank hinzugefügt. Dies führt dazu, dass wenn der gleiche Artikel in mehreren Ressorts (also in mehreren RSS-Feeds) veröffentlicht wird, er auch mehrfach in die Datenbank hinzugefügt wird. (Um diesen Effekt ignorieren zu können, gibt es in der Datenbank verschieden Automatismen: vgl. Dokumentation-Datenbank)

Ablauf

Zu Beginn des Javaprogramms wird zunächst versucht eine Verbindung mit der Datenbank aufzubauen. War dies erfolgreich, werden nacheinander alle RSS-Feeds gelesen. Dazu wird für jeden Feed die Methode ‘parseFeed’ aufgerufen. Dieser wird jeweils eine neue Version des für die veröffentlichende Stelle, sowie zu dem Ressort passende Parsers, sowie die URL des RSS-Feeds übergeben. Die Methode parset das xml Element, das den RSS-Feed repräsentiert mit dem übergeben parser. In diesem erfolgt die eigentliche Logik: Der Parser liest für jeden Artikel die Werte der einzelnen Values (wie z.B. Überschrift oder Autor). Im zweiten Schritt „übersetzen“ explizite Parser für die jeweilige Information für den aktuellen publisher die Werte in verwendbare Daten. Mit diesen Informationen wird ein Objekt der Klasse Artikel erstellt, welches die gleichen Attribute erwartet, wie die entsprechenden Datenbankrelation. Im Folgenden wird geprüft, ob der aktuelle Artikel in die Datenbank hinzugefügt werden muss. Dies passiert in dem geprüft wird, ob es in der Datenbank bereits einen Eintrag mit den exakt gleichen Informationen gibt. Explizit gilt das auch für den Veröffentlichungszeitpunkt. Befindet sich der aktuelle Artikel noch nicht in der Datenbank muss er hinzugefügt werden. Hierbei wird geprüft, ob alle Randinformationen bereits vorhanden sind. Handelt es sich bei dem Artikel z.B. um den ersten aus seinem Ressort, wird automatisch in der entsprechenden Tabelle das Ressort angelegt. Das Gleiche passiert für Autoren und Kategorien bzw. mögliche Metadaten (vgl. Dokumentation-Datenbank). Dieses Verfahren wird zunächst für jeden Artikel eines Ressorts eines Mediums, dann für alle Ressorts und schließlich für alle Zeitungen wiederholt.

RSS-Feeds

Aufbau

Ein Knoten (der einen Artikel repräsentiert) in einem RSS-Feed sieht beispielsweise wie folgt aus:

<item>
  <title>Ermittlungen beim Militär: Türkische Behörden nehmen Dutzende angebliche Terrorverdächtige fest</title>
  <link>http://www.spiegel.de/politik/ausland/tuerkei-festnahmen-wegen-angeblichem-terrorverdacht-a-1245951.html#ref=rss</link>
  <description>Mit weiteren Festnahmen gehen türkische Behörden gegen angebliche Terrorverdächtige im Militär vor. Auch höherrangige Offiziere sind betroffen. </description>
  <pubDate>Mon, 31 Dec 2018 13:33:00 +0100</pubDate>
  <guid>http://www.spiegel.de/politik/ausland/tuerkei-festnahmen-wegen-angeblichem-terrorverdacht-a-1245951.html</guid>
</item>

Quelle: www.spiegel.de

Im Allgemeinen erwartet der ‘DefaultParser’ folgendes Schema:

<item>
  <pubDate>
  <author>
  <category>
  <title>
  <description>
  <link>
  <guid>
</item>

*Die Reihenfolge in der sich die Informationen in einem Tag befinden ist egal.

Dieses Schema wird im Allgemeinen bei allen eingebunden Quellen in dieser oder einer sehr ähnlichen Form benutzt. Ein solcher Unterschied besteht z.B. bei der SZ. Hier heißt der Tag <description> <shorttext>. Um dies auszugleichen gibt es für jede veröffentlichende Stelle einen eigenen Parser der von dem von uns geschrieben ‘DefaultParser’ erbet. Neben der unterschiedlichen oben beschriebenen Benennung von einzelnen Informationen gibt es die größten Unterschiede in dem (zum Teil vorhandenem) Beitragsbild. Dieses hat zum Teil einen eigenen Tag, erscheint zum Teil aber auch in der Überschrift oder in der Kurzbeschreibung. Auch diese Unterschieden werden durch die individuellen Parser ausgeglichen.

Folgende RSS-Feeds werden aktuell von uns verwendet werden:

NewsFeed

Die meisten der eingebundenen veröffentlichenden Stellen, betreiben einen News-Feed, in dem die aktuell wichtigsten Artikel unabhängig vom Ressort veröffentlicht werden. Die meisten der dort veröffentlichten Artiekl werden auch in mindestens einem anderen ressort-spezifischen Feed veröffentlicht. Für die Analyse der Daten nach verschiedenen Ressorts werden diese News-Feeds ausgeschlossen, damit die Artikel nur in ihrem eigentlichen Ressorts berücksichtigt werden. Dies passiert in der Datenbank über eine View (vgl. Dokumentation-Datenbank).

SZ:

FAZ

Spiegel

Welt

Bild

TAZ

Tagesspiegel

Bundestag

Presseportal

BMWi

Zeit

Tagesschau

Bei der zugrundeliegenden Datenbank handelt es sich um den MySQL Ableger MariaDB.

Tabelle: article

In dieser Tabelle werden sämtliche Artikel erfasst.

Spaltenname Data-Type Kommentar
ID int
publisher varchar Die Quelle die den Artikel veröffentlicht hat
articlePublisherId varchar Eindeutige ID, die jeder Artikel vom publisher bekommt. Haben zwei Artikel in der Datenbank hier den gleichen Wert handelt es sich um den gleichen Artikel, der mehrfach veröffentlicht wurde
url varchar URL unter der der vollständige Artikel gefunden werden kann.
ressort varchar Ressort in dem der Artikel veröffentlicht wurde.
publishdate datetime Veröffentlichungszeitpunkt
fetchdate datetime Zeitpunkt, an dem der Artikel in die Datenbank importiert wurde.
location mediumtext Der Veröffentlichungort des Artikels (falls vorhanden)
headline varchar Überschrift des Artikels
shorttext mediumtext Kurzzusammenfassung des Artikels, der in dem RSS-Feed mit veröffentlicht wurde.
articletext longtext Vollständiger Text des Artikels (aktuell nicht benutzt)
imageurl varchar URL des Bildes.
rawhtml longtext Aktuell nicht in Verwendung

View: uniqueArticle

In dieser View wird jeder Artikel genau ein mal gezeigt.
Generierendes SQL: select * from RWebscraper.article where RWebscraper.article.id in (select uniqueArticleId.id from RWebscraper.uniqueArticleId)

Spaltenname Data-Type Kommentar
ID int
publisher varchar Die Quelle die den Artikel veröffentlicht hat
articlePublisherId varchar Eindeutige ID, die jeder Artikel vom publisher bekommt. Haben zwei Artikel in der Datenbank hier den gleichen Wert handelt es sich um den gleichen Artikel, der mehrfach veröffentlicht wurde
url varchar URL unter der der vollständige Artikel gefunden werden kann.
ressort varchar Ressort in dem der Artikel veröffentlicht wurde.
publishdate datetime Veröffentlichungszeitpunkt
fetchdate datetime Zeitpunkt, an dem der Artikel in die Datenbank importiert wurde.
location mediumtext Der Veröffentlichungort des Artikels (falls vorhanden)
headline varchar Überschrift des Artikels
shorttext mediumtext Kurzzusammenfassung des Artikels, der in dem RSS-Feed mit veröffentlicht wurde.
articletext longtext Vollständiger Text des Artikels (aktuell nicht in Verwendung)
imageurl varchar URL des Bildes.
rawhtml longtext Aktuell nicht in Verwendung

View: uniqueArticleFiltered

In dieser View wird jeder Artikel genau ein mal gezeigt, wobei sämtliche NewsFeeds ausgeschlossen sind, da diese bei Analysen auf Ressorts ungeeignet sind.

Spaltenname Data-Type Kommentar
ID int
publisher varchar Die Quelle die den Artikel veröffentlicht hat.
articlePublisherId varchar Eindeutige ID, die jeder Artikel vom publisher bekommt. Haben zwei Artikel in der Datenbank hier den gleichen Wert handelt es sich um den gleichen Artikel, der mehrfach veröffentlicht wurde
url varchar URL unter der der vollständige Artikel gefunden werden kann.
ressort varchar Ressort in dem der Artikel veröffentlicht wurde.
publishdate datetime Veröffentlichungszeitpunkt
fetchdate datetime Zeitpunkt, an dem der Artikel in die Datenbank importiert wurde.
location mediumtext Der Veröffentlichungort des Artikels (falls vorhanden)
headline varchar Überschrift des Artikels
shorttext mediumtext Kurzzusammenfassung des Artikels, der in dem RSS-Feed mit veröffentlicht wurde.
articletext longtext Vollständiger Text des Artikels (aktuell nicht in Verwendung)
imageurl varchar URL des Bildes.
rawhtml longtext Aktuell nicht in Verwendung

View: uniqueArticleId

In dieser View werden alle articlePublisherIds gezeigt.
Generierendes SQL: select RWebscraper.article.articlePublisherId AS articlePublisherId,max(RWebscraper.article.id) AS id from RWebscraper.article group by RWebscraper.article.articlePublisherId

Spaltenname Data-Type Kommentar
id int
articlePublisherId varchar Eindeutige ID, die jeder Artikel vom publisher bekommt. Haben zwei Artikel in der Datenbank hier den gleichen Wert handelt es sich um den gleichen Artikel, der mehrfach veröffentlicht wurde.

View: uniqueArticleIdFiltered

In dieser View werden alle articlePublisherIds gezeigt, die nicht nur in einem NewsFeed vorkommen.
Generierendes SQL: select RWebscraper.article.articlePublisherId AS articlePublisherId,max(RWebscraper.article.id) AS id from RWebscraper.article where (not((RWebscraper.article.publisher,RWebscraper.article.ressort) in (select RWebscraper.excludedRessorts.publisher,RWebscraper.excludedRessorts.ressort from RWebscraper.excludedRessorts))) group by RWebscraper.article.articlePublisherId

Spaltenname Data-Type Kommentar
id int
articlePublisherId varchar Eindeutige ID, die jeder Artikel vom publisher bekommt. Haben zwei Artikel in der Datenbank hier den gleichen Wert handelt es sich um den gleichen Artikel, der mehrfach veröffentlicht wurde.

Tabelle: author

In dieser Tabelle werden alle vorhanden Informationen zu den Autoren erfasst.

Spaltenname Data-Type Kommentar
id int
name mediumtext Name des Autors
publisher mediumtext Zeitung unter der der Autor veröffentlicht
ressort mediumtext Ressort in dem der Autor veröffentlicht

Tabelle: articleToAuthor

Tabelle zur Realisierung der m:n Verbindung zwischen Artikeln und Autoren

Spaltenname Data-Type Kommentar
articleId int ID des Artikels
authorId int ID des Autors

Tabelle: excludedRessorts

Tabelle, die die Ressorts auflistet, die bei den Filtered views ausgeschlossen werden.

Spaltenname Data-Type Kommentar
publisher varchar Medienhaus, dessen NewsFeed ausgeschlossen werden soll.
ressort varchar Name des Ressort(= Name des Feeds), das ausgeschlossen werden soll.

Tabelle: category

Tabelle die alle Kategorien beinhaltet, in die Artikel eingeordnet wurden. Bemerkung: Nicht alle Zeitung veröffentlichen Kategorien zu ihren Artikeln.

Spaltenname Data-Type Kommentar
id int
category mediumtext Kategorie in die der Artikel eingeordnet wurde.

Tabelle: articleToCategory

Tabelle zur Realisierung der m:n Verbindung zwischen Kategorien und Autoren

Spaltenname Data-Type Kommentar
articleId int ID des Artikels
categoryId int ID des Autors

Tabelle: metadata

Tabelle zur Einbund von Informationen, die nur wenige Zeitungen veröffentlichen. Hierbei wird das Prinzip einer Non-SQL Tabelle emuliert.

Spaltenname Data-Type Kommentar
id int
articleId int Fremdschlüssel auf den Artikel
metakey varchar Information, zu der ein Wert zu einem Artikel gespeichert werden soll.
metavalue mediumtext Wert, der zu speichernden Information

View: countArticle

Die View stellt, da wie viele Artikel von welcher Zeitung sich in der Datenbank befinden.
Generierendes SQL: select count(uniqueArticleFiltered.publisher) AS pubCoun,uniqueArticleFiltered.publisher AS publisher from RWebscraper.uniqueArticleFiltered group by uniqueArticleFiltered.publisher

Spaltenname Data-Type Kommentar
pubCoun bigint Anzahl der Artikel des Medienhauses
publisher varchar Veröffentlicher der Artikel

View: countArticleAb0111

Die View stellt dar, wie viele Artikel von welcher Zeitung sich in der Datenbank befinden, die nach dem 01.11.2018 veröffentlicht wurden.
Generierendes SQL: select article.publisher AS publisher,count(article.publisher) AS article from RWebscraper.uniqueArticleFiltered article where (article.publishdate > '2018-11-01 00:00:00') group by article.publisher

Spaltenname Data-Type Kommentar
pubCoun bigint Anzahl der Artikel des Medienhauses
publisher varchar Veröffentlicher der Artikel

View: countVeröffentlichungen

In dieser View wird dargestellt wie oft ein Artikel in einem RSS-Feed veröffentlicht wurde.
Generierendes SQL: select uniqueArticleFiltered.publisher AS publisher,uniqueArticleFiltered.articlePublisherId AS articlePublisherId,count(0) AS Count(*) from RWebscraper.uniqueArticleFiltered group by uniqueArticleFiltered.articlePublisherId,uniqueArticleFiltered.publisher order by count(0) desc

Spaltenname Data-Type Kommentar
publisher varchar Die Quelle die den Artikel veröffentlicht hat.
articlePublisherId varchar Eindeutige ID, die jeder Artikel vom publisher bekommt. Haben zwei Artikel in der Datenbank hier den gleichen Wert handelt es sich um den gleichen Artikel, der mehrfach veröffentlicht wurde.
Count(*) bigint Anzahl, wie oft sich ein Artikel in der Datenbank befindet.

Sämtliche statistische Auswertungen unserer Daten, die wir Ihnen unter dem Bereich “Datensatz kennenlernen” anbieten, werden nach dem gleichen Schema erstellt:
Für jede Statistik gibt es ein eigenes .R File, dass bei laufzeitintensiven Datenbank-Querys in regelmäßigen Abständen, oder bei einfachen Abfragen zum Zeitpunkt zum Aufruf der entsprechenden Seite ausgeführt wird. In jedem dieser .R-Skripts wird zunächst eine Verbindung zu unserer Datenbank aufgebaut und danach mit dem Befehl dbSendQuery die entsprechende Abfrage durchgeführt. Im Folgenden werden die Ergebnisse der Query in ein Data-Frame geladen.
Die so erhaltenen Daten werden mit barplot bzw. Pie visualisiert.
Im letzten Schritt wird die Datenbankverbindung wieder geschlossen.

Anzahl an Artikeln

Das Barplot-Diagramm zeigt, wie viele einzigartige Artikel sich aus dem November 2018 in der Datenbank befinden, gruppiert nach der veröffentlichenden Quelle.
Generierendes SQL: SELECT article.publisher,count(article.publisher) FROM uniqueArticle as article where publishdate>"2018-11-01 00:00:00" and publishdate<"2018-12-01 00:00:00" GROUP by article.publisher

Anteil der Medienhäuser

Das Kreisdiagramm zeigt das Verhältnis der Anzahl der Artikel, die sich aus dem November 2018 in der Datenbank befinden, gruppiert nach der veröffentlichenden Quelle.
Generierendes SQL: SELECT article.publisher,count(article.publisher) FROM uniqueArticle as article where publishdate>"2018-11-01 00:00:00" and publishdate<"2018-12-01 00:00:00" GROUP by article.publisher

Anzahl der Artikel pro Ressort

Das Barplot-Diagramm zeigt, wie viel Prozent aller Artikel einer Zeitung im gewählten Ressort veröffentlicht wurden.
Generierendes SQL: SELECT count(article.ressort)/publisherCount.pubCoun, article.publisher FROM uniqueArticle as article, countArticle as publisherCount where (article.ressort="Politik") and article.publisher=publisherCount.publisher and publishdate>"2018-11-01 00:00:00" GROUP by article.publisher, article.ressort

Anzahl an Wörtern

Mithilfe eines Python-Scripts werden alle 12 Stunden für alle veröffentlichenden Stellen je 1000 zufällige Artikel ausgewählt. Von diesen ausgewählten Artikeln wird die Anzahl der verschiedenen Wörter ermittelt.

Über die Option Auswahl kann gewählt werden, ob nur Überschriften, nur die Artikeltexte oder beides (Summe) dargestellt werden soll.

Über die Option Darstellung kann gewählt werden, ob der Anteil verschiedener Wörter in Relation zur Gesamtzahl der Wörter oder die absolute Anzahl dargestellt werden soll.

Für die Berechnung wird zunächst für jede veröffentlichende Stelle 1000 zufällige Überschriften & Artikeltexte ausgewählt. Alle darin vorkommenden Wörter werden danach mithilfe der Python-Library spacy gestemmt, d.h. in ihre Stammform reduziert. Bei diesen überführten Wörtern werden danach Duplikate entfernt, so lassen sich die Anzahl der verschiedenen vorkommenden Wörter bestimmen. Je nach Wahl der Option Darstellung wird diese Zahl noch durch die Gesamtzahl der Wörter in den ausgewählten Texten diviert.

Ein höherer Wert in der relativen Darstellung bedeutet, dass die Anzahl an verschiedenen Wörtern an der Gesamtzahl der Wörter geringer ist, der Wortschatz ist damit also insgesamt kleiner als bei einem niedrigen Wert.

Die Berechnung erfolgt für alle veröffentlichenden Stellen unabhängig voneinander, eine Beeinflussung ist hier nicht gegeben.

Artikelthemen

Bei der SZ und der Bild-Zeitung erhält ein Artikel eine beliebige Zahl von Themen, denen dieser Artikel zugeordnet ist. Hier werden häufig verkommende Themen in einer Wordcloud zusammengefasst. Das bedeutet, dass es zu den dargestellten Themen eine Vielzahl von Artikeln ist.

Mit folgender SQL-Query werden die Kategorien selektiert: SELECT cat.category FROM article art left join articleToCategory artcat on art.id = artcat.articleId left join category cat on artcat.categoryId = cat.id

Aus der so entstandenen Liste der Themen werden zunächst die nachfolgend Themen entfernt, da es sich hier größtenteils um zeitungsspezifische Begriffe handelt, die keine Aussage über den damit verbundenen Artikel haben:

null, süddeutsche, faz, spiegel, welt, bild, bams,taz, tagesspiegel, fb, regional, news, kommentare, liveblog, vorschau, panorama, ratgeber, ticker, …

Ausgehend von den übrig gebliebenen Begriffen wird mit dem R-Package „wordcloud“ die Visualisierung gerändert. Hier werden die 100 Themen, die am häufigsten vorkommen berücksichtigt.

Alle 12 Stunden wird im Hintergrund mithilfe der glmnet-library eine Klassifizierung der Daten vorgenommen. Dabei wird anhand des erfassten Shorttextes auf die veröffentlichende Stelle geschlossen. Es wird ein multi-nomialer Response-Typ verwendet, da alle Publisher gleichzeitig klassifiziert werden. Der Alpha-Parameter wurde dabei auf 1 gesetzt, dadurch wird lediglich die Lasso-Bestrafung verwendet und die Ridge-Bestrafung wird verworfen.

Anschließend wird die predict-Funktion verwendet, um für jeden Publisher/jedes Ressort herauszufinden, welche Wörter einen hohen Koeffzienten haben (und damit einen hohen Indikator darstellen).

Die berechneten Koeffizienten werden dann mithilfe einer Wordcloud dargestellt. Dafür werden zusätzlich die Koeffizienten noch logarithmiert, da bei einigen Publishern die Koeffizienten stark verschieden sind und sonst Wörter mit geringen Koeffizienten nicht angezeigt werden würden.

Trends

Suchbegriffe

Mithilfe von Datum kann ein Datumsbereich für die Analyse ausgewählt werden. Dabei werden alle Artikel ab 0:00 Uhr des Starttages bis 23:59 des Endtages einbezogen.

Zusätzlich können Publishers ausgewählt werden. Wenn kein Publisher ausgewählt wird, werden alle Zeitungen verwendet.

Geben Sie im Textfeld Trendthema einen Suchbegriff Ihrer Wahl ein. Z.B. Covid oder Weihnachten. Die Analyse zeigt an, wie häufig der Suchbegriff in Artkeln vorkommt. Mehrere Suchwörter können über ein , getrennt eingegeben werden. Hierbei werden alle Artikel dargestellt, in denen zumindest einer der Suchbegriffe vorhanden ist.

Über die Auswahl Gruppieren nach kann ausgewählt werden, wie Artikel gruppiert werden sollen. Standardmäßig wird der Artikel nach Tagen gruppiert, weiterhin ist eine Gruppierung nach Wochen (hierbei wird jeweils der Montag der Woche verwendet), Monat (1. jeden Monats), Wochentag (0 für Montag, 6 für Sonntag), Stunde (Datum + Uhrzeit), Stunde pro Tag (0 - 24 Uhr).

Des Weiteren kann der verwendete Zeitpunkt unterschieden werden.Hierbei stellt Abruf den Zeitpunkt des Erfassens durch unsere Systeme dar, Veröffentlichung den durch die Zeitungen angegebene Zeitpunkt. Teilweise weichen die beiden Zeitpunkte um mehrere Stunden ab, insbesondere, wenn Artikel, welche in der Print-Ausgabe einer Zeitung erscheinen bereits am Abend eines Tages für den Morgen des nächsten Tages vordatiert werden.

Die Option y-Achse sorgt standardmäßig dafür, dass die blanke Anzahl an Artikeln mit Suchbegriff angezeigt wird. Zusätzlich wird eine relative Darstellung angeboten. Die Option Aufmerksamkeit im Vergleich zu allen anderen Themen zeigt wie viel Prozent der Berichterstattung dem Thema gewidment worden ist. Also: Wie viel Prozent der Artikel der SZ im Dezember hatten Weihnachten als Thema.

In der Auswahl Nach Publishern trennen wird ausgewählt, ob alle Zeitungen aufaddiert werden sollen und gesammelt dargestellt werden sollen, oder jede Zeitung einzeln dargestellt werden soll.

Trends

Finder

Zunächst werden für jeden Tag die 1000 am häufigsten vorkommenden Wörter bestimmt, dabei wird die Überschrift und der Shorttext mit einbezogen. Diese Wörter werden über alle Tage hinweg vereinigt, sodass eine Liste mit allen Wörtern, die an min. 1 Tag in den 1000 häufigsten Wörtern vorkommen, vorhanden ist.

Danach wird für jedes ausgewählte Wort die absolute Häufigkeit über alle Tage und die durchschnittliche Häufigkeit pro Tag bestimmt.

Für jeden Tag wird geprüft, ob das gewählte Wort an diesem Tag mindestens 10mal so oft wie im Durschnitt pro Tag vorkommt. Wörter, welche dieses Kriterium erfüllen werden gespeichert, dabei wird ebenfalls gespeichert, an welchem Tag dieses Wort ‘getrended’ ist.

Dieser Vorgang wird im Hintergrund alle 12 Stunden ausgeführt. Bei Auswahl eines Datums auf der Weboberfläche werden die gespeicherten Wörter für diesen Tag ausgelesen und, falls vorhanden, ausgegeben.

Trends

Analyse

Zunächst werden alle Artikel für den ausgewählten Tag aus der Datenbank geladen. Die Artikel werden in 2 Teile unterteilt: Artikel, welche den eingegeben Filter in Überschrift oder Shorttext enthalten und Artikel, welche den Filter nicht enthalten. Wörter, welche insgesamt nur sehr selten vorkommen werden entfernt, da diese das Ergebnis sonst verfälschen würden.

Im nächsten Schritt wird mithilfe der glmnet-library ein binomiales Modell erstellt, dabei wird lediglich die Lasso-Bestrafung verwendet. Das Modell findet Wörter, welche einen hohen Koeffizienten haben und daher auf den gesuchten Filter schließen.

Bevor die gefundenen Wörter mithilfe einer Wordcloud dargestellt werden können, werden die Koeffizienten zunächst mit dem Faktor 100 000 multipliziert. Dies verhindert, dass die Wordcloud-Library Wörter mit Koeffizienten zwischen 0 und 1 nicht darstellt. Schließlich werden die Koeffizienten noch mithilfe einer Logarithmus-Funktion gestaucht, ohne diese Stauchung haben einige Wörter (vorallem solche, die den Filter direkt enthalten) einen extrem hohen Koeffizienten, wohingegen inhaltlich ähnliche Wörter einen niedrigen Koeffizienten haben und dadurch nicht mehr/nur sehr klein in der Wordcloud dargestellt werden.

Hackerangriff im Dezember 2018

Nachfolgende Tabelle zeigt die unmittelbare Reaktion der erfassten Zeitungen auf die Veröffentlichung von vielen privaten Daten von Politikern und Personen des öffentlichen Lebens. Als erstes berichtet in der Nacht vom 03.01.2019 auf den 04.01.2019 das RBB-Inforadio über den Vorfall.

04.01.2019

Uhrzeit Zeitung
05:25 Uhr Tagesschau Bericht von Hackerangriff auf Hunderte deutsche Politiker; Verweis auf einen Bericht vom RBB
07:17 Uhr Tagesspiegel Verweis auf einen Bericht vom RBB
07:18 Uhr Presseportal Veröffentlichung eines Artikels vom RBB
07:34 Uhr Bild
07:34 Uhr Zeit
07:42 Uhr Bild Update des Artikels von 07:34; Jetzt wird neben betroffenen Politikern auch von Personen des öffentlichen Lebens berichtet.
08:02 Uhr SZ
08:14 Uhr Spiegel
08:24 Uhr Zeit Update des Artikels von 07:34
09:02 Uhr Welt
09:20 Uhr Tagesspiegel Update des Artikels von 07:17; Jetzt wird neben betroffenen Politikern auch von prominenten Personen berichtet.
09:42 Uhr Tagesspiegel Update des Artikels von 09:20; Jetzt wird von Politikern, Prominenten und Künstlern berichtet.
09:46 Uhr Presseportal Veröffentlichung eines Artikels der Rheinischen Post; Hier wird von Journalisten als Hauptbetroffenen berichtet
10:08 Uhr Tagesspiegel Update des Artikels von 10:08

Trends

Hackerangriff

Die Ermittlung der Daten für den Zeitstrahl erfolgt manuell. Hierbei wurden neben den Einträgen in der Datenbank auch zum Teil die ganzen Artikel verglichen und ausgewertet. Die Darstellung als Timeline wird unter Verwendung der timevis libary erstellt. Dazu werden die zunächst manuell gefilterten Daten in eine CSV-Datei geschrieben und daraus automatisch dargestellt.

Aufgrund eines Fehlers in der Datenerfassung fehlt die Zeitung FAZ.

Impressum