Skip to main content
100%

Récupération des stations quotidiennes depuis les données Météo France

✓ Published0🌍 Public
TThomasG77
Last edited Apr 8, 2024
Created on Apr 8, 2024

This visualization maps the locations and operational periods of daily weather stations across France, using data from Météo France. The map depicts each station as a point, colored or sized to indicate when it was active. The example retrieves station URLs from the data.gouv.fr API, filters for rainfall, temperature, and wind data, then uses pandas to concatenate CSVs and compute the earliest and latest observation dates per station. The resulting dataset is converted into a GeoJSON file with geopandas, with geometries created from latitude and longitude coordinates.

AI-generated description

Récupération des stations quotidiennes depuis les données Météo France

import json
import urllib.request
from glob import glob
import pandas as pd
import geopandas

dataset_id = '6569b51ae64326786e4e8e1a'
url = f'https://www.data.gouv.fr/api/1/datasets/{dataset_id}/'

with urllib.request.urlopen(url) as resp:
    json_content = json.load(resp)

urls = [resource.get('url') for resource in json_content.get('resources') if 'RR-T-Vent' in resource.get('url') and resource.get('type') != 'documentation']

mydict = {}
for url, dep in [[url, url.split('/')[-1].split('_')[1]] for url in urls]:
    if dep not in mydict:
        mydict[dep] = []
    mydict[dep].append(url)

for dep,values in mydict.items():
    frames = [pd.read_csv(url, compression='gzip', sep=';', quotechar='"') for url in values]
    df = pd.concat(frames)
    stations = df[['NUM_POSTE', 'NOM_USUEL', 'LAT', 'LON', 'ALTI', 'AAAAMMJJ']]
    stations['AAAAMMJJ'] = pd.to_datetime(stations['AAAAMMJJ'], format = '%Y%m%d')
    stations['MIN_DATE'] = stations.groupby(['NUM_POSTE'])['AAAAMMJJ'].transform('min')
    stations['MAX_DATE'] = stations.groupby(['NUM_POSTE'])['AAAAMMJJ'].transform('max')
    stations.drop(columns=['AAAAMMJJ'], inplace=True)
    stations.reset_index().drop_duplicates('NUM_POSTE').drop(columns=['index']).to_csv(f'stations-RR-T-Vent-dep-{dep}.csv', index=False)

files_stations_rr_t_vent = glob('stations-RR-T-Vent-dep-*.csv')
frames_stations_rr_t_vent = [pd.read_csv(input_file) for input_file in files_stations_rr_t_vent]
df_stations_rr_t_vent = pd.concat(frames_stations_rr_t_vent)
gdf_stations_rr_t_vent = geopandas.GeoDataFrame(
    df_stations_rr_t_vent, geometry=geopandas.points_from_xy(df_stations_rr_t_vent.LON, df_stations_rr_t_vent.LAT), crs="EPSG:4326"
)
gdf_stations_rr_t_vent.to_file('stations_rr_t_vent.geojson', driver='GeoJSON')

Similar vizzes