diff --git a/src/4-verif_gps.py b/src/4-verif_gps.py index 53b6ce345e280a3a399e7af627cf172cdf5def4b..928ce289d4678a4132dba76f4469fdc2086d63ff 100644 --- a/src/4-verif_gps.py +++ b/src/4-verif_gps.py @@ -1,55 +1,50 @@ +# Les coordonnées de certains prélèvements étaient soit : +# - manquantes => on les ajoute grâce à une base de donnée des communes trouvée sur data.gouv (mais du coup ce n'est pas les coordonnées du point de prélèvement mais de la ville en général) +# - inversées => on les réinverse +# Cette étape n'est réalisée "que" maintenant car elle est assez couteuse et donc il est préférable de la réaliser sur des données plus petites (donc après les différents filtrages). +# Les coordonnées gps ne nous servent pas directement dans l'application finale mais elles seront cruciales pour une version améliorée de l'app, descendant l'analyse jusqu'à la maille de la commmune. + import pandas as pd import numpy as np -# Charger le fichier des communes communes = pd.read_csv( "data/raw/20230823-communes-departement-region.csv", dtype={'code_commune_INSEE': str} ) -# Assurer que les codes INSEE ont bien 5 caractères -communes['code_commune_INSEE'] = communes['code_commune_INSEE'].str.zfill(5) +communes['code_commune_INSEE'] = communes['code_commune_INSEE'].str.zfill(5) # pour s'assurer que tous les codes INSEE ont bien 5 chiffres -dates = ["20" + str(i).zfill(2) for i in range(18, 24)] +dates = ["20" + str(i).zfill(2) for i in range(18, 25)] processed_dates = [] for date in dates: print(f"Processing data for {date}") - # Charger les données principales - input_path = "data/processed/Filtre"+date+".csv" # à modifier - output_path = "data/processed/Filtre"+date+"_gps_corrected.csv" # Nouveau fichier de sortie # à modifier + input_path = f"data/processed/Filtre{date}.csv" + output_path = "data/processed/Filtre{date}_gps_corrected.csv" data = pd.read_csv(input_path, dtype={'inseecommune': str}) - # Assurer que les codes INSEE ont bien 5 caractères - data['inseecommune'] = data['inseecommune'].str.zfill(5) + data['inseecommune'] = data['inseecommune'].str.zfill(5) # même vérif que pour la table communes - # Définition des limites géographiques de la France métropolitaine à la louche + # Limites géographiques de la France métropolitaine (prises un peu plus larges) north_lat, south_lat = 52, 40 west_lon, east_lon = -5, 10 - # Remplacer les valeurs non valides par NaN pour uniformiser les types data[['coord_x', 'coord_y']] = data[['coord_x', 'coord_y']].apply(pd.to_numeric, errors='coerce') - # 🔹 Correction de la logique d’inversion : on ne swap que si c'est manifestement inversé swap_mask = (data['coord_x'].between(west_lon, east_lon)) & (data['coord_y'].between(south_lat, north_lat)) - # Appliquer l'inversion uniquement aux lignes détectées data.loc[swap_mask, ['coord_x', 'coord_y']] = data.loc[swap_mask, ['coord_y', 'coord_x']].values - # Fusionner avec les coordonnées des communes pour compléter les NaN data = data.merge(communes[['code_commune_INSEE', 'latitude', 'longitude']], left_on='inseecommune', right_on='code_commune_INSEE', how='left') - # Remplacer les NaN dans `coord_x` et `coord_y` avec les valeurs des communes data['coord_x'].fillna(data['latitude'], inplace=True) data['coord_y'].fillna(data['longitude'], inplace=True) - # Supprimer les colonnes inutiles après fusion data.drop(columns=['latitude', 'longitude'], inplace=True) - # Sauvegarde dans un **nouveau fichier** data.to_csv(output_path, index=False, float_format="%.6f") - print(f"✅ Correction rapide terminée pour {date}. Fichier sauvegardé sous : {output_path}") + print(f"Correction des coordonnées terminée pour {date}.")