Exemple de téléchargement de données par l'API EDR¶
Import des librairies
import requests
import pandas as pd
import xarray as xr
import seaborn as sns
import matplotlib.pyplot as plt
Récupération des informations
url_service='https://api.geosas.fr/edr/collections/safran-isba/'
r=requests.get(url_service)
data_info=r.json()
if r.status_code == 200:
print("requete ok")
else :
print("erreur code :", r.status_code)
requete ok
Affichage de l'identifiant (name) du parametre
for parametre in data_info['parameter_names']:
name=list(parametre.keys())[0]
print(name)
print(parametre[name]['description'])
DRAINC_Q Drainage (cumul quotidien 06-06 UTC) ETP_Q Evapotranspiration potentielle (formule de Penman-Monteith) FF_Q Vent (moyenne quotidienne) PRELIQ_Q Précipitations liquides (cumul quotidien 06-06 UTC) PRENEI_Q Précipitations solide (cumul quotidien 06-06 UTC) SSI_Q Rayonnement atmosphérique (cumul quotidien) TINF_H_Q Température minimale des 24 températures horaires TSUP_H_Q Température maximale des 24 températures horaires T_Q Température (moyenne quotidienne)
Exemple pour une coordonnées xy¶
On veut télécharger les températures moyennes du mois de juillet 2022 au point de coordonnées X=349598 Y=6798263 en projection Lambert 93 (EPSG:2154) au format CoverageJson
param_name='T_Q'
coord='POINT(349598 6798263)'
projection='EPSG:2154'
formatage='CoverageJSON'
date='2022-07-01/2022-07-31'
requete=f'https://api.geosas.fr/edr/collections/safran-isba/position?coords={coord}&crs={projection}¶meter-name={param_name}&f={formatage}&datetime={date}'
print(requete)
r=requests.get(requete)
data=r.json()
if r.status_code == 200:
print("requete ok")
else :
print("erreur code :", r.status_code)
https://api.geosas.fr/edr/collections/safran-isba/position?coords=POINT(349598 6798263)&crs=EPSG:2154¶meter-name=T_Q&f=CoverageJSON&datetime=2022-07-01/2022-07-31 requete ok
Mise dans une dataFrame
date_value=data['domain']['axes']['t']['values']
values=data['ranges'][param_name]['values']
print("Exemple de date pour définir le format:",date_value[0])
Exemple de date pour définir le format: 2022-07-01T00-00-00Z
df=pd.DataFrame()
df[param_name]=values
df['date']=pd.to_datetime(date_value, format='%Y-%m-%dT%H-%M-%SZ')
display(df)
T_Q | date | |
---|---|---|
0 | 15.400000 | 2022-07-01 |
1 | 17.100000 | 2022-07-02 |
2 | 16.100000 | 2022-07-03 |
3 | 16.100000 | 2022-07-04 |
4 | 16.799999 | 2022-07-05 |
5 | 18.700001 | 2022-07-06 |
6 | 18.400000 | 2022-07-07 |
7 | 20.100000 | 2022-07-08 |
8 | 22.000000 | 2022-07-09 |
9 | 22.700001 | 2022-07-10 |
10 | 24.799999 | 2022-07-11 |
11 | 26.700001 | 2022-07-12 |
12 | 25.600000 | 2022-07-13 |
13 | 20.700001 | 2022-07-14 |
14 | 20.900000 | 2022-07-15 |
15 | 23.100000 | 2022-07-16 |
16 | 26.299999 | 2022-07-17 |
17 | 30.900000 | 2022-07-18 |
18 | 24.100000 | 2022-07-19 |
19 | 21.000000 | 2022-07-20 |
20 | 20.000000 | 2022-07-21 |
21 | 18.100000 | 2022-07-22 |
22 | 20.400000 | 2022-07-23 |
23 | 23.400000 | 2022-07-24 |
24 | 20.299999 | 2022-07-25 |
25 | 18.900000 | 2022-07-26 |
26 | 17.700001 | 2022-07-27 |
27 | 20.500000 | 2022-07-28 |
28 | 22.500000 | 2022-07-29 |
29 | 21.700001 | 2022-07-30 |
30 | 22.200001 | 2022-07-31 |
Exemple de plot avec récupération de métadonnées utiles
for parametre in data_info['parameter_names']:
name=list(parametre.keys())[0]
if name==param_name:
unit=parametre[name]['unit']['label']
description=parametre[name]['description']
break
sns.lineplot(data=df,x='date',y=param_name)
plt.xticks(rotation=45)
plt.title(description)
plt.ylabel(unit)
Text(0, 0.5, 'degrée Celcius')
Exemple pour récuperer un cube de données sur une zone¶
Je veux télécharger l’évapotranspiration potentielle, les précipitations liquides et la température de 2020 à 2023 pour l’ensemble de la Bretagne définie géographiquement par son coin inférieur gauche (X=90000,Y=6693915) et son coin supérieur droit (X=410874,Y=6902748) en projection Lambert 93 (EPSG:2154), au format NetCDF :
param_name='ETP_Q,PRELIQ_Q,T_Q'
box='90000,6693915,410874,6902748'
projection='EPSG:2154'
formatage='NetCDF4'
date='2020-01-01/2023-12-31'
requete=f'https://api.geosas.fr/edr/collections/safran-isba/cube?bbox={box}&crs={projection}¶meter-name={param_name}&f={formatage}&datetime={date}'
print(requete)
r=requests.get(requete)
if r.status_code == 200:
print("requete ok")
else :
print("erreur code :", r.status_code)
https://api.geosas.fr/edr/collections/safran-isba/cube?bbox=90000,6693915,410874,6902748&crs=EPSG:2154¶meter-name=ETP_Q,PRELIQ_Q,T_Q&f=NetCDF4&datetime=2020-01-01/2023-12-31 requete ok
Lecture du fichier reçu par xarray
data=xr.open_dataset(r.content)
data
#Si l'on veut continuer en utilisant pandas :
#df = data.to_dataframe
<xarray.Dataset> Dimensions: (time: 1461, y: 27, x: 38) Coordinates: * time (time) datetime64[ns] 2020-01-01 2020-01-02 ... 2023-12-31 * x (x) float64 1.103e+05 1.183e+05 ... 3.981e+05 4.061e+05 * y (y) float64 6.903e+06 6.895e+06 ... 6.703e+06 6.695e+06 Data variables: ETP_Q (time, y, x) float32 ... PRELIQ_Q (time, y, x) float32 ... T_Q (time, y, x) float32 ... spatial_ref int32 ... Attributes: description: Données quotidiennes du modèle de simulation des schémas de... id: safran-isba title: Safran-Isba, Données changement climatique - SIM quotidienne crs: EPSG:2154 rel: https://www.etalab.gouv.fr/licence-ouverte-open-licence/
Visualisation des attributs d'un parametère
data.PRELIQ_Q.attrs
{'description': 'Précipitations liquides (cumul quotidien 06-06 UTC)', 'observedProperty': 'http://opendata.inrae.fr/thesaurusINRAE/c_11627', 'type': 'Parameter', 'unit': 'mm', 'unit label': 'millimetre'}
Température moyenne sur toute la période
data.T_Q.mean('time').plot()
<matplotlib.collections.QuadMesh at 0x7f7a92fb6370>
data.T_Q.plot.hist()
(array([ 1313., 22168., 85326., 195592., 255735., 233217., 138281., 33697., 5620., 616.]), array([-5.5 , -1.67999995, 2.1400001 , 5.96000004, 9.78000069, 13.60000038, 17.42000008, 21.23999977, 25.06000137, 28.88000107, 32.70000076]), <BarContainer object of 10 artists>)
Valeur moyenne sur toute la période
print(data.T_Q.mean().data)
12.471629
Exemple de filtre
data1=data.sel({'time':slice("2022-07-01","2022-07-31")})
data1.PRELIQ_Q.sum('time').plot.hist()
plt.title("Répartition de la somme des précipitations liquides par maille safran en Bretagne en juillet 2022")
Text(0.5, 1.0, 'Répartition de la somme des précipitations liquides par maille safran en Bretagne en juillet 2022')