JSON-Daten mit Python herunterladen

In den bisherigen Tutorials ging es um CSV- und um Excel-Dateien. Jetzt ist JSON an der Reihe. Ziel ist es, JSON-Daten herunterzuladen und zu visualisieren.

Wie auch in den anderen Beispielen zuvor, stammen die Daten von der Stadt Kiel. Diesmal geht es um die Anzahl der in Kiel zugelassenen Autos. Die Originaldaten liegen jedoch nur im CSV-Format vor:

https://www.kiel.de/de/kiel_zukunft/statistik_kieler_zahlen/open_data/index.php?id=de-sh-kiel_anzahl_fahrzeuge

Deswegen haben ich die Zahlen, die lediglich die Autos betreffen, mithilfe von Node.js zum Download bereitgestellt. Die Adresse lautet

https://xern-statistic.de/api/cars

In diesem Tutorial stelle ich hinsichtlich des Herunterladens der Daten zwei Wege vor, zum einen die Verwendung des Moduls requests, zum anderen den Weg über Pandas.

Das Modul requests nutzen

import requests
from pprint import pprint

URL = 'https://ploenerseite.de/api/cars'

def fetchJsonData(url):
    try:
        response = requests.get(url)
    except OSError:
        print('No connection to the server!')
        return None

    # check if the request is successful
    if response.status_code == 200:
        print('Status 200, OK')
        return response.json()
    else:
        print('JSON data request not successful!.')
        return None

json_data = fetchJsonData(URL)
pprint(json_data)

Zusätzlich zu requests wird hier pprint importiert, da hierüber (anstelle von print()) eine übersichtlichere Ausgabe der Daten ermöglicht wird.

Die Funktion fetchJsonData(url) leistet dann die eigentliche Arbeit. Zunächst wird überprüft, ob überhaupt eine Verbindung zum Server möglich ist:

response = requests.get(url)

Wenn das der Fall ist, wird überprüft, ob der Server den Status-Code 200 (für ‘OK’) übermittelt:

if response.status_code == 200:
        print('Status 200, OK')
        return response.json()

Trifft auch das zu, dann werden die Daten schließlich ausgegeben:

pprint(json_data)

Pandas nutzen

Die Bibliothek Pandas stellt die Methode read_json() bereit. Als Parameter akzeptiert sie eine URL, so dass folgende Zeile ausreicht, um die Daten herunterzuladen:

df = pd.read_json(URL, orient='columns')

Die ersten zehn Zeilen könnte man sich dann mit head() anzeigen lassen:

df.head(10)

Der übrige Code zur Visualisierung mithilfe von Matplotlib entspricht dem Code meiner bisherigen Beispiele, auf die hiermit verwiesen sei (siehe “Weiterführende Links” weiter unten).

Den vollständigen Code gibt es – wie bisher auch – als Jupyter Notebook auf Github.

Weiterführende Links