❌

Vue lecture

Illico Editor : nouveautés depuis 2021

Illico Editor est un (petit) couteau suisse de la qualification de donnĂ©es dĂ©veloppĂ© Ă  l’origine pour permettre aux experts mĂ©tiers de transformer les donnĂ©es sans recourir Ă  la programmation
 le tout dans une simple page HTML (pas de serveur Web) donc une utilisation Ă  travers le navigateur.

Aujourd’hui, plus de 150 transformations de donnĂ©es sont disponibles prĂȘtes Ă  l'emploi.

Particularité : chaque transformation exécutée ainsi que son résultat sont inscrits dans un journal de bord créant ainsi une sorte de procédure-type sans effort.

PubliĂ© sous licence GPL, le code d’Illico est globalement trĂšs basique : standards HTML5/CSS3/JS, et zĂ©ro dĂ©pendance, bibliothĂšque ou appel Ă  un code tiers. Les donnĂ©es restent dans le (cache du) navigateur.
Les algorithmes sont trĂšs simples. La complexitĂ© est plutĂŽt liĂ©e Ă  la maniĂšre d’imaginer de nouvelles transformations de donnĂ©es, Ă  la fois gĂ©nĂ©riques (paramĂ©trables) tout en restant simples pour l’utilisateur (nombre rĂ©duit de paramĂštres).

Sommaire

Quelques limites Ă  connaĂźtre

Dans mon usage, des crashs du navigateur ont Ă©tĂ© constatĂ©s sur des grands jeux de donnĂ©es avec les fonctionnalitĂ©s qui sollicitent le plus grand nombre de comparaisons (prĂ©cisĂ©ment le calcul de la distance d’édition / lignes).

Pour un grand volume de donnĂ©es, mon conseil serait d’opter pour Opera/Vivaldi qui proposent Ă  l’utilisateur d’augmenter la mĂ©moire allouĂ©e Ă  la page (plutĂŽt que de faire crasher l’onglet/navigateur) ; de rĂ©duire le jeu de donnĂ©es aux colonnes/lignes Ă  traiter (ce qui rĂ©duirait la taille), avant de se lancer dans les transformations ; ou d’opter pour des outils plus adaptĂ©s Ă  cette volumĂ©trie.

Un test sur des donnĂ©es factices m’avait permis d’identifier des tailles limites de jeu de donnĂ©es : https://illico.ti-nuage.fr/doc/build/html/fct/principes.html#jeu-de-donnees-volumineux

 Objet de la dĂ©pĂȘche

Cette dĂ©pĂȘche fait Ă©cho Ă  la prĂ©cĂ©dente de janvier 2021.

Au-delĂ  des corrections de bug et des amĂ©liorations (gestion des nombres dĂ©cimaux et nĂ©gatifs pour les intervalles, options supplĂ©mentaires pour dĂ©cider l’interprĂ©tation de “valeurs” vides), je voulais prĂ©senter ici la trentaine de nouvelles fonctionnalitĂ©s/traitements et les nouveaux tutoriels.

Avant de commencer

Dans Illico, l’expression valeurs en liste dĂ©signe

  • des donnĂ©es prĂ©sentĂ©es sous la forme a, b, c (le sĂ©parateur peut ĂȘtre un caractĂšre ou une chaĂźne)
  • des listes de couples de valeurs xxx:1 / yyy:2 / zzz:3 (un sĂ©parateur de liste / + un dĂ©limiteur {clĂ© => valeur} ici :

Nouveaux tutoriels

La section tutoriels dĂ©crit des cas concrets pour lesquels il n’existe pas de rĂ©solution « en 1 Ă©tape Â».
Dans certains cas, une fonctionnalité a été développée pour couvrir tout ou partie de la résolution.

Ces tutoriels sont dĂ©taillĂ©s pas Ă  pas dans la section “tutoriels” afin d’ĂȘtre utilisĂ©s comme support de formation.

Je résume ici leur logique.

Transposer une matrice

Au sens “mathĂ©matique” du terme, bascule les lignes en colonnes et vice-versa :

nombre d’étapes/actions du tutoriel : 6

une nouvelle fonctionnalité a été développée par la suite pour transposer les données en 1 clic/étape/action

Comparer (rapidement) des groupes de colonnes

Comparer des groupes de colonnes prises deux Ă  deux Ă©tait dĂ©jĂ  possible. Cependant, avec un grand nombre de colonne, l’opĂ©ration pouvait s’avĂ©rer fastidieuse et source d’erreurs.
Le tutoriel prĂ©sente une maniĂšre plus gĂ©nĂ©rique de comparer un grand nombre de colonne de deux fichiers sources avec le mĂȘme en-tĂȘte, par exemple la description d’une mĂȘme population sur deux annĂ©es diffĂ©rentes.

nombre d’étapes/actions du tutoriel : (2 par fichier source) + 4

l’intĂ©rĂȘt de ce tutoriel rĂ©side surtout dans le fait de rendre la complexitĂ© du traitement indĂ©pendante du nombre (de paires) de colonnes Ă  comparer

Comparer des lignes dans un fichier cumul

On souhaite identifier des diffĂ©rences mais cette fois au sein d’un mĂȘme fichier de donnĂ©es dĂ©crivant un cumul.
Il peut s’agir par exemple de deux jeux de donnĂ©es mis bout-Ă -bout dĂ©crivant une mĂȘme population sur deux annĂ©es diffĂ©rentes.

nombre d’étapes/actions du tutoriel : 3

Créer un fichier cumul à partir de deux sources aux formats proches

Le cas a Ă©tĂ© rencontrĂ© lors d’une analyse de journaux comptables oĂč les jeux de donnĂ©es prĂ©sentaient des rubriques/codes comptables en colonne.
D’un mois sur l’autre, le nombre et l’ordre de ces colonnes/rubriques diffĂ©raient. Le tutoriel permet de s’affranchir de ces variations de la structure des donnĂ©es.

nombre d’étapes/actions du tutoriel : (4 par fichier source) + 3

Reconstituer des calendriers

Autre cas de figure rencontré, les données décrivent des personnes présentes sur des périodes avec en colonne la date de début, la date de fin, puis les autres données.
À partir de ces donnĂ©es, on recherche les dates/jours exactes qui ont rassemblĂ© le plus de personne.

La rĂ©solution consiste Ă  gĂ©nĂ©rer l’ensemble des jours (entre la date de dĂ©but et la date de fin), c’est-Ă -dire une description des faits Ă  une Ă©chelle unitaire/atomique (chaque ligne dĂ©crivant alors une date et non une pĂ©riode).

Trois approches sont proposées dans le tutoriel : entre 3 et 6 étapes/actions

Fidélisation (suivre une cohorte)

La problématique soulevée était de comprendre les parcours, trajectoires pour une population donnée.

Exemple simplifiĂ© : 4 lignes de donnĂ©es dĂ©crivent (dans l’ordre chronologique) les Ă©tats/statuts successifs d’un individu, Ă  raison d’un par ligne : a -> b -> c -> d.

dans la pratique, le jeu de donnĂ©es dĂ©crivait une population d’individu avec des trajectoire de 4 Ă  50 Ă©tats, parfois circulaires a -> b -> a -> d -> c

On souhaite identifier :

  1. le parcours par rapport Ă  l’état initial pour l’individu pris en exemple, le rĂ©sultat sera la relation suivante : a => {b -> c -> d}
  2. les changements d’état (de proche en proche) pour le mĂȘme exemple, le rĂ©sultat sera une liste de couple de valeurs : (a => b), (b => c), (c => d)
  3. les relations entre l’état initial et n’importe quel autre Ă©tat du parcours mĂȘme exemple, le rĂ©sultat sera trois couples de valeurs : (a => b), (a => c), (a => d)
  4. les relations entre n’importe quel Ă©tat du parcours et n’importe quel autre Ă©tat rencontrĂ© par la suite mĂȘme exemple, le rĂ©sultat sera six couples :
    • (a => b), (a => c), (a => d)
    • (b => c), (b => d)
    • (c => d)

La fonctionnalitĂ© utilisĂ©e possĂšde une option “scĂ©nario” avec les 4 choix.
Ainsi, on dĂ©finit « ce que reprĂ©sente les donnĂ©es Â» en prĂ©cisant le ou les sĂ©parateurs, et la transformation est appliquĂ©e selon la demande.

Les 4 scĂ©narios sont proposĂ©s dans le tutoriel : 3 Ă©tapes/actions (une 4Ăšme Ă©tape est nĂ©cessaire si on souhaite Ă©tudier Ă  part le 1er Ă©tat et l’état terminal de la trajectoire)

Nouvelles fonctionnalités

La majorité des nouvelles fonctionnalités concerne

  • des traitements de dates (dĂ©calage, conversion)
  • des traitements d’intervalles numĂ©riques
  • des traitements de pĂ©riodes (intervalles de dates)

Elles sont prĂ©sentĂ©es ci-dessous dans leur rubrique respective (dans l’ordre d’apparition des rubriques dans Illico et dans la documentation).

(dans l’application, chaque Ă©cran permettant d’exĂ©cuter une transformation possĂšde un lien vers la section/page concernĂ©e dans la documentation)

Valeurs en liste : compacter, inverser l’ordre, filtrer

compacter les listes

rubrique « valeurs en liste : agrĂ©gats"

Pour une liste qui prĂ©sente des rĂ©pĂ©titions—a,a,b,c,a,d,b—les deux options de cette transformation permettent d’obtenir :

  • a,b,c,a,d,b : rĂ©duire Ă  une occurrence, pour chaque sĂ©rie
  • a,b,c,d : conserver globalement les premiĂšres occurrences
  • c,a,d,b : conserver globalement les derniĂšres occurrences

inverser l’ordre des Ă©lĂ©ments des listes

rubrique « valeurs en liste : structure"

Pour une colonne dĂ©crivant des listes d’élĂ©ments—a:1, b:2—,

  • inverse l’ordre des valeurs des listes (b:2, a:1)
  • inverse l’ordre des valeurs des listes imbriquĂ©es seulement (1:a, 2:b)
  • inverse l’ordre des listes imbriquĂ©es et des valeurs dans ces listes (2:b, 1:a)

filtrer ou exclure les valeurs d’une liste

rubrique « valeurs en liste : filtres"

compare les listes de valeurs d’une colonne par rapport Ă  une autre colonne de rĂ©fĂ©rence

  • Ă©gal
  • diffĂ©rent de
  • supĂ©rieur/infĂ©rieur ou Ă©gal Ă 
  • strictement supĂ©rieur/infĂ©rieur Ă 

réduire la liste à certaines clés

conserver/exclure certains couples {clé:valeur} lorsque la clé existe dans une autre colonne (qui contient pour chaque ligne la liste de clés à conserver ou à exclure)

Par exemple—et sans devoir utiliser des regex/expressions rationnelles—la liste 2021=3,2022=1,2024=4 pourra ĂȘtre rĂ©duite Ă  2022=1,2024=4 si la clĂ© 2021 existe dans la colonne de contrĂŽle.

Valeurs en liste : lister les permutations, mélanger la liste

rubrique valeurs en liste : enrichissement

lister les permutations des valeurs d’une liste

produit la liste de toutes les permutations des valeurs des listes de la colonne sélectionnée.

mélanger les valeurs de la liste

applique le mélange de Fisher-Yates sur les valeurs de la liste

enlever les accents et les cĂ©dilles de l’en-tĂȘte

rubrique « en-tĂȘte"

surtout utile lorsque l’on part d’un tableur et que l’on cherche Ă  injecter les donnĂ©es dans une base de donnĂ©es ne tolĂ©rant pas ces caractĂšres dans les en-tĂȘtes

Permuter les colonnes

rubrique « colonnes : ordre"

Dans le cas d’un export de donnĂ©es depuis un logiciel mĂ©tier, ou suite Ă  certaines transformations, certaines colonnes peuvent ĂȘtre gĂ©nĂ©rĂ©es dans un ordre qui ne s’avĂšre pas trĂšs intuitif.

Cette nouvelle fonctionnalitĂ© inverse en 1 clic l’ordre des colonnes sĂ©lectionnĂ©es en permutant (au choix)

  • 1Êłá”‰ et 2ᔉ, 3ᔉ et 4ᔉ, etc.
  • 1Êłá”‰ et derniĂšre, 2ᔉ et avant-derniĂšre, etc.

Numéroter chaque série

rubrique “lignes”

Dans Illico, le terme sĂ©rie dĂ©signe une suite de lignes contiguĂ«s qui possĂšdent la mĂȘme valeur dans la colonne sĂ©lectionnĂ©e (un identifiant par exemple).
Si l’identifiant rĂ©apparaĂźt plus loin dans les donnĂ©es, il s’agira d’une nouvelle sĂ©rie.

(une autre transformation permet déjà de numéroter chaque ligne de la série)

Obtenir les méta-données des colonnes sélectionnées

rubrique “agrĂ©gats”

Pour les colonnes sélectionnées, indique

  • si la colonne ne contient que des valeurs uniques (les valeurs vides sont comptĂ©es Ă  part)
  • le nombre de lignes sans valeur (valeur vide)
  • le nombre de valeurs renseignĂ©es (valeur non-vide)
  • la cardinalitĂ© : nombre de valeurs diffĂ©rentes rencontrĂ©es dans la colonne

Décaler les dates

rubrique “temps”

dĂ©caler les dates avec 1 constante (saisie par l’utilisateur)

permet de dĂ©caler les dates d’une colonne Ă  partir d’une constante (on prĂ©cise l’unitĂ© : nombre de jours, de semaines, de mois ou d’annĂ©es)

décaler des dates selon 1 autre colonne

idem prĂ©cĂ©demment mais en se basant sur les valeurs d’une autre colonne plutĂŽt qu’une constante

Jours de la semaine

rubrique “temps”

donner le nom des jours de la semaine

la date est alors recodée : lundi, mardi


compter chacun des jours de la semaine

nombre de lundis, de mardis, etc. dans l’intervalle dĂ©crit par des colonnes dĂ©but et fin de la pĂ©riode

obtenir le numĂ©ro du jour dans l’annĂ©e

1 pour le 1á”‰Êł janvier, 32 pour le 1á”‰Êł fĂ©vrier


Transformation des pĂ©riodes « temps : intervalles Â»

compléter un intervalle de date (2 colonnes : début et fin de la période)

crĂ©e une liste de jour/date dans l’intervalle dĂ©crit

rechercher une date dans un intervalle de date

compare 1 colonne (date recherchée) par rapport à 2 autres colonnes décrivant une période (début et fin de la période)

combiner deux périodes (4 colonnes)

option (au choix) : obtenir

  • une fusion : pĂ©riode englobant les deux [min, max]
  • une union : pĂ©riode englobant les deux seulement si intersection
  • une intersection : plus petite pĂ©riode commune

comparer les dates et une liste de seuils (saisie par l’utilisateur)

détecter des collisions de périodes

portée de la détection

  • rechercher pour l’ensemble des donnĂ©es
  • rechercher dans les lignes qui partagent un mĂȘme identifiant (les lignes comparĂ©es ne sont pas forcĂ©ment contiguĂ«s)
  • rechercher dans les lignes qui dĂ©crivent une sĂ©rie (lignes contiguĂ«s avec un mĂȘme identifiant)

Calculs

rubrique “calculs”

calculer une opération sur 1 colonne : options

options :

  • opĂ©rations : minimum, maximum, moyenne, somme
  • valeurs vides : ignorĂ©es ou traduites par zĂ©ro
  • calcul : total ou cumulĂ©
    • option si cumulĂ© : en partant de la premiĂšre ou derniĂšre ligne
  • rĂ©sultat : global ou local
    • option si local : pour chaque sĂ©rie ou pour chaque identifiant

calculer une opĂ©ration avec 1 constante (saisie par l’utilisateur)

calculer une somme ou une moyenne sur x colonnes

Convertir d’un systĂšme de numĂ©ration Ă  un autre

rubrique “enrichissement”

conversion depuis et vers une base binaire, octale, décimale, hexadécimale

Matrice : transposée, inverser, trier

rubrique “matrice”

calculer la transposée

Transpose le jeu de donnĂ©es : les lignes deviennent les colonnes et inversement ; la ligne d’en-tĂȘte devient la premiĂšre colonne ; la premiĂšre colonne devient la ligne d’en-tĂȘte.

inverser l’ordre des lignes

Inverse l’ordre des lignes du jeu de donnĂ©es : la premiĂšre ligne devient la derniĂšre, la derniĂšre devient la premiĂšre, etc.

trier par ordre alphabétique

options

  • ordre des lettres : A
Z
a
z É é ou A
É
Z
a é z
  • placer les valeurs vides : au dĂ©but ou Ă  la fin

trier par ordre numérique

option : les valeurs vides sont

  • les plus petites (seront placĂ©es au dĂ©but du tableau)
  • les plus grandes (seront placĂ©es Ă  la fin du tableau)
  • Ă©gales Ă  zĂ©ro

trier par ordre chronologique

option : les valeurs vides sont

  • dans le passĂ© lointain
  • dans un futur lointain
  • Ă©gales Ă  la date du jour
  • Ă©gales Ă  une date prĂ©cise (Ă  saisir)

Commentaires : voir le flux Atom ouvrir dans le navigateur

❌