Code Monkey home page Code Monkey logo

2020-rki-archive's Introduction

RKI-Corona-Daten-Archiv

Worum geht es?

Das RKI veröffentlicht täglich die gemeldeten Coronafälle in einer Tabelle, aufgeschlüsselt u.a. nach Meldedatum, Alter, Geschlecht, Landkreis etc.

Diese Daten liegen unter einer offenen, mit CC-BY kompatiblen Lizenz vor: Robert Koch-Institut, dl-de-by-2.0

Leider werden die alten Versionen dieser Daten täglich überschrieben. Das hat zur Folge, dass man bspw. nicht den Verzug zwischen Erkrankungsbeginn und Veröffentlichung analysieren kann, was aber zentral z.B. für eigene Nowcasting-Berechnungen ist.

Daher sammeln wir alte Datei-Versionen und stellen sie online ebenfalls unter RKI dl-de-by-2.0 zur Verfügung. Per Scraper versuchen wir das Archiv täglich aktuell zu halten. Als Feature bereinigen wir sogar die Daten, um z.B. die Probleme mit den unterschiedlichen Datumsformaten zu korrigieren.

Daten

Wo sind die Daten zu finden?

  • Die Rohdaten werden täglich im Ordner 0_archived ergänzt und im Anschluss hier als HTML-Datei oder wahlweise als TXT-Datei chronologisch sortiert aufgelistet.
  • Fehlerhafte Rohdaten werden nach 1_ignored verschoben, z.B. wenn durch technische Probleme nur Teile der CSV-Datei zum Download standen: HTML/TXT
  • Gesäuberte Daten werden täglich unter 2_parsed hochgeladen und sind hier aufgelistet als HTML oder TXT

Welches Format haben sie?

Da die Datenmenge sehr stark angewachsen ist und einzelne Dumps über 500 MB groß werden können, so dass die 1-GB-Stringlängenbegrenzung von JavaScript überschritten wird, musste auf ein neues Datenformat umgestiegen werden. Die Dateien liegen jetzt vor:

  • als NDJSON (jede Zeile ist ein Eintrag, als JSON-Objekt formatiert und endet auf '\n') und
  • mit XZ-Utils komprimiert (XZ/LZMA ist sehr effektiv, open-source, kostenlos, plattformübergreifend erhältlich und wird von vielen Kompressionsprogrammen unterstützt)

Datenfelder

Die Datenfelder sind vom RKI auf der ArcGIS-Plattform erklärt.

Es hat sich aber gezeigt, dass insbesondere die Datumsfelder in einem schlechten Zustand sind. Neben unterschiedlichen Datumsformaten, gibt es sogar Infektionsfälle aus dem Jahr 1956. Der Parser korrigiert die gröbsten Fehler und ergänzt die Datensätze um die Felder MeldedatumISO, DatenstandISO und RefdatumISO, die das jeweilige Datum immer in der ISO-Form "YYYY-MM-DD" formatieren.

Hier noch eine kurze Erklärung, warum Fallzahlen negativ sein können.

Ansonsten haben wir uns bemüht darauf zu achten, keine Fehler zu machen. Falls uns trotzdem einer unterlaufen ist, freuen wir uns über Hinweise.

Diese Daten sind natürlich keine offizielle Veröffentlichung des RKI oder der ARD, sondern eine freundliche Unterstützung für Forschung und Recherche. Offizielle Daten gibt es nur beim RKI.

Verzeichnis /bin/

Der Code läuft aktuell nur unter UNIX-Betriebssystemen, also z.B. Linux/Mac OS. Er dient dem Scrapen und Säubern der Daten.

  • bin/1_download.js überprüft all 10 Minuten, ob das RKI die Daten aktualisiert hat, und lädt sie ggf. runter.
  • bin/2_deduplicate.sh löscht doppelte Dateien, also wenn es keine Änderungen an den Daten gab.
  • bin/3_parse.js parst die API-/CSV-Rohdaten und macht daraus sauberes und einheitliches JSON.
  • bin/4_check.js führt Plausibilitätschecks durch. Z.B. darf die Anzahl aller bisherigen Infektionen nicht sinken, aber auch nicht um mehr als 30'000 ggü. dem Vortag steigen..
  • bin/5_index_data.js generiert HTML- und TXT-Listen als Hilfe for den Cloud Storage.
  • bin/6_upload.sh lädt die Daten in den Cloud Storage hoch. Ich bin offen für Vorschläge, wohin die Dateien noch gesichert werden können.
  • bin/run.sh ist das Bash-Script für einen kompletten Scraper-Durchlauf.
  • bin/loop.sh enthält eine Endlosschleife, die alle 10 Minuten einen Scraper-Durchlauf initiiert.
  • bin/lib/config.js enthält einen Überblick über alle Felder, inklusive einfacher Tests, ob die Felder richtig befüllt sind.
  • bin/lib/helper.js sind die kleinen Helferlein, die man so braucht.

Beispiele

Den neuesten Datenstand als "latest.ndjson.xz" runterladen:

curl "https://storage.googleapis.com/brdata-public-data/rki-corona-archiv/2_parsed/index.txt" | tail -n 1 | xargs -I % wget -O latest.ndjson.xz "https://storage.googleapis.com/brdata-public-data/rki-corona-archiv/2_parsed/%"

Alle Dateien runterladen:

wget -nc -r -np -l 1 -A xz https://storage.googleapis.com/brdata-public-data/rki-corona-archiv/2_parsed/index.html

Die gesäuberten Daten aus 2_parsed kann man relativ leicht auf der Shell parsen und filtern. Beispiel:

xz -dkc *.ndjson.xz | jq -r '. | select (.IdLandkreis == "09162" and .Altersgruppe == "A05-A14") | [.Geschlecht, .AnzahlFall, .NeuerFall, .MeldedatumISO, .DatenstandISO, .RefdatumISO] | @tsv'

Der Befehl besteht aus den folgenden Teilen:

  • xz -dkc *.ndjson.xz |
    Dekomprimiere alle Dateien (-d), die auf .ndjson.xz enden und pipe die Ergebnisse (-c) weiter.
  • jq -r ''
    Mit jq kann man sehr effizient JSON verarbeiten. Die Query- und Filtermöglichkeiten sind gut dokumentiert.
  • . | select (.IdLandkreis == "09162" and .Altersgruppe == "A05-A14") | [.Geschlecht, .AnzahlFall, .NeuerFall, .MeldedatumISO, .DatenstandISO, .RefdatumISO] | @tsv'
    Alle bekannten COVID19-Fälle aus dem Stadtkreis München (.IdLandkreis == "09162"), mit Patient_innen im Schulalter (.Altersgruppe == "A05-A14") sollen als Tab-separierte Datei (| @tsv) exportiert werden, mit den 6 Spalten: Geschlecht, AnzahlFall, NeuerFall, MeldedatumISO, DatenstandISO, RefdatumISO

2020-rki-archive's People

Contributors

michaelkreil avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.