Data Science

Zeitreihenanalysen: Was ist das und was bringt es mir?

Zeitreihenanalyse – was hier sehr theoretisch klingt, begegnet uns jeden Tag. Denn alles kann in einen zeitlichen Zusammenhang gebracht werden: Güter werden produziert, Waren verkauft, Kontoumsätze getätigt, Rechner melden Fehler, Autos fahren über Straßen, Menschen gehen ins Kino. All diese Daten tragen inhärent einen Zeitstempel und fallen kontinuierlich an. Dabei haben wir oftmals intuitiv ein Gefühl dafür, wie eine Zeitreihe weitergehen könnte, oder ob Anomalien und Auffälligkeiten vorliegen. In diesem Blogeintrag möchten wir beleuchten, wie man einer künstlichen Intelligenz ein Verständnis für Zeitreihen beibringen kann. Dies ist für einen Computer keinesfalls eine einfache Aufgabe – und eines vorweg: es gibt auch nicht „den einen Algorithmus“, der standardmäßig angewendet werden kann.

Warum sollte man sich dieser Herausforderung stellen? Analysen von Zeitreihen geben Aufschluss über die Daten und ihre Beschaffenheit an sich, erlauben uns Rückschlüsse in die Vergangenheit und – besonders spannend – ermöglichen uns Vorhersagen in die Zukunft ohne Kristallkugel und Tarot.

Die grundlegende Idee hinter Zeitreihenanalysen klingt ziemlich simpel: Finde ein Modell, welches für beliebige vergangene Zeitpunkte Werte liefert, die möglichst gut zu vergangenen Beobachtungen passen. Mit der so ermittelten Genauigkeit wird dieses Modell anschließend auf zukünftige Zeitpunkte angewendet und generiert so einen „Blick in die Zukunft“. Aber wie nähert man sich so einer Zeitreihe mathematisch?

Zeitreihen im Detail

Der erste Schritt einer Zeitreihenanalyse ist immer, sich die Daten explorativ anzuschauen. Welche Art von Zeitreihe wird, basierend auf den Daten, erwartet? Viele Zeitreihen bestehen aus einem globalen Trend und saisonalen Effekten. Man kann sogar so weit gehen und behaupten, dass alle Zeitreihen, die durch menschliches Verhalten beeinflusst werden, Modellen aus den beiden Komponenten Trend und Saisonalität folgen. Dies wird durch menschliche Gewohnheiten verursacht. Beispielsweise führt die Angewohnheit der meisten Menschen nachts zu schlafen zu einer täglichen Saisonalität, nämlich dem regelmäßigen Einbruch der Absatzzahlen oder des Verkehrsaufkommens in der Nacht.

Es gibt auch andere Arten von Zeitreihen, sogenannte stochastische Zeitreihen. Aktienkurse, charakteristisch auch als Random Walk bezeichnet, sind solche stochastische Zeitreihen. Der ein oder andere Anleger hat bereits erfahren müssen, dass typischerweise kein Modell aus Trend und Saison gefunden werden kann. Doch wir wollen uns hier auf die Mehrheit der Zeitreihen konzentrieren!

Wie sehen Trends und Saisonalitäten aus? Abbildung 1 zeigt mehrere charakteristische Verläufe von Zeitreihen. Natürlich folgt ein globaler Trend in den seltensten Fällen lediglich ausschließlich einem Modell – dennoch zeigen die meisten Zeitreihen innerhalb bestimmter Zeitabschnitte eines dieser Verhalten. Die Auswahl des richtigen Modells ist ausschlaggebend für den Erfolg der Vorhersage. Mit einer linearen Regression einen logarithmischen Trend abbilden zu wollen, wird zwangsläufig nicht zu hoher Genauigkeit führen – unabhängig davon, wie viele Daten in das Modell einfließen.

Abbildung 1: Verschiedene Modelle für einen globalen Trend

Zusätzlich zu dem globalen Trend müssen die Saisonalitäten in dem Modell berücksichtigt werden. Diese sind oftmals sehr stark dem menschlichen Verhalten nachempfunden, nicht nur den Schlafzyklen. Besonders verflucht sind die Saisonalitäten im Verkehrsaufkommen, jedem als „Rushhour“ und „Ferienzeit“ bekannt. Und wer bereits versucht hat, einen Wintermantel im Sommer zu kaufen, kennt die jährlichen Saisonalitäten im Einzelhandel. Abbildung 2 zeigt einige Modelle für solche Saisonalitäten.

Abbildung 2: Verschiedene Modelle für saisonale Effekte. Multiple Saisonalitäten werden leider nur selten unterstützt.

In so gut wie allen Zeitreihen treten beide Komponenten gleichzeitig auf, d. h. es liegen mindestens eine Saisonalität und ein globaler, überlagerter Trend vor. Diese beiden Effekte können sich gegenseitig beeinflussen. Man unterscheidet dabei zwischen additiven und multiplikativen Effekten. Wie in Abbildung 3 zu sehen, führt ein multiplikatives Modell zu einem „Aufschwingen“ der Zeitreihe über die Zeit. Hingegen bleibt das additive Modell konstant bestehen und ändert sein Verhalten nur in der „Höhe“.

Abbildung 3: Nebeneinanderstellung von additiver und multiplikativer Überlagerung von Komponenten.

Eine Grundvoraussetzung, um Trends und Saisonalitäten in den Rohdaten zu identifizieren, ist eine adäquate Datengranularität und -qualität. Je häufiger Datenpunkte aufgenommen werden, desto wahrscheinlicher können Saisonalitäten erkannt werden. Ein plastisches Beispiel sind Absätze von Produkten im Einzelhandel: Die klassischen Einkaufstage Donnerstag, Freitag und Samstag führen zu einer wöchentlichen Saisonalität, während durch den Tag-Nacht Rhythmus zusätzlich eine tägliche Saisonalität vorliegt. Werden die Verkäufe nur einmal täglich erfasst, ist es unmöglich eine tägliche Saisonalität zu erfassen, wohingegen die wöchentliche Saisonalität erkannt wird. Diese sogenannte “Unterabtastung” kann nicht nur zum Nichterkennen von Saisonalitäten, sondern auch zur Annahme falscher Frequenzen führen (siehe hierzu Abbildung 4). Gleichzeitig kann eine zu granulare Auswertung zu falschen Aussagen aufgrund verrauschter Daten führen. Man braucht also eine Datengranularität, welche der anfallenden Datenmenge angepasst ist. Die Speicherung und Verarbeitung solch feingranularer Daten ist erst seit einigen Jahren möglich und praktikabel. Es kann dadurch geschuldet sein, dass viele Algorithmen nur eine einzige – meist jährliche – Saisonalität berücksichtigen können. Aber wir berücksichtigt ein Algorithmus eine Saisonalität?

Abbildung 4: Eine sogenannte Unterabtastung verfälscht die Saisonalität aufgrund fehlender Messwerte. Die reale Saisonalität (grau) wird nicht erkannt, sondern eine andere angenommen (türkis)

Saisonalitäten lassen sich als Frequenzen behandeln und als solche auch berechnen. Viele Modelle (z.B.: ETS, ARIMA, Holt-Winters, TBATS) setzen eine genau bekannte Frequenz voraus. Die bisher angebrachten Beispiele für durch menschliches Verhalten beeinflusste Saisonalitäten ergeben ein intuitives Modell, dessen Frequenzen exakt ineinander aufgehen (Abbildung 2: einfache wöchentliche und stündliche Saisonalitäten). Nach sieben Perioden der ersten Saisonalität ist eine Periode der anderen Frequenz beendet. Dadurch ist ein solches Modell elegant aufteilbar, welches für viele Ansätze das Problem überlagerter Saisonalitäten vereinfacht: Ein komplexes Problem kann in viele einfache Teilprobleme zerlegt werden. Diese Teilprobleme können mit Submodellen gelöst werden, die einfach trainiert werden können und sich oftmals durch eine hohe Genauigkeit auszeichnen. Allerdings sind reale Saisonalitäten nur selten so klar ersichtlich wie in dem 24h – 7 Tage Modell, siehe z.B. Abbildung 2 (3d, 5d, 7h). Trotzdem wird der Absatz von z.B. Socken oder Tastaturen sicherlich einem unterliegenden Muster folgen, da solche Gegenstände periodisch erneut gekauft werden. Aber auch hier gibt es Modelle, welche solche auf Anhieb nicht ersichtlicher Zeitreihen und Saisonalitäten abbilden können (z.B. durch Spektralanalysen mittels der Fouriertransformation). Solche Frequenzanalysen erlauben detaillierte und neue Einblicke in vorliegende Daten und führen häufig zu krummen, überraschenden Saisonalitäten die nicht intuitiv aufteilbar sind, wie etwa ein dreiwöchentlicher Neun-Stunden-Rhythmus.

Wie so häufig sieht die Praxis etwas anders auf als die Theorie. So folgt eine reale Zeitreihe in den seltensten Fällen einem mathematischen Modell haargenau. Es gibt einige typische Herausforderungen bei der Analyse von Zeitreihen, für die es aber standardisierte Verfahren gibt, um mit ihnen umzugehen. Beispiele für solche Stolpersteine sind in der Box aufgeführt:

  • Gängige Herausforderungen bei der Analyse von Datensätzen


    Rauschen
    Rauschen ist ein gängiges Phänomen und tritt auf, wenn der Detailgrad der Darstellung die Kapazität der Daten übersteigt. Beispielsweise hat ein Unternehmen ein sehr konstantes Absatzverhalten an Montagen. Werden jedoch die Absatzzahlen an einer bestimmten Uhrzeit zwischen unterschiedlichen Montagen verglichen, schwanken die Daten möglicherweise stark und weisen damit ein starkes Rauschen auf. Rauschen muss bei dem Training eines Modells ignoriert werden. Eine Methode, Rauschen zu entfernen, ist die Aggregation der Daten. Ignoriert man das Rauschen kann ma zu vollständig irreführenden Schlussfolgerungen gelangen[1]

    Ausreißer
    Ausreißer sind Datenpunkte, die sich außerhalb des dominierenden Verlaufs der Daten befinden. Hier gilt es, sehr vorsichtig zu agieren, denn je nach Fragestellung will man Ausreißer ignorieren oder integrieren. Ein Beispiel: Nehmen wir den negativen Ausreißer, der durch den kurzfristigen Ausfall des Messgerätes entstanden ist. Gilt die Auswertung der Analyse der gemessenen Daten, wird der zu niedrige Wert den korrekt detektierten Daten gleichgestellt und verfälscht so das Ergebnis. Dient die Analyse jedoch dazu, die Qualitätssicherung des Messgerätes zu unterstützen, darf der Ausreißer auf keinen Fall ignoriert werden, sondern ist genau der Datenpunkt, der berücksichtigt werden muss. Generell ist das Ignorieren von Ausreißern heikel, denn man will ja auf keinen Fall alle Daten aus seiner Analyse ausschließen, die nicht zu der eigenen Hypothese passen und somit seine Ergebnisse „schönen“. Für den richtigen Umgang mit Ausreißern gibt es Tests und Richtlinien, an denen man sich orientieren kann. Eine gängige Methode um Ausreißer zu finden, ist die Verwendung eines schematischen Boxplots. Hier wird ein Wert, der um das anderthalbfache des Interquartilabstandes vom Mittelwert abweicht, als Ausreißer gekennzeichnet. Von extremen Ausreißern spricht man ab einer Abweichung von dem dreifachen des Interquartilabstandes[2] .

    Visualisierung von Rauschen und Ausreißern in Datensätzen

    Fehlende Daten
    Fehlende Daten entstehen durch Messausfälle oder unvollständige Angaben. Um ein Modell zu trainieren, in denen Datenpunkte fehlen, können unterschiedliche Methoden angewendet werden. Zum einen können diese Daten komplett ignoriert werden, zum andern können die fehlenden Werte durch Schätzwerte unterschiedlicher Art aufgefüllt werden[3] . Nicht jedes Modell ist in der Lage mit den sogenannten NA (not available) oder NaN (not a number) Daten umzugehen, sodass in diesem Fällen eine Datenbereinigung zwingend notwendig ist.

    Sprünge
    Sprünge sind die häufigste Form von Änderungen in Zeitreihen. Wie der Name schon sagt erhöht oder erniedrigt sich der mittlere Wert der Zeitreihe sprunghaft zu einem bestimmten Zeitpunkt. Meist treten Sprünge durch Änderung der Umgebung auf und haben klar umrissene Begründungen: Erhöhung der Produktionsleistung durch mehr Personal, mehr Förderbänder, Verlust an Produktivität durch Schließung eines Werkes, Umsatzverlust durch reduziertes Werbebudget, usw.. Sprünge müssen bei dem Trainieren eines Modells berücksichtigt werden, sind aber nicht zwangsläufig eine Anomalie. Das Modell muss so flexibel sein, dass es sich an die neue Umgebung anpassen kann.

    Visualisierung von Sprüngen und globalen Trendänderungen in Datensätzen

    Trendänderungen
    Trendänderungen kommen selten vor und beschreiben bleibende Änderungen des unterliegenden globalen Trendmodells. Ursachen hierfür sind häufig Ereignisse von großer Tragweite, beispielsweise eine globale Rezession, ein Austritt aus der EU oder die Wahl eines umstrittenen Regierungsoberhauptes. Häufig ist es schwer zu erkennen, ob es sich um einen langsam ausprägenden Sprung handelt oder ob eine langfristig konstante Änderung des Trends vorliegt. Auch eine sehr lange Saisonalität lässt sich erst nach mehreren Perioden als solche identifizieren, was unter Umständen Jahre dauern kann. In jedem Fall muss ein Modell sich nachträglich und kontinuierlich auf solche Veränderungen anpassen lassen.

Vom Modell zum Algorithmus

Die Eigenschaften der Daten und die daraus resultierende Zeitreihe beeinflussen die Wahl des Modells. Hat man sich für ein Modell entschieden, welches die Daten abbilden soll, kann man einen geeigneten Algorithmus auswählen, der ebenfalls auf die Daten abgestimmt werden muss. Hier sind Fragen zu berücksichtigen wie „Weisen meine fehlende Daten (NAs) auf?“, „Habe ich mehr als eine Saisonalität zu berücksichtigen?“, „Kenne ich die Saisonalität?“ und viele weitere.

Mit Hilfe des Algorithmus wird dann das Modell „trainiert“, also anhand von Trainings- und Testdaten auf eine möglichst hohe Genauigkeit optimiert. Die Algorithmen bietet hierfür viele Einstellungsparameter, welche massiv die unterliegenden Modelle beeinflussen. Um die optimale Parametereinstellung zu finden müssen beispielsweise Kreuzvalidierungen durchgeführt werden, von denen es wiederum unterschiedliche Varianten gibt.

Die Tatsache, dass immer größere Datenmengen verarbeitet und analysiert werden können, resultiert in einer rasanten Entwicklung von Algorithmen und Modellen. Unter Anwendung solcher Bibliotheken lässt sich innerhalb weniger Codezeilen ein komplexes Vorhersagemodell realisieren, welches hohe Genauigkeiten erreichen kann.

Dabei darf aber keinesfalls vergessen werden, dass all diese Lernverfahren keine trivialen Probleme sind, sondern zu den schwierigsten Problemen der Informatik gehören. Nicht zuletzt wird an Zeitreihenvorhersagen seit Jahrzehnten geforscht und immer wieder werden von großen Firmen (z.B. BMW[4] [5] , Twitter[6] , Netflix[7] oder Airbnb[8] ) neue Ansätze verfolgt, welche auf ihre Daten maßgeschneidert sind. Die naive oder schlicht fehlerhafte Anwendung solcher komplexen Algorithmen kann zu schwerwiegenden Fehlinterpretationen von Daten führen. Doch auch mit einfachen Mitteln kann man bereits interessante Informationen aus Zeitreihen gewinnen, wie die folgenden Beispiele veranschaulichen.

Reale Saisonalitäten auf der Sydney Harbour Bridge

Wie viele staatliche Einrichtungen stellt auch das Victoria State Government aus Australien Daten frei zur Verfügung. Die Traffic-Daten der Sydney Harbour Bridge eignen sich großartig um einige in diesem Blogeintrag erwähnte Eigenschaften von Zeitreihenanalysen darzustellen[9] .

Die Daten haben eine stündliche Granularität, sind reale Messpunkte des nach Süden gerichteten Verkehrs und bieten noch weitere Informationen über staatliche Feiertage und Schulferien.

Abbildung 5 zeigt die vollständigen Daten pro Stunde mit Hervorhebung der Schulferien. Sofort fallen folgende Punkte auf:

  1. Der globale Trend ist sehr stabil. Die Daten bewegen sich um 5.000 Autos pro Tag unabhängig von dem Jahr der Messung.
  2. Wir verzeichnen Sprünge in den Daten, wenn Schulferien sind.
  3. Im Juli 2016 führt ein längerfristiger Ausfall des Messgerätes zu fehlenden Daten.
  4. Unterschiedliche Ausprägungen der Peaks weisen auf eine überlagerte Saisonalität hin.
Abbildung 4: Visualisierung der Verkehrsdaten auf der Sidney Harbour Bridge pro Stunde und Tag

Die überlagerte Saisonalität lässt sich durch die Darstellung in feinerer Granularität innerhalb eines verkleinerten Zeitfensters (Abbildung 6) gut erkennen. Durch die veränderte Darstellungen werden die täglichen Saisonalitäten hervorgehoben: Die Rushhour am Vor- und Nachmittag und der Absturz der Verkehrszahlen in der Nacht.

Abbildung 5: Visualisierung der Verkehrsdaten auf der Sidney Harbour Bridge pro Stunde und Tag

Außerdem weist der Abfall der Daten zum Wochenende auf eine wöchentliche Saisonalität hin. Ein erneuter Wechsel der Ansicht veranschaulicht diese Saisonalität: siehe Abbildung 7. Der stärkste Abfall der Verkehrsdaten findet am Sonntag statt, während donnerstags und freitags ein besonders hohes Verkehrsaufkommen vorliegt.

Abbildung 6: Visualisierung der Verkehrsdaten auf der Sidney Harbour Bridge pro Tag

Diese Originalverkehrsdaten zeigen also die Saisonalitäten, die wir bereits in der Theorie angesprochen haben. Diese Saisonalitäten können für eine Vorhersage verwendet werden, ohne das eine weitere Analyse notwendig wäre: Sonntags und in der Nacht ist die Behinderung des Verkehrs am geringsten. Mit dieser Information kann man bereits Reise- oder auch Baustellenplanungen verbessern.

Einfache Trendanalyse anhand der Flugverkehrsdaten der EU

Eurostat, das Statistikportal der Europäischen Union, stellt viele verschiedene Datensätze frei zur Verfügung[10] . Darunter befinden sich Statistiken über das Flugverkehrsaufkommen innerhalb der Europäischen Union inklusive vieler verschiedener Attribute in monatlicher Genauigkeit über viele Jahre[11] .

Abbildung 8 zeigt die Anzahl an kommerziellen Passagierflügen innerhalb der EU für Deutschland, Frankreich, Italien, Spanien und dem Vereinigten Königreich in einer gestapelten Ansicht. Sofort ersichtlich sind die fehlenden Daten zwischen 1998 und 2003, sodass wir im Weiteren nur die Daten ab 2003 betrachten. Außerdem fällt eine jährliche Saisonalität auf. Wir beobachten einen regelmäßigen Anstieg der Flugbewegungen zur Reisezeit im Sommer: man würde hier also einen linearen globalen Trend annehmen.

Abbildung 7: Flugverkehrsaufkommen in der EU. Besonderheiten, wie der Ausbruch des Eyjafjallajökull im März 2010 (rot) und des Grimsvötn im Mai 2011 (grün) haben einen sichtbaren Einfluss auf das Flugverkehrsaufkommen. Andere Anomalien (blaub) können nicht so einfach begründet werden.

Die Ausreißer in den gezeigten Daten können auf die Vulkanausbrüche des Eyjafjallajökull im März 2010 und des Grimsvötn im Mai 2011 zurückgeführt werden. Anhand dieser Information kann man Vorhersagen über den Einfluss von Vulkanausbrüchen unterschiedlicher Intensität auf den Flugverkehr (und dadurch auf Umsatzverluste) vornehmen.

In Abbildung 9 sind die Flugdaten von Deutschland und dem Vereinigten Königreich pro Jahr dargestellt. Die Berechnung einer linearen Trendlinie gehört zu den einfachsten Modellen für Zeitreihenanalysen.

Abbildung 9: Darstellung des Flugverkehrsaufkommen in Deutschland (DE) und dem Vereinigten Königreich (UK) sowie der Summe (gesamt) pro Jahr

Schaut man sich an Stelle der Daten nur die Trendlinien an, würde man von einer stabilen Entwicklung über die Jahre ausgehen, mit einem leicht positiven Trend für Deutschland, der durch den leicht negativen in der UK ausgeglichen wird. Die Darstellung weist jedoch eine klare Trendänderung auf (s. Abbildung 10). In der oberen Abbildung sehen wir, dass wir mit der linearen Regression in dem Zeitraum zwischen 2003 und 2007 einen Trend zu vermehrten Flugbewegungen mit einer hohen Genauigkeit detektiert hätten. Die Trendänderung wurde durch die globale Wirtschaftskrise 2008-2010 verursacht. Also auch hier ein Ereignis mit großer Tragweite. Bis 2015 hat sich der Trend nicht wieder erholt, sodass unser Modell angepasst werden muss.

Abbildung 10: Veranschaulichung einer globalen Trendänderung, von einem klaren positiven Trend (links) zu einem geringer positiven oder gar negativen Trend (rechts).

Unerwartete Ereignisse können Vorhersagen also jederzeit beeinflussen und eine Anpassung des Modells erfordern. Detaillierte Analysen dieser Effekte ermöglichen aber wiederum zukünftige Krisen besser zu beschreiben und abschätzen zu können.

Zusammenfassend

Jedes Modell ist nur so gut wie seine Grundlage: die Daten. Es ist essentiell, dass die Datenqualität und Datenlage entsprechend hochwertig ist. Gleichzeitig steigt der Anspruch an die Performance mit zunehmender Datenmenge. Wie man riesige Datenmengen optimal verwaltet und die Performance der Systeme optimiert, wird von unseren DevOps Experten in Kürze in diesem Blog näher beleuchtet.
Auch können wir gar nicht genug betonen, wie wichtig die explorative Datenanalyse ist. Erst durch ein fundiertes Verständnis für die Daten ist es möglich diese aufzureinigen, das geeignete Modell für die Daten zu wählen und vor allem die Ergebnisse der Analysen zu bewerten.
Sind diese grundlegenden Punkte erfüllt, werden Zeitreihenanalysen zu einem leistungsstarken Werkzeug. Die Analyse vergangener Daten ermöglicht, die Kausalitäten und Prozesse im eigenen Unternehmen besser zu verstehen. Dieses Verständnis wiederum kann zur Vorhersage zukünftiger Ereignisse eingesetzt werden und ermöglicht damit die vorausschauende Unternehmensführung.
Der Einstieg in die computergestützte Analyse ist leicht. Durch ein zunehmendes Angebot an Vorhersage-Algorithmen, Frameworks für Machine- und Deep Learning und umfangreichen Bibliotheken für künstliche Intelligenz kann mit wenigen Codezeilen ein komplexes Training in Gang gesetzt werden und Vorhersagen mit hoher Genauigkeit erreicht werden.
Doch erst durch maßgeschneiderte Lösungen kann ein belastbares System aufgebaut werden, welches zukünftige Verkaufszahlen, Serverauslastung, Verkehrsdaten und vieles andere mit hoher Genauigkeit vorhersagen kann.
Wie genau komplexe Algorithmen für die Zeitreihenanalyse funktionieren, werden wir Data Scientists von den Datadrivers noch dieses Jahr neben weiteren Blogeinträgen behandeln.

 

[1] Beyond Power Calculations: Assessing Type S (Sign) And Type M (Magnitude) Errors; Andrew Gelman and John Carlin; Perspective on Psychological Science; Vol 9, Issue 6, pp641 -651

[2] How Significant Is A Boxplot Outlier?; Robert Dawson; Journal of Statistics Education; Volume 19, Number 2(2011)

[3] Dealing with missing data: Key assumptions and methods for applied analysis; Marina Soley-Bori; Technical Reports No 4, 2013; Boston University School of Public Health

[4] http://www.kdnuggets.com/2016/08/anomaly-detection-periodic-big-datastreams.html

[5] https://medium.com/@ilias/data-science-tricks-simple-anomaly-detection-formetrics-with-a-weekly-pattern-2e236970d77

[6] https://blog.twitter.com/2015/introducing-practical-and-robust-anomalydetection-in-a-time-series

[7] http://techblog.netix.com/2015/02/rad-outlier-detection-on-big-data.htmlairbnb

[8] http://nerds.airbnb.com/anomaly-detection/

[9] http://www.rms.nsw.gov.au/about/corporate-publications/statistics/tracvolumes/aadt-map/index.html#/?z=14&id=SH

[10] http://ec.europa.eu/eurostat/web/main/home

[11] http://ec.europa.eu/eurostat/web/transport/data/database

Keine Kommentare

Hinterlasse einen Kommentar.

Deine E-Mail wird nicht veröffentlicht.

Avatar