Kategorien
Data Technik

Daten und Statistiken anzeigen

Daten und Statistiken sind wichtige Werkzeuge, um Wissen zu vermitteln und Aussagen zu bekräftigen. Natürlich kann man sie auch ein klein wenig frisieren, womöglich rührt der Sinnspruch: „Traue keiner Statistik, die du nicht selbst gefälscht hast“ von einem tiefen Misstrauen in die bunten Linien, die meistens Dinge zu sagen scheinen, die von Vortragenden gerade gewünscht sind.

Aufgrund einer beruflichen Veränderung werde ich mich in Zukunft mehr mit Zahlen, Daten und Statistiken beschäftigen dürfen: Interessante Aufgaben, die große Freude auslösen. Nur: die Daten wollen erfasst und präsentiert werden und ehrlicherweise sind die Werkzeuge, die ich bisher genutzt habe, aus dem Internet verschwunden oder schlicht nicht mehr zeitgemäß.

Um ein paar einfache Zahlen zu visualiseren, muss ich mit diesen Tehmen neu befassen und möchte dich mit auf die Reise nehmen. Am Ende dieses Artikels solltest du alle Werkzeuge an der Hand haben, um strukturierte Daten speichern zu können und einfache Graphen darzustellen.

Der große Plan

Nach einer kurzen Recherche sind die Eckdaten klar und ich installiere meinen Leib- und Magenserver unter Debian in der neuesten Fassung. Hinzu kommen Apache Airflow und MongoDB. Am Ende sollen alle Daten vollautomatisch auf dieser Seite angezeigt werden, hier hilft Javascript.

Hoffentlich sind die Brocken nicht zu groß…

… denn problematisch ist, dass ich weder Python, Apache Airflow noch MongoDB beherrsche und die nötigen Skills nicht mal eben lernen kann. Ich scheitere bereits an den Einführungsbeispielen und nach einem verbrannten Tag ist der Plan der vollautomatischen Verarbeitung der Daten von der Quelle bis zur Statistik auf die Formel zusammen gedampft: Erst mal die Daten manuell importieren, Datenbank, Anbindung und das Frontend in Schuss bringen.

Apache Airflow und folglich auch Python fliegen damit vorerst raus. Ich möchte meine Arbeitspakete überschaubar halten und noch eine neue Programmiersprache möchte ich mir derzeit auch nicht draufschaffen. Insbesondere auf ein völlig neues Ökosystem drumherum kann ich verzichten.

Das Ziel

Bezüglich Frontend bleibe ich bei meinem Plan, die Daten hübsch aufbereitet für Webseiten zu generieren. Quelle meiner Auswertungen bleibt dabei MongoDB.

Der Vorteil dieser Strategie:

  • Javascript und dessen mordsmäßige Dokumentation. Hier solltest du bereits ein wenig Erfahrung oder wenigstens einen Kurs abgeschlossen haben, du weißt also, was fetch, then und arrays sind und wie man damit umgeht.
  • MongoDB, eine dokumentbasierten Datenbank, welche Ergebnisse als json-Dokumente (Javascript Objekte) zurückliefert. Die Verzahnung mit Javascript ist hoch und die Einstiegshürden überschaubar.
  • Für MongoDB gibt es einen kostenlosen Account mit 512 MB Daten und vielen Aktionen kostenlos. Für die ersten Gehversuche ist das mehr als genug.
  • Die Anforderungen für den Webserver sind gering: Dort müssen PHP-Skripte hochgeladen und ausgeführt werden können. Für die Umsetzung der erforderlichen Skripte sind nur ein paar Kenntnisse in PHP notwendig.

Die Besuchenden benötigen einen Browser und als Anbieter benötigen wir:

Lade…
Anzahl der Erkrankungen an CoViD-19 pro Tag, BRD

Bei der Gestaltung von Webseiten, möchten Autoren nicht mit Code kämpfen und Programmierer interessiert meist nichts weniger, als die Schriftart, die gerendert werden soll.

Die Daten sollen daher möglichst einfach einzubinden sein, damit sich jeder Experte auf sein Gebiet konzentrieren kann:

<figure>
  <!-- Um die Graphen zu zeichnen, wird ein canvas benötigt -->
  <canvas class="marker covid historic bund">Lade...</canvas><br>
    <figcaption>Anzahl der Erkrankungen an CoViD-19 pro Tag, BRD</figcaption>
  <script src="/includes/chart.js"></script>
  <script src="/includes/covid.js"></script>
  <script>loadCovidDataRkiHistoric(0, ".marker.covid.historic.bund");
  </script>
</figure>

Anbieter

Quellen und Server, die man für erste Gehversuche verwenden kann, sind schnell beschafft. Covid ist in aller Munde, daher gibt es jede Menge Daten beim RKI und dem Open-Data-Hub von Esri. Beide Seiten bieten Dateien direkt zum Download.

Verlässt man sich auf Daten von Dritten, bleibt der Aufwand für die Erhebung der Daten außen vor, auch Aggregation und Auswertung sind in den obigen Datenquellen bereits erledigt. Das Internet strotzt nur so von weiteren Datenquellen, mal mehr oder weniger gut aufbereitet. Wenn du bereit für neue Statistiken bist, gewinne neue Erkenntnisse für deine Besuchenden. Beachte im Zweifel immer Urheberrechte und Lizenzen dieser Daten.

Als Datenbank bietet sich MongoDB aus technischen Gründen an, außerdem gibt es kostenlosen Speicherplatz in der Cloud. Mit dieser Option spart man ordentlich Zeit für die Installation einer eigenen Lösung. Wer mehr Speicher oder Rechenleistung benötigt, kann eine Schüppe Geld in Richtung des Anbieters werfen, oder doch noch eine eigene Installation einrichten.

Stolpersteine

Bevor du dich auf die Beispiele im Internet stürzt, solltest du feststellen, welche Funktionen dein Webserver unterstützt. Die Anforderungen sind glücklicherweise gering, aber zumindest PHP ist notwendig, um an die Daten auch ranzukommen.

Neben den technischen Anforderungen solltest du auch darauf achten, dass deine Besucher keine Verbindung mit anderen Servern aufnehmen müssen, insbesondere nicht mit Servern, die nicht in der EU stehen.

Datenschutz

Für rein private Webseiten ist die DSGVO grundsätzlich kein Problem, solange nur die Schwiegermutter und die Neffen ein paar Familienfotos herunterladen. Sobald aber Werbung geschaltet wird, Geld fließt oder auf das eigene Gewerbe verwiesen wird, kann ein Verstoß elendig teuer werden.

Den Datenschutz generell einzuhalten, sprengt den Rahmen dieses Artikels, kurz gesagt wollen wir keine Daten unserer Besucher an andere Websites ausleiten. Die Ausleitung von Besucherdaten passiert sehr schnell „nebenbei“, wenn beispielsweise Daten von anderen Servern als dem eigenen heruntergeladen werden müssen.

Da die Daten unserer Statistik auf MongoDB gespeichert sind, muss ein Aufruf in Richtung der Server von mongodb.com erfolgen. Der einfachste, schnellste und billigste Weg wäre es, wenn der Browser der Besuchenden diese Daten einfach selbst holt. Problematisch ist dabei nur, dass Besuchende auf diesem Wege persönliche Daten wie zum Beispiel die IP-Adresse preisgeben müssen, damit dieser Transfer funktioniert. Ohne Einwilligung ist eine solche Preisgabe nicht erlaubt und selbst mit Einwilligung zumindest problematisch, denn die Server stehen in Übersee.

Cross-Origin-Request

Außerdem würde der Browser der Besuchenden versuchen, Daten von Atlas zu laden. Da Atlas nicht mehr die Quelle der Website ist wäre das ein (Cross-Origin-Request), was nicht trivial ist.

Die Lösung kann daher nur lauten: Der eigene Server sucht die Daten zusammen, tritt gegenüber allen Beteiligten als Intermediär – aus Sicht der Besuchenden als einzige Kontaktstelle – auf.

Die Struktur

Schön ist es, wenn alle Daten in einer Datenbank gespeichert sind. Nur, wollen wir auch wieder drankommen, insbesondere, wenn noch schöne Linien daraus gemacht werden wollen. Da mein Server kein MongoClient oder MongoDB beherrscht, muss ich mich mit HTTPS-Endpoints zufriedengeben – soviel vorweg.

Das bedeutet, ich muss innerhalb von Atlas Funktionen anlegen und über HTTPS nach außen freigeben. Mein Webserver ruft die Daten aus den HTTPS-Endpunkten ab, und leitet das Ergebnis an den Browser der Besuchenden weiter. Dort wird dann der Graph gezeichnet.

Datenaufruf durch den Server: Besuchende müssen nicht mehrere Server kontaktieren. Auf diese Weise sind personenbezogene Daten besonders geschützt, denn sie werden gar nicht erst herausgegeben.
Datenschutz oder Performance

Die Daten über den Webserver zu laden, hat mehrere Nachteile, die in einem höheren Ressourcenverbrauch münden. Werden Statistikdaten über den eigenen Webserver von MongoDB heruntergeladen, muss auch der Webserver Datenverkehr, Speicher und Rechenzeit aufwenden. Das wird problematisch, sobald mehrere Statistiken geladen werden oder der Traffic deiner Seite größer wird.

Was kann der Server

Um zu prüfen, ob deine Website überhaupt PHP verarbeitet, erstellst du eine minimalistische Datei mit der Endung .php und dem folgenden Inhalt:

<?php
    echo phpinfo();
?>

Diese Datei lädst du dann auf deine Website hoch und siehst dir das Ergebnis an. Erscheint eine Übersicht wie unten, ist PHP installiert und funktionsfähig. Um herauszufinden, ob und welcher Client für MongoDB installiert ist, reicht eine kurze Suche nach „mongo“.

Für meine Website war ich ein wenig zu geizig, daher kann ich auf die installierten Module keinen Einfluss nehmen und muss mit dem arbeiten, was ich habe. Den MongoDB-Client für PHP nutzen wir im Folgenden daher nicht.

Ausgabe von phpinfo(): Auf dieser Website ist PHP installiert und funktioniert.
Öffentliche phpinfo()

Die Ausgabe von phpinfo() bietet hilfreiche Informationen für Hacker. Es ist kein Risiko per se, werden die Informationen hieraus preisgegeben. Bei bekannten Schwachstellen lassen sich solche Seiten über spezielle Suchmaschinen finden und die Webseite wird womöglich deshalb vorrangig angegriffen. Die Datei solltest du daher entweder löschen, oder zumindest unlesbar machen.

Schreibe einen Kommentar