3. Surcharges clés – valeurs
Mais nous pouvons aussi décider d’intégrer ce type d’information dans la table en ajoutant deux colonnes supplémentaires pour les clés et les valeurs. L’exemple suivant montre la modélisation (curve fit) d’une cinétique enzymatique (colonnes x, y, y-calculé, écarts) augmenté des paramètres de calcul (grisé), notamment le modèle enzymatique utilisé :
![]() |
Ces lignes n’alimenteront pas le bloc DATA, et seront traduites en clés – valeurs sous la forme de dictionnaires Python, comme dans le cas précédent. Le bloc de métadonnées correspondant identifie les deux colonnes supplémentaires KEY et VALUE avec des types CSVM adaptés (TEXT et NUMERIC) :
![]() |
Une fois de plus, le parseur n’interprète pas le contenu du fichier, nous devons indiquer que les colonnes ‘KEY‘ et ‘VALUE‘ correspondent à ce type d’information (il n’y a pas de norme, nous pourrions utiliser d’autres titres) et déclencher le traitement correspondant lors de la lecture du fichier CSVM.
Nous utilisons la fonction csvm_ptr_kvcols2kvdict toujours du module csvm_meta après avoir alimenté l’objet csvm_ptr via csvm_ptr_read_extended_csvm. Par contre l’argument save_rems des cette fonction doit être positionné sur False, car les informations clés – valeurs sont déjà dans la table (et non sous la forme de lignes de commentaires).
|
1 2 3 4 5 6 7 8 9 10 11 12 |
print("-> read CSVM") c = csvm_ptr() c = csvm_ptr_read_extended_csvm(c, tfile, fsep="\t", save_rems=False, debug=0) c.csvm_ptr_dump(0,0,True) print("-> read metadata and purge CSVM") blank = '-' (c, kvdict) = csvm_ptr_kvcols2kvdict(c, key_col='KEY', val_col='VALUE', remove=True, blank=blank, verb=1) if (len(kvdict) > 0): print("kvdict found:\n") pprint.pprint(kvdict) c.csvm_ptr_dump(0,0,True) c.csvm_ptr_clear() |
Le dictionnaire produit correspond donc au bloc clé – valeurs présent dans les deux dernières colonnes, et qui peut s’étaler sur un nombre indéfini de lignes de la table CSVM.
![]() |
Que se passe t’il si nous avons plusieurs clés identiques dans ce bloc d’information ? C’est le cas avec PNAME (nom du paramètre du modèle), PMIN, PSOL et PMAX (les intervalles de confiance: min, solution et max) qui sont présents pour chaque paramètre du modèle … Si nous regardons les valeurs de pdict, nous constatons qu’elles sont agrégées dans une liste correspondant au même paramètre répété. Par exemple {... 'PNAME':['k', 'Vo', 'Vs'], ...} pour les noms de paramètres correspondant à une même clé PNAME.
4. Conclusion
Nous avons donc la possibilité d’intégrer des annotations ou des informations en plus des données et des métadonnées CSVM. Il faut rappeler qu’un jeu réduit de métadonnées est un choix, de manière à ne pas produire de norme et d’éviter de passer du temps à les définir, ce qui permet de démarrer la collecte de manière concurrente à la modélisation.
CSVM était initialement conçu pour ces usages collaboratifs, liés à la collecte de données. Mais nous pouvons faire plus en surchargeant un peu, ce qui ajoute de l’usabilité. Le format, déjà lisible sans effort pour les humains et les machines, permet alors d’annoter d’une manière simple nos ilots de données. Au quotidien c’est très agréable d’ajouter quelques # sans se préoccuper d’un format (même avec XML ou JSON) tout en sachant que cela sera correctement géré.


