Illico Editor : nouveautés depuis 2019

Posté par  . Édité par orfenor, theojouedubanjo et Benoît Sibaud. Modéré par Ysabeau 🧶 🧦. Licence CC By‑SA.
Étiquettes :
34
18
jan.
2021
Base de données

Pour faire court, Illico Editor est un couteau suisse de la qualification de données qui simplifie les opérations de préparation de données : formatage, pivot, croisement, comparaison avec d’autres jeux de données. Il s’utilise à travers une interface web, et n’a pas besoin de serveur.

explorer les données avec Illico

Pour l’installer on se contente de décompresser une archive et d’ouvrir le fichier HTML. L’application est écrite en Javascript et distribuée sous licence GPL. Je présente ici en résumé les nouveautés depuis la précédente dépêche en 2019. J’en profite pour vous souhaiter une excellente année 2021 !

Sommaire

Illico : présentation rapide

Illico est orienté dans une approche généraliste de la donnée et s’adresse en premier lieu aux experts métiers responsables de leurs données (application de gestion RH, budgétaire, etc.). Les informaticiens et data scientist, déjà outillés par ailleurs, pourront également y trouver un intérêt comme complément pour vérifier rapidement le résultat d’un programme par exemple.

Illico s’utilise directement sur le site Web officiel (les données restent dans le navigateur) ou en local après avoir téléchargé et décompressé l’archive sur votre poste. Il s’agit d’une copie conforme du site Web, une simple page Web (ni serveur Web ni serveur de base de données).

Voir aussi les épisodes précédents.

Interface utilisateur

Le côté gauche de la page Web contient un menu en trois rubriques : charger des données, transformer et analyser, configurer. Transformer et analyser contient plus de 120 fonctions de traitement ou d’analyse de données, regroupées par thème. L’autre côté de la page présente les paramètres associés à chaque fonction. Un lien vers la documentation est toujours présent.

On commence bien entendu par charger des données. Le jeu de données à manipuler est importé par copier-coller (l’interface universelle) ou par fichier au format TSV, CSV et variantes. Il peut aussi être généré (liste d’identifiants, liste de jours, etc.).

interface d’illico au chargement de données

Illico n’est pas un tableur et ne montre pas directement le résultat des manipulations. On le découvre dans un nouvel onglet après avoir choisi l’affichage CSV, tableau HTML ou texte (police monospace, les colonnes sont alignées visuellement). On l’exportera en CSV pour le récupérer (UTF-8 + BOM). Ces formats d’export sont toujours disponibles à l’écran dans le bandeau supérieur : aperçu CSV, tableau, texte.

Une fois les données chargées tout se passe dans transformer et analyser. Par exemple pour traiter les singletons et doublons :

interface d’illico au traitement de données

Particularité de l’outil : le journal de bord

Qualifier les données est le plus souvent une activité exploratoire. On perd rapidement de vue ce qui a été corrigé, combien de données ont été modifiées, etc. Pour éviter cet écueil, Illico consigne chaque action et les résultats obtenus afin d’en faciliter sa vérification (caractère reproductible), sa qualité (analyse des étapes) et éventuellement son automatisation dans un autre outil (dérouler l’algorithme). La dernière colonne rappelle le nom du fichier exporté, par défaut automatiquement horodaté. La rubrique configurer permet de modifier ce comportement et de renommer le fichier de sortie à chaque export, c’est le cas dans l’exemple.

Titre de l’image

Nouveautés dans la rubrique « charger des données »

Cette rubrique regroupe les différentes fonctions pour créer un jeu de données, on y trouve aussi désormais des traitements pour évaluer l’intégrité d’un jeu de données. Ci-dessous, les titres reprennent ceux des menus concernés par les nouveautés.

Créer un jeu de données / créer un calendrier

Crée un calendrier borné par deux dates. On indique en paramètres les jours de la semaine à conserver (seulement lundi et mardi par exemple). Une colonne contient la date, l’autre contient les jours.

Évaluer l’intégrité / comparer deux versions

Je me suis plus ou moins inspirée de Meld, Beyond Compare et Wdiff. On charge un deuxième jeu de données présentant les colonnes dans le même ordre que le premier. Il n’y a pas de contrainte sur les libellés de colonnes. Cette fonction extrait au choix :

  • les lignes communes,
  • les lignes avec le même identifiant (sélection possible de plusieurs colonnes) mais dont le reste de la ligne diffère,
  • le jeu de données A mis à jour par B ou l’inverse.

Elle permet aussi d’identifier les collisions quand une source possède plusieurs lignes avec un même identifiant et que le reste de la ligne diffère.

Évaluer l’intégrité / rapprocher deux écritures

Cet assistant de correspondance floue sur une colonne (ou fuzzy-matching) combine plusieurs traitements de données disponibles séparément dans Illico.

La fonction calcule la distance d’édition ou un ratio de similarité (nombre de mots communs) en adaptant la sensibilité indiquée par l’utilisateur. C’est-à-dire qu’elle peut prendre en compte ou ignorer la casse, les accents, les articles (l', le, la, etc.), les caractères non-alphanumériques et l’ordre des mots. Les espaces consécutifs ou les espaces en début et fin de valeurs sont automatiquement réduits pour les premiers et supprimés pour les seconds.

L’utilisateur peut décider de simuler, pour voir les meilleures propositions d’appariement, ou d’apparier directement le jeu de données avec la meilleure proposition.

Nouveautés dans la rubrique « transformer et analyser »

Cette rubrique regroupe des fonctions d’analyse (format, vide, agrégat, etc.) et/ou de transformations (recodage, nouvelle colonne résultat de telle opération, etc.). Les transformations, y compris si l’action ne modifie rien, sont consignées dans le journal de bord. Là encore, les titres reprennent ceux des menus concernés par les nouveautés.

Valeurs en liste / modifier le séparateur des valeurs

Certaines cellules de tableau contiennent parfois plusieurs valeurs séparées par une virgule. Par exemple dans un tableau à deux colonnes une ligne peut comporter une valeur à gauche et une liste de plusieurs valeurs à droite, ou bien dans une forme plus structurée, une liste de paires {clé=valeur} :

Une valeur Plusieurs valeurs en liste
abc 2020, 2021, 2022
bca 2022, 2023, 2024, 2025, 2026
Une valeur Une liste de paires clé=valeur
abc 2020=1, 2021=2, 2022=1
bca 2022=1, 2023=2, 2024=1, 2025=2, 2026=1

Les fonctions concernant les valeurs en liste permettent de les transformer ou les analyser sans devoir les déstructurer (pivot) ni recourir aux expressions rationnelles (efficaces mais particulièrement techniques pour un utilisateur non-informaticien). Désormais on peut aussi librement « modifier le séparateur des valeurs » dans les valeurs en liste, par exemple pour remplacer la virgule par un point virgule.

Valeurs en liste / recoder des clés par des valeurs (ou l’inverse)

Toujours dans la même problématique, on souhaite cette fois évaluer et/ou recoder les valeurs bien qu’elles soient codées sous forme d’une liste de valeurs (dans une même cellule ou un même colonne). Pour cela, on donne une table de correspondance (un bloc de texte multi-ligne) et on choisit le résultat de l’opération, c’est-à-dire de conserver dans le tableau :

  • seulement les valeurs sans correspondance,
  • seulement les valeurs avec correspondance mais sans les recoder,
  • seulement les valeurs avec correspondance en les recodant,
  • toutes les valeurs, celles avec correspondance seront recodées (l’ordre des valeurs est conservé).

On peut l’utiliser pour passer d’un code numérique (identifiant machine) à un libellé texte (lisible par un humain), ce qui était le problème à l’origine de cette fonction, ou s’en servir pour recoder en masse, comme dans cet exemple :

Un organisme de formation planifie des sessions à la journée :

formations | jours
thème A    | 2020-01-18, 2020-02-04
thème B    | 2020-02-04, 2020-02-05
thème C    | 2020-02-05

Mais certaines dates doivent être déplacées, 2020-02-04 vers 2020-02-05 et 2020-02-05 vers 2020-02-08. Bien qu’il y ait plusieurs recodages, la modification est résumée à une seule action. Et on obtient un nouveau planning :

formations | jours
thème A    | 2020-01-18, 2020-02-05
thème B    | 2020-02-05, 2020-02-08
thème C    | 2020-02-08

En-tête / enlever le délimiteur

On s’en doute, les fonctions d’en-tête permettent de renommer ou de modifier les libellés de colonnes en ajoutant ou supprimant des préfixes. Une autre action intéressante est de pouvoir exporter verticalement ou horizontalement la ligne de libellés (bien utile lorsque l’on documente une base de données legacy avec des tables de plusieurs centaines de champs).

On peut désormais supprimer les délimiteurs (apostrophe, guillemet et autres) autour des libellés.

Colonnes : comparaison / identifier le minimum et le maximum

Cette fonction complète les outils de comparaisons de texte (comparer n colonnes deux à deux et calculer la distance d’édition). Elle effectue une comparaison numérique sur les valeurs des colonnes sélectionnées, puis détermine la valeur minimum ou la valeur maximum dans chaque ligne. En option, les valeurs vides sont converties en zéro pour la comparaison.

Colonnes : comparaison / comparer une valeur et plusieurs colonnes

Pour chaque ligne, compare la valeur d’une colonne de référence aux valeurs des colonnes sélectionnées. Les comparaisons seront textuelles (égales, différentes) ou numériques (<, >, …). Les résultats sont indiqués dans une nouvelle colonne qui contient les valeurs respectant la comparaison choisie.

Lignes / décaler vers le haut ou le bas

Très comparable à la fonction lag de SAS, cette fonction recopie, autrement dit décale, les valeurs d’une colonne soit vers le haut, soit vers le bas. Le décalage s’effectue sans condition particulière ou bien en tenant compte d’un identifiant choisi dans une autre colonne. Comme toujours, une troisième colonne accueille les résultats.
Dans ce tableau, la colonne A est notre identifiant :

 col A | col B
   abc |  2020
   abc |  2021
   abc |  2023
   def |  2020
   def |  2022
   abc |  2025

En décalant vers le haut les valeurs de la colonne B, le tableau devient :

 col A | col B | col C
   abc |  2020 |  2021
   abc |  2021 |  2023
   abc |  2023 |  2025
   def |  2020 |  2022
   def |  2022 |
   abc |  2025 | 

Si on choisit d’opérer le décalage qu’au sein d’une même série (succession de lignes avec le même identifiant), la valeur de la dernière ligne n’est pas copiée dans la troisième colonne :

 col A | col B | col C
   abc |  2020 |  2021
   abc |  2021 |  2023
   abc |  2023 | 
   def |  2020 |  2022
   def |  2022 |
   abc |  2025 | 

Agrégats / extraire un dictionnaire (tri à plat sur plusieurs colonnes)

Dans Illico, les fonctions d’agrégats regroupent surtout des fonctions d’analyse : connaître le format (valeur vide, cardinalité, nombre de caractères min-max, etc.), tri à plat, exploration de données, etc. Cette nouvelle fonction résume la sélection de n colonnes à un dictionnaire des combinaisons des n-tuples de valeurs (col1, col2, etc.). La fonction présente le nombre d’occurrences pour chaque combinaison de n-tuples de valeurs.

Enrichissement / créer une empreinte (hash) pour chaque donnée

Ce groupe de transformations regroupe une fonction de fusion/jointure avec un autre jeu de données (fichier texte CSV ou variante) et une fonction de chiffrement/déchiffrement (algorithme de chiffrement de Blaise de Vigénère). Une nouvelle fonction permet de hasher les valeurs de la colonne sélectionnée.
À l’origine, l’idée était de s’appuyer sur un hash pour simplifier le développement de jointures sur plusieurs colonnes. En attendant sa concrétisation, l’implémentation de base est devenue une fonction de transformation de données à part entière. L’implémentation est empruntée à cette discussion sur stackoverflow.

Intervalles / centrer et réduire (intervalle [0,1] ou [-1,1])

Ajoute une colonne au tableau avec le résultat de la standardisation — centrer et réduire — des valeurs sélectionnées.

Intervalles / comparer les valeurs et une liste de seuils

Les valeurs d’une colonne sont comparées à une liste de seuils (au choix : planchers ou plafonds) puis une colonne est ajoutée pour indiquer quel seuil le plus proche a été dépassé. C’est particulièrement utile lorsque l’on cherche à créer des groupes des données, comme pour décomposer la population en segments : 10-25 ans, 25-30 ans, etc.
Voyons un exemple, avec un tableau des âges :

col A | col B 
  abc |    20
  def |    30
  ghi |    40

Et comparons avec une liste de seuils :

 0
25
30
50

Le résultat de la comparaison sera indiqué dans la troisième colonne :

col A | col B | col C (B strictement inférieur aux seuils)
  abc |    20 |    25
  def |    30 |    50
  ghi |    40 |    50

Nouveaux tutoriels

En plus de la documentation utilisateur, un ensemble de tutoriels est livré avec l’outil et s’inspire des cas concrets rencontrés dans mes activités. Les plus classiques sont :

  • détecter/vérifier l’encodage au chargement des données, harmoniser des variantes d’écriture d’une même valeur (signifiant),
  • séparer en deux colonnes une colonne contenant le nom et le prénom,
  • détecter des inversions nom et prénom ou des écritures erronés (distance d’édition) sur les noms, etc.

Sur le plan pédagogique, ces tutoriels sont utilisés comme support de formation. Deux tutoriels ont été ajoutés :

Système d’aide à la décision (planificateur/inscriptions)

Lorsque l’on utilise un outil de planification (doodle, etc.), on obtient souvent un tableau contenant des colonnes de dates avec les disponibilités des participants sur chaque ligne. Le tutoriel amène l’utilisateur à transformer les données pour obtenir un tableau à trois colonnes : les deux premières décrivent un groupe de date et le nombre de date dans ce groupe, tandis que la troisième liste tous les participants qui ont validé ce groupe de date. On détermine donc facilement les participants qui ont le moins de disponibilité.

C’est pratique pour repérer les contraintes des participants « ressources », c’est-à-dire ceux qui sont indispensables à la réunion ou ceux dont l’absence remet en cause son intérêt.

Compter des jours d’absence ou de présence sur une période

Ce tutoriel présente une nouvelle option du calcul du nombre de jours entre deux dates (début — fin) pour réduire le calcul aux jours ouvrés de la semaine, c’est-à-dire du lundi au vendredi.

Améliorations diverses

Les autres améliorations ont porté sur l’ajout de paramètres aux fonctions existantes (sous forme d’options), quelques corrections de bugs d’affichages mineurs et un nouveau mode de fenêtrage. La partie droite peut désormais occuper tout l’espace, ce qui est plus agréable sur des petits écrans et facilite notamment l’utilisation de la fonction Agrégats / explorer les données dans laquelle on fait apparaître des tableaux de synthèse en cascade (chaque clic ouvre une synthèse sur l’axe d’analyse suivant) :

Exploration des données

En 2021, je prévois de finir le nettoyage des styles CSS (simplification et documentation) et de généraliser les options de comportement dans les calculs (valeurs vides ignorées ou traduites par zéro).

Installer ou contribuer

Pour utiliser Illico, il suffit de décompresser un zip (ou tar.gz). La documentation et les tutoriels sont dans le zip, générés dans les formats HTML et PDF.

Le code est également disponible sur un dépôt Git (licence GPL). Le dépôt contient les sources de l’application, de la doc, des tutos et les scripts pour générer les différents formats de sortie et empaqueter. N’hésitez pas à contribuer !

Aller plus loin

  • # Retours d’expériences ?

    Posté par  (site web personnel) . Évalué à 4.

    Salut,

    Je vais essayer car je suis à la recherche d'un outil de "qualification" de données dans le cadre d'une réversibilité (passage d'un prestataire/solution à un autre).

    Cela peut prendre jusqu'à quel volume de données (lignes ou Mo de CSV).

    à suivre

    • [^] # Re: Retours d’expériences ?

      Posté par  . Évalué à 6.

      sur le plan technique

      Je n'ai pas l'occasion de travailler avec des gros jeux de données.

      Après plusieurs tests, j'ai trouvé une limite autour de 100Mo avec interruption du chargement de données.

      Les ordres de grandeur sont indiqués dans la documentation :

      http://illico.tuxfamily.org/doc/build/html/fct/principes.html#jeu-de-donnees-volumineux

      En testant avec jeu de données Kaggle de 30 Mo (19 colonnes x 170 653 lignes), j'obtiens un chargement quasi-instantané.
      Les aperçus complets (tout le jeu de données) sont alors nettement plus lents à être générés.
      La plupart des traitements se réalisent en quelques secondes.

      Les fonctions d'analyse agrégats -> domaine de valeur et agrégats -> explorer les données te permettront de naviguer facilement dans les sous-ensembles de données malgré le volume de données.

      L'export CSV s'ouvre au bout de 2 secondes, ce qui reste raisonnable.

      sur le plan pratique

      Pour la problématique que tu rencontres, si tu as accès à la source de données, je te conseille de lotir la qualification (soit par périmètre homogène, par exemple une base client découpée en portefeuille par commercial, par région…

      Autre approche possible pour rendre la qualification digeste (tant pour les collègues et pour les logiciels) : lotir verticalement : que les produits, que les clients, que les adresses des clients, etc.

      Tu auras sûrement besoin d'un autre outil, programmable, pour rejouer à plusieurs reprises les scénarii.

      Illico trouvera plutôt sa place en amont (tests exploratoires) et en aval (vérification).

      • [^] # Re: Retours d’expériences ?

        Posté par  (site web personnel) . Évalué à 1.

        C'est pour valider les données en entrées avec des lots verticaux : produits, clients, etc.

        L'objectif est de préparer un vrai nettoyage des données via des commandes SQL dans des bases de "transition" avec ré-intégration dans la solution cible.

        Pour faire ce vrai nettoyage, il faut qualifier les données pour qu'elles soient pleinement utilisable pour de nouveaux traitements marketing (connaissance du client) ou vente (connaissance produit).

        L'export(CSV) devrait faire moins de 100Mo.
        Je regarderai et pourrai faire un retour sur ce point.

    • [^] # Re: Retours d’expériences ?

      Posté par  . Évalué à 4.

      Je vais essayer car je suis à la recherche d'un outil de "qualification" de données dans le cadre d'une réversibilité (passage d'un prestataire/solution à un autre).

      Pour ce type de tâche je suis très amateur de visidata.org

      Tu peux créer en une touche (F) une agrégation puis afficher les données d'un seul type (enter) et répéter à l'envie pour zoomer dans les données. Tu peux aussi sélectionner une ou plusieurs lignes (touche s) et revenir en arrière (q) pour avoir toutes les lignes qui correspondent à la sélection. Inverse la sélection (gt), supprimer toutes les lignes de la sélections (gd). Tu peux typer les colonnes, particulièrement utile pour les dates.
      Tu peux spliter une colonne (:) ou construire une colonne à partir des autres (=)
      Tu peux faire en quelques touches (M) un pivot.
      Tu peux avec une touche (.) faire un scatter plot de une ou plusieurs colonnes en fonction d'une autre colonne, zoomer dans les données, les sélectionner à la sourie.
      Tu peux trier ([) par plusieurs colonnes.

      Tu peux enregistrer les actions que tu as faites (D) et les rejouer plus tard sur un autre jeu de donnée.

      En clair, cet outil est monstrueux ! Et les talks du gars qui l'a écrit valent le coût d’œil (en anglais).

      Cela peut prendre jusqu'à quel volume de données (lignes ou Mo de CSV).

      Testé avec 800'000 lignes, 12 colonnes, 112MB de données. Ça consomme pas mal de RAM (cause python), ~x8 les données. Mais c'est très rapide (cause numpy), genre moins de 1s pour faire une agrégation.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.