Neben der täglichen Zahl der Corona-Neuinfektionen ist auch die Zahl der Menschen, welche sich wegen Covid-19 in intensivmedizinischer Behandlung befinden, ein wichtiger Indikator für Entwicklung der Corona-Pandemie in Deutschland. Diese API stellte die jeweils aktuelle Zahl der Covid-19-Intensivpatienten sowie die Zahl der verfügbaren Intensivbetten bereit.
- Datenübersicht: https://www.intensivregister.de/#/aktuelle-lage/downloads
- Deutschland (Zeitreihe): https://diviexchange.blob.core.windows.net/%24web/zeitreihe-deutschland.csv
- Bundesländer (Zeitreihe): https://diviexchange.blob.core.windows.net/%24web/zeitreihe-bundeslaender.csv
Das DIVI-Intensivregister ist eine wichtige Datenquelle für verschiedene Indikatoren zur Auslastung des Krankenhaussystems durch die Corona-Pandemie. Seit dem 16. April 2020 sind alle relevanten Krankenhäuser zur täglichen Meldung an das Intensivregister verpflichtet. Die „Deutsche Interdisziplinären Vereinigung für Intensiv- und Notfallmedizin“, kurz DIVI, ist für die Verwaltung und Aufbereitung dieser Daten zuständig.
Für die API verwenden wir die Zeitreihen-Übersicht des DIVI-Intensivregisters. Diese Ansicht bietet Diagramme zu vier verschieden Indikatoren, welche jeweils für Deutschland und die sechzehn Bundesländern bereitgestellt werden. Die Diagramme werden mit dem Diagramm-Tool Datawrapper erstellt, woraus die Daten extrahiert werden: https://www.intensivregister.de/#/aktuelle-lage/zeitreihen
Die Daten des Intensivregister können nach vorheriger Absprache und unter Verwendung des Quellenhinweis „DIVI-Intensivregister“, zumindest für journalistische Zwecke, frei verwendet werden.
Für die Verwendung der Daten in Apps und interaktiven Grafiken (Datawrapper) stellen wir einen API bereit, die das Abfragen der DIVI-Daten aus dem Register „Zeitreihen“ nach bestimmten Parametern ermöglicht.
URL: https://europe-west3-brdata-corona.cloudfunctions.net/diviApi/
Welche Daten abgefragt werden können mit einem sogenannten Query-String festgelegt werden. Ein Beispiel dafür wie das funktioniert gibt es weiter unten.
Der Parameter area
ist verpflichtend und legt fest, für welches Gebiet Daten zurückgegeben werden sollen:
DE
: DeutschlandBW
: Baden-WürttembergBY
: BayernBE
: BerlinBB
: BrandenburgHB
: BremenHH
: HamburgHE
: HessenMV
: Mecklenburg-VorpommernNI
: NiedersachsenNW
: Nordrhein-WestfalenRP
: Rheinland-PfalzSL
: SaarlandSN
: SachsenST
: Sachsen-AnhaltSH
: Schleswig-HolsteinTH
: Thüringen
Der Parameter indicator
ist verpflichtend und legt fest, welcher Indikator abgefragt werden soll:
Meldebereiche
: Anzahl meldender MeldebereichePatienten
: Anzahl gemeldeter intensivmedizinisch behandelter COVID-19-FälleBettenstatus
: Gesamtzahl gemeldeter Intensivbetten (Betreibbare Betten und Notfallreserve)Bettenanteil
: Anzahl gemeldeter intensivmedizinisch behandelter COVID-19-Fälle an Anzahl belegter IntensivbettenBetriebssituation
: Anzahl der Intensivbereiche nach gemeldeter BetriebssituationIntensivkapazitäten
: Anzahl der freien betreibbaren Behandlungskapazitäten zur invasiven Beatmung
Der Parameter filetype
ist optional und legt fest in welchem Format die Daten zurückgegeben werden sollen:
json
(default): JavaScript Object Array (JSON)csv
: Tabelle (CSV)
Anzahl der Covid-19-Intensivpatienten (indicator=Patienten
) in Bayern (area=BY
) als CSV-Tabelle (filetype=csv
) abfragen:
https://europe-west3-brdata-corona.cloudfunctions.net/diviApi/query?area=BY&indicator=Patienten&filetype=csv
Die Abfrage liefert einen Liste aller verfügbaren Daten zum gewählten Indikator und Gebiet:
date,faelleCovidAktuell
"2020-10-30T11:15:00.000Z",179
"2020-10-29T11:15:00.000Z",167
"2020-10-28T11:15:00.000Z",147
"2020-10-27T11:15:00.000Z",129
"2020-10-26T11:15:00.000Z",122
...
"2020-03-24T11:15:00.000Z",123
"2020-03-23T11:15:00.000Z",94
"2020-03-22T11:15:00.000Z",82
"2020-03-21T11:15:00.000Z",67
"2020-03-20T11:15:00.000Z",61
Eine Abfrage ohne den Parameter filetype=csv
würde die gleichen Daten im JSON-Format liefern:
[
{ "date": "2020-10-30T11:15:00.000Z", "faelleCovidAktuell": 179 },
{ "date": "2020-10-29T11:15:00.000Z", "faelleCovidAktuell": 167 },
{ "date": "2020-10-28T11:15:00.000Z", "faelleCovidAktuell": 147 },
{ "date": "2020-10-27T11:15:00.000Z", "faelleCovidAktuell": 129 },
{ "date": "2020-10-26T11:15:00.000Z", "faelleCovidAktuell": 122 },
// ...
{ "date": "2020-03-24T11:15:00.000Z", "faelleCovidAktuell": 123 },
{ "date": "2020-03-23T11:15:00.000Z", "faelleCovidAktuell": 94 },
{ "date": "2020-03-22T11:15:00.000Z", "faelleCovidAktuell": 82 },
{ "date": "2020-03-21T11:15:00.000Z", "faelleCovidAktuell": 67 },
{ "date": "2020-03-20T11:15:00.000Z", "faelleCovidAktuell": 61 }
]
Die Namen und Anzahl der Attribute, hier faelleCovidAktuell
, sind vom jeweils gewählten Indikator abhängig.
- Repository klonen
git clone https://...
- Erforderliche Module installieren
npm install
- Entwicklungsserver starten
npm watch
Um die Module installieren und die Entwicklerwerkzeuge nutzen zu können, muss vorher die JavaScript-Runtime Node.js installiert werden. Informationen für Entwickler finden sich weiter unten.
Welche Datawrapper-Diagramme – und damit auch welche Daten – von der Seite des Intensivregister verwendet werden sollen, wird in der Datei charts.json
festgelegt. Hier ein Beispiel für das Diagramm und die Daten der Intensivpatienten in Deutschland:
{
"chartId": "WvhXR",
"indicator": "Patienten",
"area": "Deutschland",
"areaId": "DE"
}
Die chartId
ist die jeweilige ID des Datawrapper-Diagramms, aus der die Daten extrahiert werden sollen. Der indicator
bezeichnet die Art der Statistik und die areaId
gibt an für welches Land die Daten gelten. Die area
ist moment nur ein dekoratives Attribut für Menschen die sich nicht alle Bundeslandkürzel merken können.
Diese Anleitung geht davon aus, dass bereits ein Google Cloud-Konto vorhanden und ein Rechnungskonto eingerichtet ist. Außerdem sollte das Google Cloud-Kommandzeilenwerkzeug installiert und mit einem Benutzerkonto verknüpft sein.
Neues Projekt mit der ID brdata-corona
erstellen. Der Parameter --name
ist optional.
$ gcloud projects create brdata-corona --name=30-BRData-corona
Das Projekt als aktuelles Arbeitsprojekt festlegen:
$ gcloud config set project brdata-corona
Google Cloud Function für das aktuelle Projekt aktivieren:
$ gcloud services enable cloudfunctions.googleapis.com
Rechenzentrum europe-west3 (Frankfurt) als Ziel für das Funktions-Deployment festlegen:
$ gcloud config set functions/region europe-west3
Seit neuestem muss zudem Google Cloud Build aktiviert werden:
& gcloud services enable cloudbuild.googleapis.com
API-Funktion deployen: In diesem Beispiel wird der nicht authentifizierte Zugriff von außerhalb erlaubt, um den Datenaustausch zwischen API und beispielsweise einer Web-App zu ermöglichen:
$ gcloud functions deploy diviApi --runtime=nodejs10 --trigger-http --allow-unauthenticated
Um das Skript index.js
lokal zu testen, verwendet man am besten das Google Functions Framework. Das Functions Framework kann mit dem Befehl npm run watch
gestartet werden. Das hat den Vorteil, dass das Skript jedes Mal neu geladen wird, sobald man Änderungen am Code vornimmt.
Man kann das Functions Framework aber auch manuell installieren und ausführen:
$ npm i -g @google-cloud/functions-framework
Funktion diviApi starten:
$ functions-framework --target=diviApi
API-Anfrage stellen (Beispiel):
$ curl -X GET 'http://localhost:8080?area=BY&indicator=Patienten'
- Daten nach Datum filterbar machen (Parameter
date
)