Skip to content
Snippets Groups Projects
Commit 87e403c8 authored by Gilares Paul's avatar Gilares Paul
Browse files

Edit 4-verif_gps.py

parent 7c855651
No related branches found
No related tags found
No related merge requests found
# 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 pandas as pd
import numpy as np import numpy as np
# Charger le fichier des communes
communes = pd.read_csv( communes = pd.read_csv(
"data/raw/20230823-communes-departement-region.csv", "data/raw/20230823-communes-departement-region.csv",
dtype={'code_commune_INSEE': str} 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) # pour s'assurer que tous les codes INSEE ont bien 5 chiffres
communes['code_commune_INSEE'] = communes['code_commune_INSEE'].str.zfill(5)
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 = [] processed_dates = []
for date in dates: for date in dates:
print(f"Processing data for {date}") print(f"Processing data for {date}")
# Charger les données principales input_path = f"data/processed/Filtre{date}.csv"
input_path = "data/processed/Filtre"+date+".csv" # à modifier output_path = "data/processed/Filtre{date}_gps_corrected.csv"
output_path = "data/processed/Filtre"+date+"_gps_corrected.csv" # Nouveau fichier de sortie # à modifier
data = pd.read_csv(input_path, dtype={'inseecommune': str}) 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) # même vérif que pour la table communes
data['inseecommune'] = data['inseecommune'].str.zfill(5)
# 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 north_lat, south_lat = 52, 40
west_lon, east_lon = -5, 10 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') 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)) 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 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']], data = data.merge(communes[['code_commune_INSEE', 'latitude', 'longitude']],
left_on='inseecommune', right_on='code_commune_INSEE', how='left') 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_x'].fillna(data['latitude'], inplace=True)
data['coord_y'].fillna(data['longitude'], inplace=True) data['coord_y'].fillna(data['longitude'], inplace=True)
# Supprimer les colonnes inutiles après fusion
data.drop(columns=['latitude', 'longitude'], inplace=True) data.drop(columns=['latitude', 'longitude'], inplace=True)
# Sauvegarde dans un **nouveau fichier**
data.to_csv(output_path, index=False, float_format="%.6f") 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}.")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment