Validation and Transformation Language VTL

VTL est un nouveau langage destiné à être directement utilisable par les statisticiens pour spécifier, et donc documenter, des règles de validation et de transformations logiques sur les données. C’est par exemple le cas lorsque des tables de données administratives nécessitent des transformations pour devenir des sources statistiques (contrôles, mise en concept, mise en cohérence…).

VTL s’appuie sur une formalisation logique des règles de validation et de transformation qui présente l’intérêt de pouvoir être convertie automatiquement dans des langages de programmation spécifiques pour l’exécution (python, R, Java, SQL, etc.)

Cette formalisation logique fournit une expression « neutre » pour laquelle diverses implémentations peuvent être mises en œuvre.

TREVAS, projet open-source en cours de développement piloté par l’Insee, est un exemple de moteur d’implémentation VTL écrit en java qui repose notamment sur spark pour l’exécution.

Le langage VTL est développé par les membres des communautés SDMX, DDI et GSIM et commence à être plus largement utilisé par la communauté international des statisticiens et les chercheurs.

Ci-dessous, un exemple de set d’instructions VTL pour la transformation de table :

  • La table fictive ds_source contient un identifiant de l’employé, le nom de l’entreprise, le salaire brut, le montant des charges
  • La première instruction va créer une nouvelle table ds_net en calculant le montant du salaire net : [calc SALAIRE_NET := SALAIRE_BRUT – CHARGES]
  • La deuxième instruction crée une nouvelle table ds_gros_salaires à partir de ds_net en filtrant sur les salaires supérieurs à 3000
  • La troisième instruction crée une table ds_final en supprimant les variables SALAIRE_BRUT et CHARGES

 

 

A noter qu’il est possible d’obtenir la table df_final en une seule commande :

df_final:=ds_source [calc salaire_net:=salaire_brut–charges] [filter salaire_net < 3000] [keep id, salaire_net] ;

Il est également possible de combiner des tables par jointure. Dans l’exemple ci-dessous la table individus est appariée par le SIRET à la table entreprise, un filtre est ensuite appliqué.

individus_clean := individus [rename siret to SIRET] [calc identifier SIRET := SIRET, measure NIR :=NIR, measure sexe :=substr(NIR, 0,1)];
jointure := left_join(individus_clean, entreprises);
femmes := jointure [rename NOM to NOM_ENTREPRISE, EFFECTIF to EFFECTIF_ENTREPRISE][filter sexe = « 2 »][keep NIR, NOM_ENTREPRISE, EFFECTIF_ENTREPRISE];

Un dernier exemple inspiré des scripts du GIT VTL-Lab

/* Validation de variables Indicatrices */

/* On crée une variable V_INDICATRICE_TOUTES où on somme les indicatrices
* On supprime les observations où aucune ou plus d’une indicatrice est à 1 */

Table-indicatrices3 := Table-indicatrices2  [calc V_INDICATRICE_TOUTES :=V_INDICATRICE_a + V_INDICATRICE_b + V_INDICATRICE_c + V_INDICATRICE_d + V_INDICATRICE_e] [filter V_INDICATRICE _TOUTES = 1];