Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nettoyage et augmentation des données #2

Open
1 of 6 tasks
KyllianBeguin opened this issue Mar 7, 2024 · 40 comments
Open
1 of 6 tasks

nettoyage et augmentation des données #2

KyllianBeguin opened this issue Mar 7, 2024 · 40 comments
Assignees
Labels
augmentation De la data sur de la data ! nettoyage Une bonne donnée est une donnée propre !

Comments

@KyllianBeguin
Copy link
Collaborator

KyllianBeguin commented Mar 7, 2024

❓ Contexte

Après avoir exploré nos données, nous avons dressé un ensemble de constats concernant la qualité des données. De ces constats, il faut mettre en place un flux de nettoyage et d'augmentation des données, ainsi que les charger dans une base qui servira d'entrant pour l'application de visualisation.

🧐 Objectifs

  1. Nettoyer les données
  2. Augmenter les données
  3. Les charger dans une base mariadb

💪 ToDo

  • Mettre en place une infra pour gérer la partie traitements de données
  • Définir les nettoyages à mettre en place
  • Définir les augmentations à mettre en place
  • Mettre en place un script de nettoyage
  • Mettre en place un script d'augmentation
  • Charger les données sortantes dans la base de données
@KyllianBeguin KyllianBeguin self-assigned this Mar 7, 2024
@florianeduccini

This comment was marked as outdated.

@KyllianBeguin KyllianBeguin added nettoyage Une bonne donnée est une donnée propre ! augmentation De la data sur de la data ! labels Mar 7, 2024
@KyllianBeguin

This comment was marked as outdated.

@tgazagnes

This comment was marked as outdated.

@florianeduccini

This comment was marked as outdated.

@florianeduccini

This comment was marked as outdated.

@KyllianBeguin

This comment was marked as off-topic.

@tgazagnes

This comment was marked as off-topic.

@KyllianBeguin

This comment was marked as off-topic.

@KyllianBeguin

This comment was marked as off-topic.

@florianeduccini

This comment was marked as resolved.

@KyllianBeguin

This comment was marked as outdated.

@KyllianBeguin

This comment was marked as off-topic.

@Mendi33
Copy link
Collaborator

Mendi33 commented Mar 28, 2024

Hello.
Pour l'onglet ACTIONS, j'ai besoin du fichier export_events_14032024.xlsx (dispo sur le sharepoint)

J'ai déjà fait le nettoyage :

  • Filtre les évènements annulés (champ ANNULE)
  • Remplacement des NaN par 0 dans le niveau de caractérisation (champ NIVEAU_CARAC)
  • Conversion des types des champs:
    • NIVEAU_CARAC (int)
    • DATE (datetime)
  • Clean et split des string du champ COORD_GPS_RDV et création des champs:
    • COORD_GPS_X
    • COORD_GPS_Y
  • Suppression des champs inutiles:
    • REFERENT_STRUCTURE
    • TELEPHONE_STRUCTURE
    • COURRIEL_STRUCTURE
    • COORD_GPS_RDV
    • ANNULE
  • Sauvegarde dans le fichier export_events_cleaned.csv pour utilisation dans les dashboards.

Questions :
Est-ce je met mon script à la suite dans cleaning.py ou je créer le mien ?

@KyllianBeguin

This comment was marked as resolved.

@Mendi33 Mendi33 mentioned this issue Mar 31, 2024
Mendi33 added a commit that referenced this issue Mar 31, 2024
…augmentation des données.

Ajout des fichiers dans le répertoire 'data' :
export_events_14032024.xlsx
export_events_cleaned.xlsx
@KyllianBeguin

This comment was marked as resolved.

@linh-dinh-1012
Copy link
Collaborator

Bonjour,

Je voulais signaler une petite coquille dans le fichier data_zds_enriched.csv. Sur la ligne où ID_RELEVE == 404, le LIEU_VILLE est indiqué comme Monaco.. J'ai vérifié les coordonnées GPS fournies et elles correspondent effectivement à Monaco, et non à la France.

@tgazagnes
Copy link
Collaborator

tgazagnes commented Apr 3, 2024

Hello,
Pour les besoins d'ergonomie dans les filtres géographiques, j'ai créé deux nouvelles colonnes qui concatenent le numéro INSEE et le nom de l'entité géographique (ex : 13 - Bouches du Rhône). C'est plus facile de s'y retrouver lorsqu'on cherche parmi les 100 départements.
Si on valide le besoin pour tous les onglets, ça vaut le coup de l'ajouter dans les transfo amont ?

df_other["DEP_CODE_NOM"] = df_other["DEP"] + " - " + df_other["DEPARTEMENT"]

df_other["COMMUNE_CODE_NOM"] = df_other["INSEE_COM"] + " - " + df_other["commune"]

@Mendi33
Copy link
Collaborator

Mendi33 commented Apr 4, 2024

Re,
Concernant l'ajout des colonnes EPCI, Bassin de vie, ... dans nos 3 fichiers (data_zds, events et structures).
Je me demandai s'il ne serait pas plus judicieux de faire une seule fonction pour le faire dans nos 3 fichiers ?

@florianeduccini
il faudrait renommer les colonnes de coordonnées GPS comme dans le fichier data_ZDS mais je ne sais pas s'il y a d'autres colonnes à prendre en compte ?

@florianeduccini
Copy link
Collaborator

Hello @Mendi33,
Si complètement !
J'attends de set up mon ordi avec mage et j'utiliserai la même brique pour les 4 pipelines :)

@florianeduccini

This comment was marked as resolved.

@KyllianBeguin

This comment was marked as off-topic.

@KyllianBeguin
Copy link
Collaborator Author

J'ai corrigé quelques coquilles dans des blocks
157e576 : le nom de la colonne GPS_X est changé 2 fois, alors que la GPS_Y 0. Donc GPS_Y → latitude
f5d737a : maj des tableaux en entrés pour garder une cohérence avec l'autre pipeline cleaning. La doc est également maj pour spécifier l'ordre des tableaux

@KyllianBeguin
Copy link
Collaborator Author

KyllianBeguin commented Apr 21, 2024

Il semblerait qu'une colonne ne passe pas dans l'export.

  • J'ai filtrer sur deux colonnes seulement dans cleaning/structures/drop_useless_columns
    • Mon filtre : data = data[["NOM_structure", "TYPE"]]
  • Le block d'export n'a pas changé
  • cf le 📷 SCREENSHOT
    • Les autres colonnes sont présentes puisque l'erreur que nous avons n'empêche pas leur création
Les types de colonnes 👇
COLONNE          TYPE

ID_STRUCT        int64
NOM_structure    object
SOUS_TYPE        object
TYPE             object
ADRESSE          object
CODE_POSTA       float64
DEPT             object
REGION           object
DATE_INSCR       object
ACTION_RAM       int64
A1S_NB_SPO       int64
CARACT_ACT       int64
CARACT_NB_       int64
CARACT_N_1       int64
CARACT_N_2       int64
CARACT_N_3       int64
longitude        float64
latitude         float64
index_righ       int64
ID               object
COMMUNE          object
NOM_M            object
INSEE_COM        object
STATUT           object
POPULATION       int64
INSEE_CAN        object
INSEE_ARR        object
INSEE_DEP        object
INSEE_REG        object
SIREN_EPCI       object
dep              object
reg              int64
epci             object
nature_epc       object
libepci          object
departemen       object
region           object

En fait, on dirait qu'il essaye de charger un truc qui est dataframe...

@KyllianBeguin
Copy link
Collaborator Author

KyllianBeguin commented Apr 21, 2024

J'ai testé d'exporter les colonnes une à une et ça fonctionne.

Le code pour reproduire le résultat 👇
@data_exporter
def export_data_to_mysql(df: DataFrame, **kwargs) -> None:
  """
  Template for exporting data to a MySQL database.
  Specify your configuration settings in 'io_config.yaml'.

  Docs: https://docs.mage.ai/design/data-loading#mysql
  """
  
  table_name = "data_structures"  # Specify the name of the table to export data to
  config_path = path.join(get_repo_path(), "io_config.yaml")
  config_profile = "default"
  import pandas as pd
  from time import sleep
  for col in df.columns:
      print(col)
      with MySQL.with_config(ConfigFileLoader(config_path, config_profile)) as loader:
          loader.export(
              pd.DataFrame({col: df[col]}),
              None,
              table_name,
              index=False,  # Specifies whether to include index in exported table
              if_exists="replace",  # Specify resolution policy if table name already exists
          )
      sleep(1)
      print(" ")

En regardant le Dataframe, j'ai constaté :

  • La région est présente en deux colonnes REGION et region
    • Même nom = potentiel impact sur l'insertion ?
    • Garder une seule colonne ?
  • Les codes regions sont les mêmes entre INSEE_REG et reg
    • Garder une seule colonne ?
  • Le département est présent en trois colonnes DEPT, departemen et INSEE_DEPT
    • Garder une seule colonne ?
  • L'EPCI est présent en deux colonnes SIREN_EPCI et epci
    • Garder une seule colonne ?

Vu que tu es dessus @florianeduccini, est-ce que tu gères ces observations ? Ou est-ce que j'interviens ?

@florianeduccini
Copy link
Collaborator

@KyllianBeguin : je regarde ça et je te dis dès que j'arrive à exporter :)

@KyllianBeguin
Copy link
Collaborator Author

KyllianBeguin commented Apr 22, 2024

To do :
Exploration_visualisation/data/export_events_14032024.xlsx:

  • Reformater la date en français
  • Faire un champs "Date affichée" (Affichage en français de la data, exemple Lundi 22 Avril 2024)

@florianeduccini
Copy link
Collaborator

@KyllianBeguin : on est d'accord que sur ta TODO c'est lorsqu'on intègrera le cleaning de l'export d'events dans mage?

@florianeduccini
Copy link
Collaborator

Hello,
Je viens de prendre en compte les modifications sur la pipeline de cleaning des structures.
Je n'ai gardé que les colonnes nécessaires.
L'export fonctionne bien.
Je n'ai par contre pas pu tester de relancer la pipeline de cleaning des ramassages parce que le code tourne pendant des heures sur Mage sans me donner d'erreurs...

@KyllianBeguin
Copy link
Collaborator Author

Je n'ai par contre pas pu tester de relancer la pipeline de cleaning des ramassages parce que le code tourne pendant des heures sur Mage sans me donner d'erreurs...

Est-ce sur tout le pipeline ? Ou juste sur un block ?

@KyllianBeguin : on est d'accord que sur ta TODO c'est lorsqu'on intègrera le cleaning de l'export d'events dans mage?

Exactement ! Le cleaning de l'export est dans le backlog, on anticipe juste les traitement à appliquer 😃

@florianeduccini
Copy link
Collaborator

Je n'ai par contre pas pu tester de relancer la pipeline de cleaning des ramassages parce que le code tourne pendant des heures sur Mage sans me donner d'erreurs...

Est-ce sur tout le pipeline ? Ou juste sur un block ?

Les deux, j'ai lancé au global puis juste un block qui aurait du mettre 10 secondes à tourner et au bout de 10 minutes j'ai du couper.

@KyllianBeguin
Copy link
Collaborator Author

Ok, pcq y les blocks qui traitent les données géographiques sont longs à se lancer ^^

@KyllianBeguin
Copy link
Collaborator Author

KyllianBeguin commented Apr 24, 2024

Histoire d'anticiper la migration des sources de données de l'appli, je vous propose de faire le listing des sources actuelle et le mapping vers les table de la bdd.
Cela nous permettra aussi d'avoir une idée de ce qui doit faire tourner l'appli


SCRIPT-STAGING FILE-BRANCH FILE-PATH FILE-NAME
🏠 2 /Exploration_visualisation/data/ data_zds_enriched.csv
🏠 4 /Exploration_visualisation/data/ structures_export_cleaned.csv
🏠 2 /Exploration_visualisation/data/ data_releve_nb_dechet.csv
🏠 2 /Exploration_visualisation/data/ export_events_cleaned.csv
🔎 1 /Exploration_visualisation/data/ dict_dechet_groupe_materiau.csv
🔥 2 /Exploration_visualisation/data/ data_releve_nb_dechet.csv
🔥 2 /Exploration_visualisation/data/ data_zds_enriched.csv
🔥 1 /Exploration_visualisation/data/ regions-avec-outre-mer.geojson
🔥 1 /Exploration_visualisation/data/ departements-avec-outre-mer.geojson
🔥 1 /Exploration_visualisation/data/ communes-avec-outre-mer.geojson
🔥 1 /Exploration_visualisation/data/ communes-avec-outre-mer.geojson
🔥 1 /Exploration_visualisation/data/ releves_corrects_surf_lineaire.xlsx
🔥 1 /Exploration_visualisation/data/ export_structures_29022024.xlsx
🔭 - - -
👊 - - -

Les scripts sont ceux du staging :
🏠 home.py
👊 actions.py
🔎 data.py
🔥 hotspots.py
🔭 structures.py

@KyllianBeguin
Copy link
Collaborator Author

Vu dans la PR #20 : Il faudra faire migrer la fonction process_data dans le flux pour alléger l'appli

@KyllianBeguin
Copy link
Collaborator Author

KyllianBeguin commented May 25, 2024

Pour s'assurer que tous les fichiers sont bien migrés, je vous propose ce tableau :

FILE-NAME PIPELINE-NAME TABLE-NAME IS-COMPLETE
structures_export_cleaned.csv
export_events_cleaned.csv
dict_dechet_groupe_materiau.csv
data_releve_nb_dechet.csv cleaning (data_enriched, nb_dechets)
data_zds_enriched.csv cleaning (data_enriched, nb_dechets)
regions-avec-outre-mer.geojson
departements-avec-outre-mer.geojson
communes-avec-outre-mer.geojson
releves_corrects_surf_lineaire.xlsx
export_structures_29022024.xlsx

@florianeduccini
Copy link
Collaborator

Hey !
Super oui on sera plus au clair :)
Tu es sûr qu'il faille structures_export_cleaned ET export_structures_29022024?
Et sinon je suis en train d'essayer de mettre les données géographiques en base, ça remplacera régions_avec_outre_er, departements_xx et communes_xx

@KyllianBeguin
Copy link
Collaborator Author

Tu es sûr qu'il faille structures_export_cleaned ET export_structures_29022024?

J'ai repris le tableau de référencement des jeux de données présents dans l'appli, qui comprends les deux fichiers.
En les laissant, on va pouvoir plus facilement changer les deux fichiers dans l'appli en mettant la même table d'export structure :)

@KyllianBeguin
Copy link
Collaborator Author

Hello 👋 je déterre cette issue !
Je vais avancer sur le sujet des traitement de données, en se focalisant sur les données à traiter en priorité pour MerTerre.
L''idée est d'avancer en tandem avec ce qui est fait côté #28

@KyllianBeguin
Copy link
Collaborator Author

KyllianBeguin commented Dec 17, 2024

Salut, j'ai upgrade la version de geopandas (0.14.4) dans la #37 pour mage. La version 0.14.3 a des problèmes avec fiona, une bibliothèque utilisée par geopandas. N'hésitez pas à faire aussi l'upgrade dans le requirements.txt :)

Edit : on est en 1.0.1 👇

@KyllianBeguin
Copy link
Collaborator Author

Salut, j'ai mis à jour la structure du repo. Il faut maintenant travailler directement dans le dossier zds.
Pour lancer uniquement mage, la base de donnée et adminer : docker compose -f docker-compose-dev.yml up -d --build mage db adminer
🔴 Attention : il faut setup les mots de passe. Il faut créer deux fichiers .mysql_root_password et .mysql_merterre_password dans le dossier zds/backend/db

@KyllianBeguin
Copy link
Collaborator Author

Salut, la version 0.14.4 de geopandas fait planter le block cleaning/geo_dataframe/make_geo_df du pipeline cleaning.
Pour corriger cela, j'ai upgrade geopandas en 1.0.1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
augmentation De la data sur de la data ! nettoyage Une bonne donnée est une donnée propre !
Projects
None yet
Development

When branches are created from issues, their pull requests are automatically linked.

6 participants