Importation des données via un tableau associatif

De Metabolisme territorial
Aller à : navigation, rechercher

L'utilisation d'une solution ORM dans le SINAMET nous permet de gérer une base de données tout en abstrayant une partie du travail de construction de requête par la construction et la modification d'instances (de type territoire, acteur, flux, ...). Toutefois, la construction des liens entre ces instance demande une attention spécifique : cela requiert une identification préalable de toutes les instances à lier. Par exemple, pour associer un territoire à un stock, il faut au préalable trouver et charger dans la mémoire du programme l'instance du territoire. De plus, dans notre modèle de données présenté précédemment, les liens entre les instances peuvent être datés et sourcés, et le nombre de caractéristiques des instances non limité. Cela implique l'existence d'instances de type "Attributs" qui viennent ajouter une couche de complexité dans la structuration des données.

Aussi, pour faciliter cette phase de structuration lors de l'importation de données, nous implémentons dans le SINAMET les fonctionnalités permettant de mettre en correspondance les données sources et notre modèle de données. Nous utilisons pour cela un tableau associatif (ou dictionnaire en informatique) qui permet d'associer des mots-clefs à des valeurs (d'un tableau source par exemple), laissant à la charge des algorithmes du SINAMET de reconstruire la structure de données selon le modèle.

Par exemple, nous disposons d'un tableur contant une liste de flux sur la production agricole de différents département en 2015. Ce fichier contient différentes informations dans ses colonnes (n° de colonne) : Code du département (1), nom du produit selon la nomenclature Agreste (2), quantité en centaine de tonnes (3). Pour structurer ces données selon notre modèle, nous devons identifier chaque département et chaque produit grâce à son code ou son nom, puis nous devons stocker les quantités de production. Enfin, l'année concernée n'est pas précisée dans le fichier, mais elle est nécessaire pour donner du sens à la notion de flux de production (selon notre ontologie). Pour importer ces données, nous devons construire le tableau associatif adapté à la source :

(L1)  table["TerritoryCode"] = Column(1)
(L2)  table["OmesName"] = Column(2)
(L3)  table["OmesNomenclature"] = "Agreste"
(L4)  table["Quantity@t"] = 100*Column(3)
(L5)  table["Year"] = 2015

Puis nous créons à travers les fonctionnalités du SINAMET des instance de type "Consommation" (ou GateFlow) à partir de cette table. La ligne 1 indique que le territoire à associer au flux de production est identifié par son code dans le tableau de données. L'instance va pouvoir ainsi être chargée et associée automatiquement, sans nécessiter d'attention particulière de l'utilisateur, à la condition que le territoire concerné ait été chargé au préalable dans la BDD (l'ordre de chargement des données est donc important). Les lignes 2 et 3 permettent d'identifier le produit (Omes) dans une nomenclature, à nouveau pour le charger et l'identifier automatiquement. La quantité de produit ligne 4 est indiquée avec son unité (tonne), et nous avons la possibilité d'ajuster la valeur source pour correspondre aux indications de la source (qui exprime des centaines de tonnes). Enfin, ligne 5, nous précisons que le jeu de donnée chargé ne concerne que l'année 2015. Dans le modèle de donnée, ce n'est pas une année qui est stockée mais une période. A partir du mot-clef "Year", le SINAMET va pouvoir automatiquement construire la période correspondante (01/01/2015 -> 31/12/2015). Si le mot-clef "Month" était ajouté en ligne 6, le SINAMET construirait la période correspondant au mois et à l'année. Nous pouvons également à la place définir une période libre à l'aide des mots clefs "DateStart" et "DateEnd".

L'importation des données dans la base du SINAMET passe ainsi par la définition des tableaux associatifs pour chaque source de données. L'association mot-clef <-> colonne est particulièrement intuitive et pratique pour importer des données présentes dans un tableur source, tout en permettant de modifier si besoin les valeurs initiales (par exemple en multipliant par 100) ou d'ajouter des précisions non présentes dans les données sources (par exemple l'année ou la nomenclature de référence). A partir de ce tableau, les algorithmes du SINAMET vont pouvoir réaliser tout le travail répétitif : vérifier que les informations minimales sont présentes, identifier et charger les instances à lier, normaliser les informations comme les dates et structurer adéquatement les données pour les insérer dans la BDD. L'ensemble des mots-clefs utilisables, et des exemples d'utilisation figurent dans la documentation du SINAMET.

Entités quantifiables et non quantifiables

+ Acteur, Territoire, Produit => Non quantifiable : Une seule entité, à mettre à jour + Flux, Stock => Quantifiable : Pas de code d'identification, pas de mise à jour, insertion "en une fois"