Développement d’un script python pour faire une différence de moyenne sur une période donnée
Fonctionnement général du script
La comparaison des données d’analyse pour mettre en lumière l’évolution de paramètres était jusqu’à présent effectué à la main [3]. C’est une procédure longue, fastidieuse et qui comporte un risque d’erreur non négligeable. Certaines manipulations ont directement lieu dans les tables originales, ce qui constitue un risque de corruption des données en cas d’erreur. Grâce à la programmation d’un outil spécifique, il est possible d’accélérer le processus, libérant du temps au chercheur pour se concentrer sur des tâches importantes à sa recherche. L’objectif de cet outil est de pouvoir comparer l’évolution d’un paramètre entre deux périodes de temps. L’évolution des paramètres du sol n’est pas la même en fonction de la profondeur d’échan-tillonnage. Ainsi, l’utilisateur doit pouvoir choisir si l’analyse concerne les échantillons prélevés dans le sol (2 – 20 cm) ou dans le sous-sol (20 – 40 cm). L’utilisateur doit pouvoir choisir deux intervalles de temps durant lesquels la moyenne des mesures d’un paramètre choisi seront calculées pour chaque surface agricole. Ensuite, la différences des moyennes pour chaque surface agricole dans les deux intervalles est calculée. Le résultat de ce calcul est mis en rela-tion avec la couche des surfaces agricoles, dans le but de pouvoir être visualisé sur une carte.
Afin de préserver les données originales de tout risque de corruption, tout traitement de données doit être réalisé dans des tables séparées, créés pour l’occasion. De plus, l’affichage de la différence des moyennes sera réalisé dans une nouvelle couche et non directement dans la couche des surfaces agricoles. Cela permet de supprimer ou de conserver plus facile-ment des données calculées, sans risque de supprimer par inadvertance des données de la table d’origine. Cette dernière ne s’alourdit pas de nombreuses données à chaque fois que l’outil est utilisé.
Représentation schématique du fonctionnement de l’outil
Sur le diagramme ci-dessous, nous pouvons visualiser le fonctionnement général de l’outil.
Présentation d’un ModelBuilder simplifié
Une version simplifiée du processus de traitement des données en vue de l’étude de la comparaison d’un paramètre de qualité du sol dans le temps a été réalisée grâce au Model-Builder, voir illustration 14. Cette version simplifiée était destinée à des tests divers afin, par exemple, de vérifier le bon enchaînement des outils et les paramètres généraux nécessaires. Ce ModelBuilder a été sauvegardé dans la boite à outils « Cartographie-sol » qui contient aussi l’outil, comme décrit à la page 32. Le ModelBuilder peut servir de base pour le dévelop – pement d’un tout autre outil de traitement des données d’analyses de sol ou permettre à une personne de modifier l’enchaînement et les outils pour répondre à une éventuelle autre ques-tion de recherche qui n’a pour l’instant pas été formulée. Il est en effet plus simple et plus rapide de modifier un ModelBuilder que de modifier un script python. Cela est vrai lorsque le ModelBuilder n’est pas souvent utilisé. Dans le cas contraire, le temps total de préparation du ModelBuilder pour le faire fonctionner de multiples fois devient vite plus long que de déve-lopper un script dédié. Le risque d’erreur par les multiples opérations manuelles est aussi diminué, par contre les possibilités sont limitées par les connaissances de la personne du langage de programmation python.
Il faut noter que ce ModelBuilder simplifié joint le résultat du traitement des données directe-ment dans la couche des surfaces agricoles originale, ce qui peut constituer un risque de perte de données, par exemple lors d’opérations manuelles de suppression de champs acci-dentelles. Il convient donc de l’utiliser avec soin et de veiller particulièrement à bien supprimer les champs voulus lors de nettoyages de la table de la couche.
Comparaison du script par rapport au ModelBuilder
Il y a plusieurs avantages à utiliser un script plutôt qu’un ModelBuilder. Les deux principaux sont, une fois l’écriture du script terminée, la grande rapidité et la simplicité d’exécution. De plus, si le script a été correctement écrit, il va effectuer une série d’actions sans erreur, ce qui n’est pas toujours évitable lors d’un travail manuel.
Le script offre plus de souplesse et permet aisément d’effectuer certaines opérations qui sont tout simplement impossibles ou très compliquées avec le ModelBuilder. Par exemple, dans le script réalisé lors de ce travail, les noms de champ ainsi que noms de couches sont automati-quement nommés en fonction du paramètre de qualité de sol observé, de la profondeur d’échantillonnage et des intervalles de temps choisis par l’utilisateur. Cela ne serait pas facile-ment réalisable dans le ModelBuilder et nécessiterait des manipulations par l’utilisateur.
Un des désavantages du script est qu’il n’est réalisable que par une personne qui a déjà une certaine expérience de la programmation ainsi que du langage python. En effet, dans le contexte professionnel, un utilisateur inexpérimenté n’aura que peu, voir pas de temps prévu par son employeur pour développer ces connaissances.
Un autre désavantage est le temps qu’il faut consacrer à l’écriture du code, aux divers tests, au débugage, à la création de l’interface de saisie des paramètres et à la rédaction de l’aide. Il n’est donc pas rentable de réaliser un script pour des opérations effectuées ponctuellement.
Description des outils utilisés dans le script python
Pour arriver au résultat escompté, il est nécessaire de mettre en œuvre différents outils dispo-nibles dans ArcGIS. Ici, les outils seront brièvement décrits en fonction de leur utilisation dans le script, pour plus d’informations sur leur fonctionnement détaillé, il convient de consulter l’aide en ligne d’ArcGIS [4]. Cette aide contient toutes les informations nécessaires au fonc-tionnement des outils ainsi que des exemples d’utilisation en langage de programmation python. Tous les outils disponibles dans la « ArcToolbox » sont aussi disponibles en tant que fonctions python, c’est la raison pour laquelle les scripts sont développés dans ce langage de programmation.
Pour plus d’informations sur l’utilisation de ces fonctions, voir la présentation du code, au point suivant.
Présentation du code
Dans cette section, nous verrons plus en détail le code python qui permet de réaliser une nouvelle couche qui montre l’évolution d’un paramètre choisi entre deux intervalles de temps. Bien que le script soit commenté comme il se doit, dans cette section, les commentaires et les messages ont été enlevé pour faciliter la lecture et se concentrer sur l’essentiel du code. Le code complet est visualisable en annexe 2.
La première étape est de définir les options de base pour le script. Premièrement, il s’agit de déclarer l’encodage des caractères :
# -*- coding: utf-8 -*-
Il faut ensuite importer la librairie arcpy, autoriser l’écrasement de fichiers :
import arcpy
arcpy.env.overwriteOutput = True
Les premiers paramètres saisis par l’utilisateur sont introduits, à savoir l’environnement (la géodatabase) et la table en entrée (la table des analyses de sol) :
arcpy.env.workspace = arcpy.GetParameterAsText(0)
InTable = arcpy.GetParameterAsText(1)
La table des analyses définie, nous devons y effectuer une sélection grâce à l’outil « TableTo-Table ». Un certain nombre de paramètres doivent donc être déclarés. Il faut déclarer les dates du premier intervalle de temps et la profondeur d’échantillonnage souhaitée. On remarque le numéro d’index de la profondeur qui n’est pas dans la continuité de numérotation, cela est explicable par le fait que la sélection de la profondeur a été implémentée dans un deuxième temps alors que le script et d’autres paramètres étaient déjà définis. Cela n’influe en rien l’exécution du code.
date_1 = arcpy.GetParameterAsText(2)
date_2 = arcpy.GetParameterAsText(3)
prof = arcpy.GetParameterAsText(7)
Il faut aussi rédiger l’expression qui permettra d’effectuer la sélection dans la table. Cette expression est fournie comme paramètre pour l’outil « TableToTable », il est obligatoire de la fournir sous forme de « string ». Ici, il s’agit de sélectionner les entrées dans la table des analyses dont l’année d’analyse (= année d’échantillonnage) est supérieure ou égale à la date de début et inférieur ou égal à la date de fin du premier intervalle saisi par l’utilisateur. Les nombres des dates sont changés en format « string ». De plus, la profondeur saisie par l’utili-sateur est aussi prise en compte dans la sélection.
Expression = « ANNEE_ANALYSE >= « +str(date_1) + » AND ANNEE_ANALYSE <= « +str(date_2)+ » AND PROFONDEUR = ‘ »+str(prof)+ »‘ »
Il faut spécifier l’emplacement de sortie des tables créées lors du déroulement de script. Ici, les tables seront placées dans la géodatabase saisie par l’utilisateur.
Out = arcpy.env.workspace
Tous les paramètres sont définis, il est possible d’effectuer la sélection définie dans l’expres-sion et de l’exporter vers une nouvelle table nommée « TtoT_1 ».
arcpy.TableToTable_conversion(InTable, Out, »TtoT_1″, Expression)
Certaines variables seront réutilisées plus tard, la terminologie est gardée pour éviter les confusions. Ainsi, elles doivent être libérées pour ne pas créer de conflits.
del Out
del Expression
La sélection et l’export effectués, nous pouvons procéder au calcul de la moyenne des analyses du paramètre de qualité du sol choisi par l’utilisateur dans le premier intervalle. Cela sera fait grâce à la fonction « Statistics_analysis » dont il est nécessaire de déclarer les para-mètres. En entrée, nous choisissons la table créée précédemment qui contient la sélection pour le premier intervalle de temps. En sortie, nous choisissons un nom de table qui montre que le traitement par moyenne (résumé statistique) a eu lieu. Le champ saisi par l’utilisateur correspond au paramètre de qualité du sol étudié. Ce champ doit être mis en format « string » et doit se terminer par « MEAN » pour spécifier le traitement par moyenne en paramètre par la fonction. C’est ce qui est réalisé et stocké dans la variable « champ_1 ».
intable = « TtoT_1 »
Out = « TtoT_1_Res »
champ = arcpy.GetParameterAsText(6)
champ_1 = champ+ » MEAN »
Tous les paramètres sont définis, il est possible de réaliser le traitement des données. Ici, le dernier paramètre spécifie que le traitement aura bien lieu pour chaque surface agricole.
arcpy.Statistics_analysis(intable, Out, champ_1, « SURFACE_AGRICOLE »)
A nouveau certaines variables seront réutilisées plus tard, la terminologie est gardée pour éviter les confusions. Ainsi, elles doivent être libérées pour ne pas créer de conflits.
del Out
del intable
La table TtoT_1_Res contient donc le résultat du traitement des données pour le premier inter-valle de temps. Un champ nommé automatiquement par l’outil « Statistics_analysis » a été créé. Dans un souci de clarté, il convient de garder les intitulés des champs évocateurs, il faut donc renommer ce champ. Pour le faire, nous allons faire appel à la fonction
« AlterField_management » dont il faut déclarer les paramètres. La table en entrée est la table créée précédemment, il faut aussi mettre en forme le champ avec le nom du paramètre pour que le bon champ soit pris en paramètre (« NomChamp_1 »). Il convient aussi de choisir le nouveau nom de champ qui sera stocké dans la variable « Renomme_1 ».
intable_1 = « TtoT_1_Res »
NomChamp_1 = « MEAN_ »+champ
Renomme_1 = champ+ »_1 »
L’action de renommage de champ est réalisée comme suit.
arcpy.AlterField_management(intable_1, NomChamp_1, Renomme_1, Renomme_1)
Le traitement des données pour le premier intervalle est désormais terminé. Il faut à présent répéter les mêmes opérations pour le deuxième intervalle de temps. Le code utilisé est exac-tement le même, sauf naturellement les dates choisies par l’utilisateur, le nom des tables créées et le nom des champs créés. Il n’est donc pas nécessaire de commenter un code iden-tique à quelques exceptions près. Il est collé ci-dessous, seules les grandes étapes sont rele-vées et commentées.
Sélection et export du deuxième intervalle de temps en conservant la même profondeur que pour le premier intervalle.
date_3 = arcpy.GetParameterAsText(4)
date_4 = arcpy.GetParameterAsText(5)
Expression = « ANNEE_ANALYSE >= « +str(date_3) + » AND ANNEE_ANALYSE <= « +str(date_4)+ » AND PROFONDEUR = ‘ »+str(prof)+ »‘ » Out = arcpy.env.workspace
arcpy.TableToTable_conversion(InTable,Out , « TtoT_2 », Expression) del Out
del Expression
Traitement par moyenne du deuxième intervalle de temps.
intable = « TtoT_2 »
Out = « TtoT_2_Res »
arcpy.Statistics_analysis(intable, Out, champ_1,
« SURFACE_AGRICOLE »)
del Out
del intable
Modification du nom du champ créé dans la nouvelle table nommée « TtoT_2_Res ».
intable_2 = « TtoT_2_Res »
Renomme_2 = champ+ »_2″
arcpy.AlterField_management(intable_2, NomChamp_1, Renomme_2, Renomme_2)
|
Table des matières
Introduction
Contexte général
Données et méthodologie
Description des données
Mise à jour de la carte
Développement d’un script python pour faire une différence de moyenne sur une
période donnée
Fonctionnement général du script
Représentation schématique du fonctionnement de l’outil
Présentation d’un ModelBuilder simplifié
Comparaison du script par rapport au ModelBuilder
Description des outils utilisés dans le script python
Présentation du code
Création de l’outil et rédaction de l’aide
Présentation de l’outil et exemples d’utilisation
Conclusion et pistes de développement
Bibliographie
Logiciels utilisés
Annexes
Annexe 1
Annexe 2
Annexe 3
Annexe 4
Annexe 5
Télécharger le rapport complet