TP - Modification et nettoyage des données#
Introduction#
Nous allons utiliser des premières expressions pour :
- convertir du texte en date
- remplir les géométries à partir des coordonnées
- nettoyer les valeurs de certains champs (entier)
Modifier la géométrie via une expression#
On va définir les points via la longitude et latitude et une expression :
- On passe la couche
observations
couche en🖊 Édition
- On utilise la calculatrice de champs et on modifie la géométrie via l'expression
Créer une géométrie de type Point depuis une longitude et une latitude
On peut le faire simplement avec make_point
1 |
|
Dans l'interface de la calculatrice :
- Bien cocher
Mise à jour d'un champ existant
. - Choisir dans la liste
<geometry>
pour modifier la géométrie. - Utiliser la bonne expression dans le bloc texte.
- Valider.
On visualise alors les points sur la carte#
Les géométries sont bien créées et correspondent aux coordonnées.
On sauvegarde les données via la disquette de la barre de numérisation !
On transforme un champ texte en Date#
Exemple du champ date_observation
de type texte, qui contient par exemple
un texte 26/06/2013
.
Ce champ a été détecté par QGIS comme une chaîne de caractères (type QString
). On ne peut donc pas réaliser des calculs ou des tris par date.
Pour régler ce souci, on peut utiliser les expressions :
- On crée un nouveau champ
date_obs
de typeDate
via la calculatrice de champ avec :
Convertir du texte en date
1 2 3 |
|
- On obtient bien un nouveau champ
date_obs
: - On supprime le champ
date_observation
- On enregistre l'édition via la disquette
On pourra donc maintenant faire des calculs de date, par exemple l'âge en jours de l'observation, via :
Calculer l'âge d'une date en jours
1 2 3 4 |
|
- Ou tester si la date donnée est bien inférieure ou égale à la date du jour
Tester si une date n'est pas dans le futur
1 2 |
|
Vrai
ou Faux
On nettoie les valeurs des champs avec des entiers#
Les valeurs non entières NAN
, NSP
, Inconnu
, RAS
ne doivent pas
apparaître dans les champs qui attendent des entiers.
On voit dans l'image suivante un extrait de la table attributaire montrant ces valeurs :
On peut appliquer une expression avec la calculatrice de champ sur
tous les champs qui doivent contenir des entiers:
nid_nb_oeuf
, nid_nb_poussin
, nid_nb_immature
, nid_nb_adulte
Soit en remplaçant 'NSP' par NULL
Si on veut seulement remplacer NSP
par du vide NULL
:
- on utilise
trim
pour supprimer les espaces avant et après le texte, - on utilise
replace
qui attend 3 paramètre: le texte source, la valeur à rechercher, la valeur à remplacer, - on utilise
Nullif
qui metNULL
si la valeur dans le 1er paramètre vaut celle du 2ème paramètre.1 2 3 4 5 6 7 8 9 10 11 12
-- On remplace 'NSP' par NULL -- nullif permet de mettre NULL si la valeur vaut le 2ème paramètre Nullif( -- replace remplace une valeur par une autre replace( -- trim permet de supprimer les espaces avant/après trim("nid_nb_oeuf"), 'NSP', '' ), '' )
C'est possible, mais il faut connaître à l'avance toutes les valeurs à nettoyer.
Si on aime les expressions régulières, on peut rendre un peu plus générique le chercher/remplacer :
Soit avec une expression régulière (plus complexe)
Pour remplacer tout ce qui n'est pas un entier en valeur NULL
:
- Utilisation de
CASE ... WHEN ... THEN ... END
pour faire une condition - Utilisation de
trim
pour nettoyer les espaces - Utilisation de
regexp_match
pour remplacer par expression régulière - Conversion en entier via
to_int
1 2 3 4 5 6 |
|
On doit ouvrir la calculatrice de champ et modifier les valeurs pour chacun des
quatre champs nid_nb_oeuf
, nid_nb_poussin
, nid_nb_immature
, nid_nb_adulte
.
Après le premier passage sur le champ nid_nb_oeuf
on peut constater que la donnée
a bien été nettoyée :
Ne pas oublier d'enregistrer la couche
Il faut bien penser à enregistrer les modifications récentes via la disquette puis quitter le mode 🖊 Édition
Modifier le type des quatre champs nettoyés#
On doit maintenant utiliser le Gestionnaire de bases de données pour changer le type
des champs nid_nb_xxxx
de Texte à Entier
On crée d'abord une connexion vers le GeoPackage :
- menu
Couche / Gestionnaire des sources de données
- Onglet
GeoPackage
, boutonNouveau
- Aller chercher le fichier GeoPackage
suivi_donnees_moqueur
et valider.
Ensuite, on ouvre le Gestionnaire de bases de données :
- Dans le panneau de gauche, on double-clique sur
GeoPackage
- Puis sur le nom de la connexion
suivi_donnees_moqueur
qu'on vient de créer - Sur la table
observations
, on ouvre le menu Table > Modifier une table, et on choisit le typeSMALLINT
ouINTEGER
pour les 4 champs - On enregistre
Ensuite, on doit recharger la couche dans QGIS:
- soit on enregistre le projet, on le ferme et on le ré-ouvre
- soit on utilise un clic-droit sur la couche des observations et
Changer la source de données
puis on va chercher le fichierGeoPackage
et la table des observations