Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

Atelier OpenRefine
Nettoyer et enrichir des données
avec OpenRefine
Maïwenn Bourdic
OpenRefine, c'est...
  • Un outil opensource et gratuit de nettoyage, harmonisation et
mise en forme de données, alias Excel aux hormones.

  • Soutenu par Google entre 2010 et 2012, puis remis
dans la communauté du libre depuis.

  • Une communauté de développeurs dynamique (y compris
francophone) et des mises à jour régulières.

  • Une installation simple (sans droits Administrateur), utilisation
du logiciel dans le navigateur Internet mais données strictement
en local.


OpenRefine permet...
enrichir les données à partir
de ressources externes

(jeux de données,
Wikidata, données géo)
homogénéiser des occurrences semblables
(AD29 / A.D.29 / Arch. dép. Finistère)
concaténer / déconcaténer
des colonnes / des cellules
transformer un xml en tableur
extraire un contenu
d'une cellule / colonne

"rechercher / remplacer par" XXL
sauvegarder des scripts de
modifications et les réappliquer
à des données semblables
changer facilement les dates
(JJ/MM/AAAA > AAAA)
faire des tris et
filtres puissants
etc.
changer la casse / enlever les
espaces inutiles

gérer des ensembles
(inclusion / exclusion selon des critères)


  • La phase de création du projet est importante (encodage des
accents UTF-8, entêtes de colonnes, sélection du nœud
principal en XML) : l'aperçu est là pour vous aider !

  • Si ça mouline en vain... assurez-vous que le fichier importé
est en local et pas sur le réseau, et transformer votre .ods
en CSV ou .xlsx.


Préliminaires
Logique de pas à pas
OpenRefine en une heure*...
Allons-y, avec un beau fichier
de récolement de numérisation
*à défaut d'une journée
Les basiques 1/3
Filtre de texte
        (dont casse et expressions régulières)


Facettes :
  • compiler toutes les occurrences identiques
  • éditer en masse les occurrences proches
  • corriger en masse sur la base de
regroupements phonétique et de proximité

Mais aussi : facettes par mot, par
cellule vide/remplie, par longueur de contenu,
chronologique...

Le tout cumulable...

"ce qui commence par une lettre minuscule" : ^[a-z]
"ce qui contient 4 chiffres qui se suivent" : [0-9]{4}
Les basiques 2/3
Rechercher / remplacer par :
value.replace ("...","...")
Traitements automatiques :
  • supprimer les espaces consécutifs
  • supprimer les espaces de début / fin de cellule
  • changer la casse : aaa, AAA, Aaa Aaa


Les basiques 3/3
Diviser une colonne / cellule
sur la base d'un dénominateur commun
Concaténer des colonnes

cells["Colonne 1"].value
+
"séparateur"
+
cells["Colonne 2].value
Tout est enregistré
On peut revenir en arrière suite à de mauvaises manipulations...
Ou sauvegarder le script de modifications
pour le réappliquer sur un autre projet !
Rendez-vous...
quelques 172 modifs
                              plus loin
En résumé ...
  • Extraction des dates pour créer une colonne Date
  • Création d'une colonne Dimensions H x L
  • Extraction du photographe
  • Extraction du lieu
  • Ajout des coordonnées géographiques
Des données prêtes pour
  • une transformation en inventaire XML-EAD
Des données prêtes pour
  • faire des statistiques
Lieux des photographies de 1945 (outil : Rawgraphs)
Des données prêtes pour
  • une carte à partir des données géolocalisées
Des données
  • enrichies depuis Wikidata...
Des données prêtes pour
  • enrichir Wikidata
OpenRefine et #archives
  • Nettoyer / harmoniser / indexer / "augmenter" ses données
  • Transformer un tableau / des fichiers textes en XML-EAD
  • Aligner / enrichir ses référentiels
  • Intégrer ses référentiels / données au web sémantique
  • Géolocaliser ses données
Quelques formules de base
rechercher / remplacer par : value.replace("[contenu recherché]","[remplacer par]")

changer le format de date :  value.toDate('yyyy-MM-dd','MMM-yy').toString('dd-MM-yyyy')

extraire une année
: value.match(/.*(\d{4}).*/)[0]

concaténer des colonnes
: cells["colonne 1"].value + "[séparateur]" + cells["colonne 2"].value

garder la première chaîne de caractères
: value.partition(smartSplit(value," ")[1])[0]

garder la dernière chaîne de caractères
: value.partition(smartSplit(value," ")[-1])[1]

enlever les espaces superflus
: value.trim()

créer une colonne avec numéro incrémenté
: rowIndex + 1 (voire : "d_0" + rowIndex + 1)

comparer des colonnes
: if(cells["nom1"].value == cells["nom2"].value, "Y", "N")

convertir dans un champ "... Paul DURAND ..." en "... Paul Durand..." (initiale capitale) :

forEach(value.split(' '), e, if(isNull(e.trim().match(/([A-Z]{4,})/)), e, e.toTitlecase())).join(' ')

croiser des projets différents sur la base d'une colonne clé :
cell.cross("nomduprojetOpenRefine", "nomColonneeCléIntermédiaire")
[0].cells["nomColonneArécupérer"].value
Ressources en ligne
>> Fichiers de l'atelier (jeu de données, script des modifications,
     modifications pas à pas avec captures d'écran)

Utilisez la barre d'espace ou bien les touches fléchées pour naviguer