OlymPeaks
Olympeaks

Lena Andres, Lukas Arnecke, Michelle Heiler, Tim Hubert & Linda Stemmle

OlymPeaks

Haben länderspezifische und länderübergreifende sportliche, wie auch politische Ereignisse Einfluss auf das öffentliche Interesse an den olympischen Sommerspielen?

Die olympischen Sommerspiele gehören zu den größten sportlichen Ereignissen in der heutigen Zeit und werden alle vier Jahre in einem anderen Land ausgetragen. Daraus ergibt sich, dass länderspezifische und länderübergreifende sportliche, wie auch politische Ereignisse Einfluss auf das Interesse an den olympischen Sommerspielen haben. Im Rahmen der Vorlesung Grundlagen der Datenvisualisierung wurde diese Behauptung in Hinblick auf die olympischen Sommerspiele 2012, 2016 und 2020 genauer evaluiert. Hierfür war es interessant, Daten, wie Klickzahlen sowie die Anzahl der Änderungen, welche für Wikipedia spezifisch sind, näher zu betrachten.

Einführung / Konzept

Die olympischen Sommerspiele zählen zu den bedeutendsten sportlichen Ereignissen der Welt. Seit 1896 werden sie im Rhythmus von vier Jahren (mit kleinen Unterbrechungen) an unterschiedlichen Orten ausgetragen. Ausgehend von der großen Bedeutung, welche die olympischen Sommerspiele für die einzelnen Staaten hat, haben sich für uns folgende Fragen ergeben.

Haben länderspezifische und länderübergreifende sportliche, wie auch politische Ereignisse Einfluss auf das öffentliche Interesse an den olympischen Sommerspielen? Hierbei wählen wir die Klickzahlen, beginnend im Jahr 2008, und die Anzahl der Änderungen in der gesamten Historie als Indikator für das öffentliche Interesse. Um sowohl die Daten vor den jeweiligen olympischen Sommerspielen, als auch während und nach den Olympiaden beobachten zu können haben wir uns auf die Spiele 2012 in London, 2016 in Rio de Janeiro sowieso die kommende Olympiade 2020 in Tokio fokussiert. Des Weiteren werden die Daten sowohl aus dem deutschen Wikipedia Artikel, als auch dem Artikel in der jeweiligen Landessprache des Austragungsortes untersucht.

Daten / Auswertung

Daten

Alle Daten stammen ursprünglich von Wikipedia, da sämtliche Daten die wir untersuchen Wikipedia spezifische Daten sind. Die Edits wurden über die Wikipedia API gewonnen. Die Daten reichen hierbei jeweils bis zur Erstellung des Wikipedia Artikels zurück und liegen im JSON Format vor. Diese Daten wurden anschließend auf Monatsebene aggregiert.

JSON-Format der Edits

Hierbei haben sich allerdings für die Anzahl der Klicks folgende Probleme ergeben. Die Daten, auf welche über die Wikipedia API zugegriffen werden kann, reichen nur bis zum 01.06.2015 zurück. Für unsere Zwecke ist das leider nicht weit genug. Die Seite http://stats.grok.se/ , welche von Wikipedia empfohlen wird für Zugriffszahlen vor dem 01.06.2015, führt leider nicht die aktuelleren Zugriffszahlen. Um alle Daten aus einer Quelle zu generieren haben wir von einer weiteren Quelle Gebrauch gemacht: wikipediaviews

Auf dieser Seite werden die Klickzahlen bis Juni 2015 von stats.grok.se extrahiert, sowie nach Juni 2015 über die API gewonnen. Um nicht jeden Monat extra herunterzuladen haben wir ein Skript erstellt, welches die Daten aus der HTML-Tabelle der Seite gewinnt. Diese sind bereits auf Monatsebene aggregiert.

#!/usr/bin/env python
#GDV Script zum Extrahieren von Daten von einer URL und speichern in eine Datei
#Das Script interpretiert die html datei als String und sucht nach dem regex-Ausdruck.
#Innerhalb dieses Ausdrucks werden dann das Jahr und Monat sowie die Zugriffszahl in diesem Monat gesucht

import urllib2
import re

regex = "<td>\d{6}</td>.{0,200}title=.{0,70}</td>"
regexJahr = "20\d{4}"
regexZahl = 'title="\d{1,6}'

websites = [
			#Sommerspiele 2012
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=Olympische+Sommerspiele+2012&allmonths=allmonths&language=de&drilldown=desktop',\
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=2012+Summer+Olympics&allmonths=allmonths&language=en&drilldown=desktop',\
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=Jogos+Ol%C3%ADmpicos+de+Ver%C3%A3o+de+2012&allmonths=allmonths&language=pt&drilldown=desktop',\
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=%E3%83%AD%E3%83%B3%E3%83%89%E3%83%B3%E3%82%AA%E3%83%AA%E3%83%B3%E3%83%94%E3%83%83%E3%82%AF+%282012%E5%B9%B4%29&allmonths=allmonths&language=ja&drilldown=desktop',\
			#Sommerspiele 2016
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=Olympische+Sommerspiele+2016&allmonths=allmonths&language=de&drilldown=desktop',\
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=2016+Summer+Olympics&allmonths=allmonths&language=en&drilldown=desktop',\
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=Jogos+Ol%C3%ADmpicos+de+Ver%C3%A3o+de+2016&allmonths=allmonths&language=pt&drilldown=desktop',\
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=%E3%83%AA%E3%82%AA%E3%83%87%E3%82%B8%E3%83%A3%E3%83%8D%E3%82%A4%E3%83%AD%E3%82%AA%E3%83%AA%E3%83%B3%E3%83%94%E3%83%83%E3%82%AF&allmonths=allmonths&language=ja&drilldown=desktop',\
			#Sommerspiele 2020
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=Olympische+Sommerspiele+2020&allmonths=allmonths&language=de&drilldown=desktop',\
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=2020+Summer+Olympics&allmonths=allmonths&language=en&drilldown=desktop',\
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=Jogos+Ol%C3%ADmpicos+de+Ver%C3%A3o+de+2020&allmonths=allmonths&language=pt&drilldown=desktop',\
			'https://wikipediaviews.org/displayviewsformultiplemonths.php?page=2020%E5%B9%B4%E5%A4%8F%E5%AD%A3%E3%82%AA%E3%83%AA%E3%83%B3%E3%83%94%E3%83%83%E3%82%AF&allmonths=allmonths&language=ja&drilldown=desktop']

titel = ["2012_deutsch", "2012_englisch", "2012_portugiesisch", "2012_japanisch",\
		"2016_deutsch", "2016_englisch", "2016_portugiesisch", "2016_japanisch",\
		"2020_deutsch", "2020_englisch", "2020_portugiesisch", "2020_japanisch",]
index = 0

for link in websites:


	response = urllib2.urlopen(link)
	html = response.read()

	ziel = open(titel[index] + ".csv", "w")
	find = re.findall(regex, html)


	for erg in find:
		jahr = re.search(regexJahr, erg).group()
		zahl = re.search(regexZahl, erg).group()
		jahr = format(jahr)
		zahl = format(zahl)
		views = zahl.split('"')
		string = jahr + ";" + views[1] + "\n"
		ziel.write(string)

	index = index + 1
	ziel.close

Um einen ersten Überblick über die gewonnenen Daten zu erhalten, wurden einige Versuche mit Tableau durchgeführt. Im Folgenden zu sehen die Edits für die Sprachversionen deutsch und portugiesisch für die olympischen Sommerspiele 2016 in Rio de Janeiro.

Ziemlich schnell wurde erkenntlich, dass eine Aggregation auf Jahresebene wenig Aussagekraft hat und keine relevanten Ergebnisse liefert. Anschließend haben wir uns dafür entschieden die Daten auf Monatsebene zu kumulieren.

Prozess

Im Verlauf dieses Projektes sind in unserem Team unzählige Visualisierungen entworfen worden, fast genauso viele wurden allerdings auch wieder verworfen. Um den Rahmen dieser Dokumentation nicht zu sprengen hier nur die wichtigsten Meilensteine und die damit gewonnenen Erkenntnisse.

Zunächst wollten wir sämtliche Olympische Sommerspiele als Referenzwerte verwenden und diese auf einer Karte darstellen. Hierzu folgende Visualisierungsexperimente in einer Galerie:

Schnell wurde klar, dass die gewünschten Visualisierungen mit den zur Verfügung stehenden Daten nicht erreichbar sind. Nun musste sowohl eine neue These als auch neue Visualisierungen her. Wir reduzierten auf drei olympische Sommerspiele, London 2012, Rio de Janeiro 2016, und Tokio 2020. Da wir nicht alle Ideen komplett verwerfen wollten, behielten wir unsere „Sonne“ bei starteten weitere Visualisierungsversuche.

Scribble neue Sonne

Da volle Kreise eigentlich einen Kreislauf symbolisieren und in unserem Fall kein Kreislauf vorliegt, sondern nur einzelne Stationen auf einem Zeitstrahl, verabschiedeten wir uns schweren Herzens von der letzten Visualisierung.

Auf erneutes Scribbeln folgten auch neue Ideen und somit neue Entwürfe, welche uns einen großen Schritt weiter brachten auf dem Weg zur „perfekten“ Visualisierung.

Scribble Punkte
Visualisierung Punkte

Leider war diese Visualisierung für den Benutzer/Beobachter sehr schwierig zu greifen und so wagten wir einen kleinen Schritt zurück zu den Basics und versuchten uns an einigen simplen Balken- und Liniendiagrammen:

Über diesen Anreiz sind wir letztendlich bei der für uns perfekten Visualisierung gelandet.

Visualisierung Prototyp

Prototyp / Ergebnisse

Visualisierung

Im Folgenden sind Ausschnitte aus unserem Prototypen gezeigt. Der Benutzer hat die Möglichkeit zwischen verschiedenen Ansichten zu wählen:

  • Alle olympischen Sommerspiele, Klickzahlen von allen Jahren
Alle Jahre, alle Spiele
  • Alle olympischen Spiele, nur Klickzahlen im Jahr 2012
Alle Spiele, Jahr 2012
  • Nur die Spiele in London, Klickzahlen von allen Jahren
Alle Jahre, London
  • Nur die Spiele in Rio, nur Klickzahlen im Jahr 2016
Jahr 2016, Rio

Erkenntnisse

Das Design der Visualisierung besteht im Wesentlichen aus einem interaktiven Balkendiagramm. Nach einigen anderen Visualisierungsversuchen, wurde diese Art der Ergebnisdarstellung gewählt. Grund für die Entscheidung war zum einen die Datengrundlage, welche sich optimal in Form eines Balkendiagrammes abbilden lässt, als auch die stattfindende Interaktion, wodurch die Ergebnisse für den Betrachter spannender dargestellt werden sollten.

Unsere Daten bestehen aus den echten Klickzahlen der einzelnen Monate der jeweilig betrachteten Jahre. Nämlich 2008 – 2017. Der Prototyp bietet dem Betrachter die Möglichkeit zunächst die Klickzahlen der Jahre bezogen auf die Wikipedia Sprachversionen, Englisch, Deutsch, Portugiesisch und Japanisch, wobei Deutsch immer im Vergleich zu den anderen Sprachen betrachtet wird, anzuschauen.

Die Interaktion findet dann wie folgt statt: Der Anwender hat bei der aktuellen Ansicht die Option, sich die einzelnen Monatsklickzahlen für die Olympischen Sommerspiele anzeigenzulassen sowie jeweils nur für einen bestimmten Austragungsort der Sommerspiele. Eine der Hauptaussagen, welche getroffen werden kann ist, dass das Interesse an den Olympischen Sommerspielen 2012 weiterhin besteht.

Des Weiteren lässt sich daraus schließen, dass die Begeisterung an den Olympischen Sommerspielen, im speziellen im deutschsprachigen Raum, stark von anderen sportlichen Ereignissen welche dort von Relevanz sind, abhängt. So gehen beispielsweise die Klickzahlen in die Höhe, wenn Fußballballweltmeisterschaften oder wichtige Leichtathletik Veranstaltungen stattfinden. Auch die Verkündung des nächsten Austragungsortes der Sommerspiele lässt die Klickzahlen steigen.

Implementierung

Zur Implementierung unserer Visualisierung haben wir folgende Sprachen verwendet:

  • Python
  • PHP
  • JavaScript
  • CSS
  • HTML

Da unsere Visualisierung primär einem Balkendiagramm entspricht waren keine weiteren Bibliotheken oder Frameworks notwendig. Die Daten haben wir zu Beginn des Projektes mit einem Skript in Python generiert. Diese wurden im Laufe des Projektes auch nicht mehr aktualisiert. Pro Jahr und Sprache wurde eine CSV-Datei generiert, welche in unserer wichtigsten Funktion, der getAll($path) ausgelesen werden.

function getAll($path){
   //Hier von allen Jahren die zusammengerechneten Werte nehmen
   $data = fopen("data/".$path.".csv", "r");
   $return = array("2008" => 0,
               "2009" => 0,
               "2010" => 0,
               "2011" => 0,
               "2012" => 0,
               "2013" => 0,
               "2014" => 0,
               "2015" => 0,
               "2016" => 0,
               "2017" => 0,);
   for ($i = 0; $row = fgetcsv($data ); ++$i) {
      foreach ($row as $line) {

         switch (substr($line, 0, 4)) { //substr: nimmt das Jahr pro Zeile
            case 2008:
               $return["2008"] += substr($line, 7); break;
            case 2009:
               $return["2009"] += substr($line, 7); break;
            case 2010:
               $return["2010"] += substr($line, 7); break;
            case 2011:
               $return["2011"] += substr($line, 7); break;
            case 2012:
               $return["2012"] += substr($line, 7); break;
            case 2013:
               $return["2013"] += substr($line, 7); break;
            case 2014:
               $return["2014"] += substr($line, 7); break;
            case 2015:
               $return["2015"] += substr($line, 7); break;
            case 2016:
               $return["2016"] += substr($line, 7); break;
            case 2017:
               $return["2017"] += substr($line, 7); break;
         }
      }
   }
   fclose($data);
   return $return;
}

Zur Visualisierung der einzelnen Jahre wurde eine Methode getYear($path, $year) erstellt, welche die Daten für ein Jahr generiert.

Fazit

Abschließend kann gesagt werden, dass sich unsere Vermutung „andere sportliche Ereignisse beeinflussen das Interesse und somit die Klickzahlen der Olympischen Sommerspiele“ bestätigt hat und wir das Interesse an den einzelnen Sommerspielen mit unserer gewählten Visualisierung optimal darstellen konnten. Allerdings gäbe es noch einige Möglichkeiten diese zukünftig zu erweitern. Hier könnte es nämlich spannend sein, die Edits der Wikipedia-Seiten zu visualisieren, um auch darüber die Möglichkeit zu haben, die Begeisterung der Menschen an den Sommerspielen darzustellen sowie herauszufinden ob es Unterschiede in Bezug auf die Klickzahlen gibt.

Außerdem könnte der Prototyp durch zusätzliche Infoboxen erweitert werden, denn dies würde das Evaluieren der Peaks vereinfachen. In diesen Infoboxen würden sportliche Ereignisse, welche mit hoher Wahrscheinlichkeit Einfluss auf die Klickzahlen haben, aufgelistet werden. Im folgenden ein Entwurf für diese Infoboxen.

Entwurf Infobox

Als weiteren möglichen Zusatz, könnte entweder Bezug auf alle Sprachen der Länder, welche die Olympischen Sommerspiele 2012, 2016 und 2020 ausgetragen haben oder austragen werden, genommen werden oder gegebenenfalls noch weiter in die Vergangenheit reichende Olympische Sommerspiele mit in der Visualisierung berücksichtigt werden.