cours-2024-2025 | Documents de mes cours pour 2024-2025 | FX Jollois

Premiers éléments de collecte de données sur le web

Nous allons voir ici comment utiliser une API simple pour récupérer des données.

Idée principale

A partir des données de la base SIRENE (et plus particulièrement le fichier StockEtablissement), nous voulons compléter les informations par les coordonnées géographiques via l’API Adresse (guide).

A noter

Lecture du fichier de départ

Pour lire le fichier StockEtablissement, nous utilisons la librarie pandas

import pandas

sirene = pandas.read_csv("StockEtablissement_utf8_1000.csv", nrows = 1000)
sirene

Le dataframe étant trop large, toutes les colonnes ne sont pas affichées. Pour avoir les colonnes contenant l’adresse, nous pouvons sélectionner celles-ci directement, comme ci-dessous par exemple

sirene[["siren", "siret", "numeroVoieEtablissement", "indiceRepetitionEtablissement",
       "typeVoieEtablissement", "libelleVoieEtablissement",
       "codePostalEtablissement", "libelleCommuneEtablissement"]]

Noter la présence de NaN dans les numéros de voie. Pour le prendre en compte, vous pouvez utiliser la fonction isna() de la librairie pandas, permettant de tester si une valeur est NaN.

Pour stocker le résultat, il faut écrire dans un fichier (nous allons garder le format csv).

dataframe.to_csv("export_for_search.csv", index = False)

Récupération de données de l’API Adresse

D’une adresse vers des coordonnées géographiques

A partir d’une adresse (par exemple, le 143 Avenue de Versailles, Paris), nous allons chercher les coordonnées géographiques de ce lieu.

Pour cela, nous avons besoin du package requests (généralement déjà présent).

import requests

adresse = "143+avenue+Versailles+paris"
url = "https://api-adresse.data.gouv.fr/search/"
recherche = url + "?q=" + adresse

reponse = requests.get(recherche)
reponse

Si le résultat est <Response [200]>, c’est que tout est OK. Sinon, se reporter à la liste des erreurs

On peut ensuite récupérer les résultats au format JSON

reponse.json()

Dans notre cas, il y a plusieurs résultats (dans le champs features). Généralement, le premier est celui avec le score le plus élevé.

Interrogation de l’API Adresse par fichier CSV

Comme indiqué sur la page de l’API, il est possible de requêter sur plusieurs adresses, via un fichier CSV.

Pour faire cela en Python, voici comment on peut faire, en partant d’un fichier CSV créé en amont à partir des données SIRENE (voir par exemple export_for_search.csv)

import requests

url = "https://api-adresse.data.gouv.fr/search/csv/"
fichier = open("export_for_search.csv", "rb") # ouverture en lecture ("r") binaire ("b")

r = requests.post(url, files = {"data": fichier})
r.text # contenu du résultat dans un format CSV

Une fois le résultat obtenu, on peut le sauvegarder dans un fichier texte, avec l’extension csv par exemple. Le paramètre encoding permet de gérer l’encodage (UTF-8 est souvent à préférer, pour information).

fichier_resultat = open("export_for_search_results.csv", "w", encoding = "utf-8")
fichier_resultat.write(r.text)
fichier_resultat.close()

Une fois cela fait, on peut importer le résulat dans un DataFrame.

pandas.read_csv("export_for_search_results.csv")

Il ne reste plus qu’à faire correctement la jointure avec le premier fichier pour compléter les informations.

A NOTER

A FAIRE

Ecrire le programme permettant de compléter le fichier complet de la base SIRENE. En sortie, on feut un fichier csv avec l’ensemble des informations présentes dans le fichier original, avec en plus les coordonnées (latitude et longitude).