« OpenRefine/Nettoyage des données » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
2le2im-bdc (discussion | contributions)
2le2im-bdc (discussion | contributions)
Ligne 51 : Ligne 51 :


===Transformations directes===
===Transformations directes===
*'''forEach'''(value.split("-"), v, v.toTitlecase()).join("-")
*'''value'''(1,5) qui signifie reprendre les valeurs ayant la position de 1 à 5 dans la nouvelle colonne<ref name="video 2"/>.
*'''value'''(1,5) qui signifie reprendre les valeurs ayant la position de 1 à 5 dans la nouvelle colonne<ref name="video 2"/>.
* '''value''' + " " + cells["nom de la colonne"].value<ref>{{Lien web
* '''value''' + " " + cells["nom de la colonne"].value<ref>{{Lien web

Version du 28 janvier 2020 à 21:47

Une fois l'analyse des données effectuées, on peut se lancer dans le nettoyage de celles-ci.

Il existe au moins deux manières principales de nettoyer des données : travailler individuellement sur chacune de celles-ci ou de faire des modifications en masse. OpenRefine permet les deux mais évidemment son principal avantage réside dans les transformations de masse.

Modifications individuelles

Chaque cellule du tableur affiché dans OpenRefine peut être modifiée individuellement. Cela est aussi possible sur les facettes elles-mêmes.

Journal des actions

OpenRefine offre dans la zone de gauche de l'interface de traitement des données un journal des actions et transformations opérées. Cela permet de revenir en tout temps en arrière, y compris jusqu'à la première action.

Ce journal des actions peut aussi être exporté (via "Extraire") afin de pouvoir être rejoué (via "Appliquer") tel quel sur un nouveau ensemble de données. Cette fonctionnalité est très pratique si on travaille sur plusieurs fichiers similaires ou sur plusieurs versions d'un même fichier (par exemple fichier mis à jour régulièrement).

Modifications en masse

Groupe

À partir d'une liste de termes obtenus par la demande d'une facette, ou simplement en choisissant Éditer les cellules->Grouper et éditer, OpenRefine offre une proporition de regroupement des valeurs par similitude. À partir de cette visualisation, il est possible de procéder à des fusions de termes sous une même valeur. Voir à ce sujet la video no 1 d'introduction de 2011.

Chaînes de caractères

Il existe de nombreuses fonctions GREL pour manipuler les chaînes de caractères :

  • pour les découper (trim(c) strip(c) chomp(c1, c2) substring(c, 0, 10) split(c1, c2)),
  • pour changer la casse (toLowercase(c) toUppercase(c) toTitlecase(c)),
  • pour calculer ou compter la chaîne (length(c) contains(c1, c2)),
  • etc.

Dates

Typer une colonne en date

Transformer le format d'une colonne en date (de type aaaa-mm-jjT00:00:00Z, soit jusqu'à l'heure !) permet d'utiliser la facette chronologique, et donc la jauge temporelle.

Pour ce faire : Clic sur la colonne -> Editer les cellules -> Transfomations courantes -> En date.

Un conseil : dupliquer la colonne date pour faire la manipulation sur un double...

Source : le blog de Maïwenn Bourdic[1].

Changer le type de date

Clic sur la colonne -> Editer les cellules -> Transformer -> la commande GREL :

value.toDate('yyyy-MM-dd','MMM-yy').toString('dd-MM-yyyy')

Source : le blog de Maïwenn Bourdic[2].

GREL

GREL est un acronyme qui signifie General Refine Expression Language.

Transformations directes

  • forEach(value.split("-"), v, v.toTitlecase()).join("-")
  • value(1,5) qui signifie reprendre les valeurs ayant la position de 1 à 5 dans la nouvelle colonne[3].
  • value + " " + cells["nom de la colonne"].value[4] permet de concatener les valeurs de deux colonnes dans une troisième.
  • value.log()[5].
  • value.parseJson().responseData.language[6].
  • value.replace("quelque chose","par quelque chose d'autre")[5]>.
  • value.substring(2) qui signifie reprendre tous les caractères moins ceux ayant les deux premières positions[3].
  • value.toDate('yyyy-MM-dd','MMM-yy').toString('dd-MM-yyyy') pour changer le type de date[2].

Transformations conditionnelles

  • if(cells["titre d'une autre colonne"].value, value + "un texte", value) qui nécessite que l'autre colonne dispose de valeur de requête vrai ou faux. Si c'est le cas alors on peut utiliser if (si) le valeur est vraie alors ajoute au texte existant un texte, sinon on laisse la valeur telle quelle[3].
  • if(isBlank(cells["colonne 1"].value), " - ", cells["colonne 1"].value) + " - " + if(isBlank(cells["colonne 2"].value), " - ", cells["colonne 2"].value) + " - " + if(isBlank(cells["colonne 3"].value), " - ", cells["colonne 3"].value) + " - " + if(isBlank(cells["colonne 4"].value), " - ", cells["colonne 4"].value) pour concatener le contenu de 4 colonnes dont certaines ne disposent pas de valeur[7].
  • not(value.startsWith("quelque chose"))[3].
  • with(value.parseJson()[0],pair, pair.lat + ',' + pair.lon)[6].

Références

  1. Maïwenn Bourdic, « Typer une colonne en date », sur https://www.patrimoine-et-numerique.fr, (consulté le 6 décembre 2019).
  2. 2,0 et 2,1 Maïwenn Bourdic, « Changer le type de date », sur https://www.patrimoine-et-numerique.fr, (consulté le 7 décembre 2019).
  3. 3,0 3,1 3,2 et 3,3 Voir video 2 de 2011
  4. (en) Illionois University Library, « Combining Cell Values », sur https://guides.library.illinois.edu/openrefine, (consulté le 28 janvier 2020).
  5. 5,0 et 5,1 Voir video 1 de 2011
  6. 6,0 et 6,1 Voir video 3 de 2011
  7. Maïwenn Bourdic, « Concatener », (consulté le 28 janvier 2020).