Lors des formations Ishtar, je cite voire présente souvent le logiciel libre OpenRefine, pour vérifier, harmoniser et nettoyer en masse les données que vous pouvez recevoir de bases de données externes avant de les importer dans votre instance Ishtar. Voici des informations supplémentaires pour aller plus loin.
Téléchargement
Pour le télécharger, cela se passe sur le site officiel ; la page est en anglais mais le logiciel est bien traduit en français.
Tutoriels en français
Pour me former en 2017, j’avais surtout lu des tutoriels en anglais, mais je m’étais aussi appuyée sur le formidable tutoriel pense-bête OpenRefine, « Excel aux hormones » pour nettoyage de données, sur Patrimoine et Numérique.
Il existe également les tutoriels vidéo d’Ettore Rizza.
En préparant ce message, je découvre un tutoriel très récent - novembre 2020 - et très complet qui me semble le meilleur lien à vous pointer : Tutoriel OpenRefine 3.4 : nettoyer, préparer et transformer des données, par Mathieu Saby.
Il semble en outre être utilisé lors des formations du consortium MASA (Mémoire des Archéologues et des Sites Archéologiques), donc a priori particulièrement adapté aux archéos.
Et pour se plonger plus rapidement dans le sujet (notamment répondre dès la diapo 3 à la question « que peut faire OpenRefine pour mes données ? »), une introduction très efficace en diaporama : Atelier OpenRefine, Nettoyer et enrichir des données avec OpenRefine, par Maïwenn Bourdic.
Bonne découverte !
Pense-bête Iggdrasil
De mon côté, je partage avec vous ci-dessous les formules qui me servent plus ou moins régulièrement et que j’ai notées dans mon propre pense-bête.
Vérifications
Comparer les valeurs de deux colonnes / vérifier que deux colonnes A et B sont identiques (ou pas)
Colonne A > Facette > Personnaliser la facette textuelle > value == cells["colonne B"].value
Vérifier que des dates sont cohérentes
- Copier la colonne (la transformation en date donne un format non valable pour Ishtar) : Éditer la colonne > Ajouter une colonne en fonction de cette colonne >
value
- Sur la colonne copie, convertir en date : Éditer les cellules > Transformations courantes > En date
- Facette > Facette chronologique ou Facette textuelle permettent de repérer les occurrences non conformes (année 0214 au lieu de 2014, etc.).
Faire une jointure entre deux tables
Sur colonne pivot du projet qui reçoit la jointure : Éditer la colonne > Ajouter une colonne en fonction de cette colonne > cell.cross("nom projet 2","colonne commune").cells["colonne à joindre"].value[0]
Formules de transformation ou d’extraction de données
La plupart des formules suivantes peuvent s’utiliser autant pour modifier une donnée (Colonne concernée > Éditer les cellules > Transformer) que pour extraire de nouvelles données (Colonne concernée > Éditer la colonne > Ajouter une colonne en fonction de cette colonne)
Remplacer une chaîne de caractères par une autre
value.replace("UnMot","UnAutre")
Copier les valeurs de la colonne B dans la colonne A
-
en écrasant :
cells["colonne B"].value
-
en ajoutant à l’existant :
value + " " + cells["colonne B"].value
Passer uniquement la première lettre en majuscule (passer toutes les premières lettres en majuscule est accessible dans Transformations courantes > En initiales majuscules)
toUppercase(value.get(0)) + value.slice(1)
Supprimer les espaces de début et de fin
value.trim()
Accessible également via Éditer les cellules > Transformations courantes > Supprimer les espaces de début et de fin
Rassembler les espaces consécutifs
value.replace(/\s+/," ")
Accessible également via Éditer les cellules > Transformations courantes > Rassembler les espaces consécutifs
Numéro de la ligne
row.index + 1
Longueur d’une chaîne de caractères :
value.trim().length()
Supprimer les 5 premiers caractères
value.substring(5)
Conserver les caractères 5 à 10
value.substring(4,10)
Conserver les caractères après le 10 inclus
value.substring(9,end)
Ne conserver que le premier mot d’une colonne
smartSplit(value," ")[0]
Peut par exemple servir pour extraire le nom d’une personne dans un champ Nom Prénom (ne fonctionne pas avec les cas particuliers, fait gagner du temps pour la majorité)
Ne conserver que le dernier mot d’une colonne
smartSplit(value," ")[-1]
Peut par exemple servir pour extraire le prénom d’une personne dans un champ Nom Prénom
Pour séparer une colonne Nom Prénom de ce type en deux colonnes Nom et Prénom, en version plus robuste
- Récupérer le prénom (= dernier mot)
- Éditer la colonne > Ajouter une colonne en fonction de cette colonne (Prénom) >
smartSplit(value," ")[-1]
- Éditer la colonne > Ajouter une colonne en fonction de cette colonne (Prénom) >
- Récupérer le nom (= tout le reste du contenu de la cellule)
- Éditer la colonne > Ajouter une colonne en fonction de cette colonne (Nom) >
value.substring(0,value.trim().length() - cells["Prénom"].value.trim().length() - 1)
- Éditer la colonne > Ajouter une colonne en fonction de cette colonne (Nom) >
Cela ne traite toujours pas tous les cas, on a ainsi une gestion des noms multiples ou à particule, mais cela ne gère pas les prénoms composés écrits sans tiret… À nettoyer avec la liste des facettes.
Majuscule à la première lettre du second prénom dans un prénom composé (Jean-claude → Jean-Claude)
Après avoir sélectionné (Filtrer le texte) les occurrences avec tiret :
value.slice(0, indexOf(value, "-") + 1) + toUppercase(value.get(indexOf(value, "-") + 1)) + value.slice(indexOf(value, "-") + 2)
Extraire une année (= 4 chiffres consécutifs) au sein d’un texte
value.match(/.*(\d{4}).*/)[0]
Ajouter des zéros initiaux
Par exemple pour un nombre à 4 chiffres :
"0000"[0,4-value.length()] + value
Corriger des numéro INSEE dont le zéro initial a sauté
Selon l’exemple ci-dessus :
"00000"[0,5-value.length()] + value
Convertir un texte en son identifiant textuel (tout en minuscules, pas d’accent, signes typographiques [espaces, virgules, parenthèses] remplacés par des tirets)
value.toLowercase().replaceChars("àâçéèêëîïôûùü", "aaceeeeiiouuu").replace(/[\'\,\;\?\!\=\+\|\/\(\)\[\]\s]/,"-").replace(/[-]+/,"-")
La commande passe la chaîne de caractères en minuscules, remplace toutes les lettres accentuées françaises et le ç par les lettres équivalentes non accentuées, remplace les ponctuations diverses (apostrophe, virgule, point-virgule, point d’interrogation, point d’exclamation, égal, plus, barre verticale (pipe), barre oblique (slash), parenthèses, crochets) et les espaces par un tiret, remplace les tirets consécutifs par un unique tiret.
Elle est notamment utile pour préparer de longues listes de valeur pour import dans les typologies Ishtar.