De l’API aux pandas – Obtenir des données JSON avec Python – Python en langage clair
Un exemple pratique pour obtenir des données JSON d’une API vers un Pandas DataFrame en Python avec Google Colab et Open Data DC.
Il y a un tonne de données sur le Web et une grande partie existe dans un format spécifique appelé JavaScript Object Notation (JSON). Cependant, bien que JSON est bien adapté pour échanger de grandes quantités de données entre des machines, il n’est pas facile à lire ou à traiter pour les humains D’un autre côté, Python et Pandas sont devenus les outils incontournables pour nous aider à analyser et à visualiser les données. Par conséquent, les chances sont grandes que vous deviez éventuellement JSON à Pandas problème en Python.
Le sujet de JSON en Python avec Pandas est un chemin bien usé; cependant, dans cette histoire, je partage une solution simple qui gère la tâche d’obtenir des données JSON à partir d’un API dans votre Pandas DataFrame. De plus, ma solution représente un Mise à jour des pandas vers json_normalize ainsi que la gestion des avertissements de validation de certificat lors de l’obtention de données sur Internet.
Pour en savoir plus sur le contexte technique de JSON, consultez cet article sur .com.
Dans ce projet, je fais des recherches sur la criminalité à Washington, D.C. et je veux tirer parti des Données ouvertes portail pour approfondir mes recherches. Une fois que j’ai obtenu les données, je peux exécuter des statistiques, créer des visualisations et, espérons-le, apprendre quelque chose qui mérite d’être partagé.
Pour être sûr, nous pouvons facilement télécharger des données au format CSV ou Excel, puis traiter ces données à n’importe quelle fin. Cependant, bien que le téléchargement et ingestion de feuille de calcul fonctionne très bien, nous pouvons effectuer la tâche «get» en une seule étape en lisant les données directement dans un Pandas DataFrame. De plus, je pense que cette méthode se prête mieux à l’automatisation dans le cadre d’un flux de travail ou d’un pipeline de données.
J’exécute ce projet dans Google Colab et vous pouvez passer directement au bloc-notes ci-dessous ou suivre les étapes de cette histoire.
Bien que je décompose le projet en plusieurs étapes, il est vraiment en deux parties.
Tout d’abord, commencez avec une source de données connue (l’URL de l’API JSON) et récupérez les données avec urllib3. Deuxièmement, utilisez Pandas pour décoder et lire les données. Le résultat est un Pandas DataFrame qui est lisible par l’homme et prêt pour l’analyse.
# to handle data retrieval
import urllib3
from urllib3 import request# to handle certificate verification
import certifi# to manage json data
import json# for pandas dataframes
import pandas as pd# uncomment below if installation needed (not necessary in Colab)
#!pip install certifi
Remarque: J’ai récemment appris que pandas.io.json.json_normalize est obsolète. En conséquence, remarquez comment mon projet appelle simplement Pandas.json_normalize. Selon le futur avertissement (copie ci-dessous), le code fonctionnera, mais il est recommandé de passer aux nouveaux éléments.
# example of what not to dofrom pandas.io.json import json_normalize
data = json_normalize(data)>>> FutureWarning: pandas.io.json.json_normalize is deprecated, use pandas.json_normalize instead
# handle certificate verification and SSL warnings
# https://urllib3.readthedocs.io/en/latest/user-guide.html#sslhttp = urllib3.PoolManager(
cert_reqs='CERT_REQUIRED',
ca_certs=certifi.where())
N’ignorez pas les avertissements de certificat. Bien que vous puissiez continuer sans utiliser certifi, vous prenez un risque de cybersécurité inutile. Pour plus, see la documentation urllib3.
# get data from the API
url = 'https://maps2.dcgis.dc.gov/dcgis/rest/services/FEEDS/MPD/MapServer/2/query?where=1%3D1&outFields=*&outSR=4326&f=json'r = http.request('GET', url)
r.status
La production attendue de r.status est code 200 ce qui signifie que tout est D’accord.
# decode json data into a dict object
data = json.loads(r.data.decode('utf-8'))
data
À ce stade, lors de l’impression Les données, le bloc-notes affiche l’intégralité de l’ensemble de données sous la forme d’un dict, essentiellement au format JSON.
Ensuite, après décodage, json.loads nous donne les données dans ce qui est essentiellement, le format JSON. Faites défiler vers le haut et notez comment les données que nous voulons se trouvent sous «fonctionnalités».
D’accord, cette prochaine étape variera pour presque tous les projets, alors prenez le temps d’inspecter attentivement les données. Par exemple, dans cet ensemble de données particulier, les éléments d’intérêt se trouvent sous un niveau appelé «entités».
Il est important de savoir à quoi ressemblent les données, car si je ne sais pas regarder sous traits, alors la trame de données ne contiendra que les en-têtes de niveau supérieur qui sont, pour moi, inutiles. Si vous obtenez un tableau qui ressemble à la capture d’écran suivante, prenez une minute pour inspecter les données – vous êtes probablement proche, mais vous êtes un peu en retrait.
# in this dataset, the data to extract is under 'features'
df = pd.json_normalize(data, 'features')
df.head(10)
Enfin, nous arrivons à la partie décisive du projet – les données sont dans un joli format de tableau dans Pandas.
Pour de nombreux projets de données, il sera nécessaire de gérer les données JSON en Python. Dans cette histoire, j’ai présenté une façon de résoudre le problème avec Google Colab et l’API OpenData de Washington D.C. J’espère que cela vous aidera dans votre projet.
Réflexions ou commentaires? Je serais ravi de vous entendre.
À votre santé,
-Justin
Qu’est-ce que les données ouvertes? Consultez le manuel Open Data sur https://opendatahandbook.org/guide/en/what-is-open-data/
Quoi de neuf avec Google Colab? https://colab.research.google.com
Plus d’informations sur JSON et Pandas: https://towardsdatascience.com/flattening-json-objects-in-python-f5343c794b10
Documentation Pandas: https://pandas.pydata.org/pandas-docs/stable/index.html
Documentation Urllib3: https://urllib3.readthedocs.io/en/1.5/#usage
Python en anglais simple
Vous avez aimé cet article? Si oui, obtenez un contenu plus similaire en abonnement à notre chaîne YouTube!