Open Refine :gem:

Objetivo

Utilizar Open Refine para manejar, validar y limpiar de manera eficiente datos sobre biodiversidad, asegurando una mejor calidad para su publicación.

Sobre la Herramienta

Open Refine es un software creado con el objetivo de pulir datos crudos hasta convertirlos en diamantes :gem:, activos valiosos en la era del BigData .

Este sofware permite visualizar y manipular datos tabulares facilitando mejorar la calidad general de un conjunto de datos. Tiene la apariencia de un software tradicional de hoja de cálculo -similar a Excel, pero funciona como una base de datos. Esto significa que OpenRefine no es adecuado para adicionar nuevas filas de datos, pero es extremadamente poderoso cuando se trata de explorar, limpiar y vincular datos.

Open Refine es un software de código abierto bajo una licencia BSD, se instala localmente por lo cual funciona como una aplicación web personal y de acceso privado, al que se accede desde un navegador web.

Esta herramienta sirve para todo tipo de datos, en este laboratorio se explica su funcionamiento en el contexto de datos sobre biodiversidad estandarizados en Darwin Core

Requerimientos

  • Navegador Chrome o Mozilla Firefox instalado, y configurado como navegador predeterminado.

No utilice Internet Explorer para este laboratorio ya que Open Refine no funciona bien con este navegador web.

Archivo de trabajo

:warning: Estamos puliendo este laboratorio, la guía puede presentar cambios menores de formato y estilo para una mejor navegación y aprendizaje.


Paso 1 - Instalación

Asegúrese de que su navegador predeterminado sea Chrome o Mozilla

Instalación en Windows

  1. Descargue Open Refine versión 3.4.1 + Java para Windows.
  2. Descomprima el archivo descargado y copie la carpeta resultante en el disco local (C:/).
  3. Abra la carpeta y haga doble clic en openrefine.exe.
  4. Aparecerá una ventana de comando (que no debe cerrar) e inmediatamente después su navegador web mostrará una nueva ventana con la aplicación.

Instalación en Mac

  1. Descargue Open Refine versión 3.4.1 + Java para Mac.
  2. Haga doble clic sobre el archivo de descarga y arrastre el icono en la carpeta Aplicaciones.
  3. Haga doble clic en el icono y su navegador web mostrará una nueva ventana con la aplicación.
  4. Si al dar doble clic no abre Open Refine en el navegador, escriba la siguiente dirección en el buscador: http://127.0.0.1:3333/

Paso 2 - Crear un proyecto

Puede cargar datos con diferentes formatos y extensiones: TSV, CSV, SV, Excel (.xls y .xlsx), JSON, XML, RDF as XML y datos de Google Docs.

2.1. Abrir un nuevo proyecto

Abra Open Refine y diríjase a la pestaña Create Project. Para cargar el archivo siga la ruta Get data from > This Computer, y haga clic en Choose Files (Fig. 1).

Figura 1. Creación de un proyecto en Open Refine.

2.2. Selección del archivo

Seleccione el archivo Datos_Estructurado.xlsx que descargó al incio del laboratorio y haga clic en Next (Fig. 1).

Puede subir varios archivos a la vez, el software unirá los archivos basados en los encabezados de las columnas.

2.3. Configuración del archivo

Tras seleccionar el archivo aparecerá un panel de configuración, este le permite especificar el tipo de archivo que cargó y configurar la manera en la que los datos son leídos (Fig. 2).

Open Refine hace una interpretación automática del tipo de archivo, codificación del texto y filas de encabezado, entre otros. El conjunto de datos de ejemplo de este laboratorio es interpretado de manera correcta y no necesita ajustes adicionales.

Si sube sus propios datos o utiliza otro formato debe fijarse en la vista previa del archivo y ajustar la configuración de lectura detenidamente (Fig. 2).

Figura 2. Opciones para configurar la lectura y carga de los datos para un archivo Excel (.xls y .xlsx): A. tipo de archivo, B. hojas a importar, C.selección de filas, D. carga de filas.

  • A. Tipo de archivo, permite configurar el tipo de la fuente de datos
  • B. Hojas a importar, si carga uno o varios archivos con múltiples hojas, puede seleccionar que hojas desea importar y cuáles no.
  • C. Selección de filas, permite seleccionar la fila que se convertirá en el encabezado de las columnas, ignorar filas, entre otros.
  • D. Carga de filas en blanco, permite especificar si serán cargadas y como se realizará la carga.

2.4. Personalización del proyecto y carga del archivo

Cambie el nombre del proyecto, en la esquina superior derecha verá un cuadro de texto en el que puede cambiar el nombre del proyecto, nómbrelo Datos_OR y haga clic en el botón Create Project (Fig. 3). Opcionalmente puede añadir Tags (etiquetas) para poder organizar y filtrar los proyectos en la aplicación.

Figura 3. Configuración del proyecto, ajuste de nombre, adición de etiquetas y creación.

Espere a que cargue el archivo, esto puede tomar un tiempo dependiendo del tamaño del mismo.

Paso 3 - Faceting

Es un método para filtrar los datos en conjuntos más pequeños facilitando la validación y limpieza de los datos, puede hacerse para texto, números y fechas.

3.1 Correcciones masivas

3.1.1. Crear un Text Facet

Diríjase a la columna class, haga clic en el menú de la columna y siga la ruta Facet >Text Facet (Fig. 4).

Figura 4. Creación de un Text Facet.

3.1.2. Organizar el Text Facet

El Text Facet creado aparecerá a la izquierda de la aplicación, verá una ventana con el nombre de la columna y el Facet que acaba de crear (Fig. 5). Haga clic en count para organizar las clases de la más a la menos abundante y en name para organizarlas en orden alfabético.

Figura 5. Vista del Text Facet y las opciones para organizar las opciones de texto de la columna.

3.1.3. Corrección de los datos

Corrija las inconsistencias en los nombres de las clases Aves y Mammalia. Para esto acerque el cursor al valor que desea corregir y haga clic en Edit, luego en el cuadro de texto que aparece corrija el error y haga clic en Apply (Fig. 6). Todos los valores serán corregidos de manera automática y las celdas se transformarán de forma masiva.

Figura 6. Corrección masiva de la columna class usando un Text Facet.

Realice el mismo proceso con la columna basisOfRecord y sex ajustándolas al vocabulario controlado de cada elemento (Refiérase al laboratorio de estandarización) (Fig. 7).

Figura 7. Corrección masiva de las columnas basisOfRecord y sex usando un Text Facet.

Al finalizar este ejercicio diríjase en el menú lateral y seleccione la opción Remove All (Fig. 8). Así removerá todos los Facets y Filtros que tenga en uso.

Figura 8. Remover todos los facets y filtros activos.

3.2 Limpieza de espacios en blanco

Diríjase a la columna individualCount, haga clic en el menú de la columna y realice un Text Facet. A su izquierda aparecerá la ventana con el nombre de la columna y el Facet que se realizó (Fig. 9).

Figura 9. Vista del Text Facet y las diferentes formas de documentación del elemento individualCount.

Aunque a simple vista los datos se encuentran sin errores, al realizar este procedimiento vemos que el programa ha detectado espacios extra y por eso nos muestra cuatro opciones diferentes para el valor 1. Corrija las inconsistencias desde el menú de la columna individualCount, siguiendo la ruta Edit Cells > Common transforms > Trim leading and trailing whitespace, verá un mensaje de notificación que le indicará en cuéntas celdas se eliminaron espacios (Fig. 10).

Figura 10. Transformación de la columna para eliminar dobles espacios y espacios al final del texto.

Observe la ventana del Facet de individualCount, notará que ahora solo existe una opción y que los espacios fueron eliminados.

Al finalizar este ejercicio diríjase al menú lateral y seleccione la opción Remove All. Así removerá todos los Facets y Filtros que tenga en uso.

3.2 Detección de duplicados

Diríjase a la columna catalogNumber, haga clic en el menú de la columna y siga la ruta Facet > Customized facets > Duplicates facet, a su izquierda verá la ventana del Facet (Fig. 11).

Podemos ver que el programa ha detectado valores únicos false y valores duplicados true (Fig. 11). Haga clic en true y verá los registros. De esta manera se pueden detectar los duplicados para un análisis posterior. En este caso corrija el registro de Feb 2001 cambiando por 46-2300MI2008AV0248 tanto en catalogNumber como en occurrenceID (Fig. 11).

Figura 11. Revisión de los registros duplicados y corrección de los identificadores.

Al finalizar este ejercicio diríjase al menú lateral y seleccione la opción Remove All (Fig. 8). Así removerá todos los Facets y Filtros que tenga en uso.

Paso 4 - Filtros

4.1 Corrección combinando filtros y funciones

4.1.1. Corrección elemento scientificName

Diríjase a la columna scientificName, haga clic en el menú de la columna y luego en Text filter, aparecerá la ventana del Filtro. Escriba en el campo de texto sp. y realice un Text Facet en scientificName para visualizar los registros con este valor (Fig. 12).

Figura 12. Aplicación de un filtro de texto a la columna scientificName e identificación de nombres científicos a corregir.

Este tipo de identificación parcial (sp.) no debe documentarse en el elemento scientificName, para ello se emplea el elemento DwC verbatimTaxonRank.

Realice un Text Facet en verbatimTaxonRank y edite masivamente reemplazando las celdas vacías (blank) con sp., haga clic en Apply (Fig. 13).

Figura 13. Documentación masiva del elemento verbatimTaxonRank.

Diríjase nuevamente al menú de la columna de scientificName y siga la ruta Edit cells > Transform, luego ingrese la fórmula value.replace(" sp.",""), note que en la pestaña Preview puede ver la vista previa del resultado al aplicar la fórmula, y corroborar si es el cambio deseado (Fig. 14). Haga clic en OK y aparecerá un mensaje de confirmación de que los cambios se han realizado.

Figura 14. Transformación masiva de los datos usando comando value.replace() del lenguaje GREL de Open Refine.

Empleando el comando value.replace se puede sustituir cualquier valor de una columna poniendo dentro de un paréntesis el valor a buscar (ej. “ sp.”), entre comillas [ “ ] y luego separado por una coma [ , ] el valor de reemplazo - en este caso ninguno por lo cual se ponen unas comillas vacías [””].

:brain: Para conocer más del lenguaje de programación GREL de diríjase a la documentación de Open Refine.

2. Corrección elementos recordedBy identifiedBy

Corrija las columnas recordedBy e identifiedBy empleando la función value.replace del punto anterior, reemplace en cada una el carácter de separación entre los nombres "; " por el que acepta el estándar Darwin Core actualmente para este elemento " | " ( Refiérase al laboratorio de estandarización).

Al finalizar este ejercicio diríjase al menú lateral y seleccione la opción Remove All (Fig. 8). Así removerá todos los Facets y Filtros que tenga en uso.

4.2 Filtros con expresiones regulares

4.2.1. Corrección elemento family

Diríjase a la columna family y realice un Text Facet. Haga clic en el menú de la columna y luego en Text filter. Aparecerá la ventana del Filtro. Marque la casilla regular expression. Escriba en el campo de texto la expresión regular .*(?:(?!ae).).$ esta expresión permite excluir todas las palabras de la columna que no terminan en ae, correspondiente a las últimas letras de la declinación en latín para la categoría taxonómica de familia (idae, ceae) (Fig, 15).

Figura 15. Uso de expresiones regulares en GREL para filtrar la columna family.

Podrá observar como los registros que no corresponden a la categoría de familia han sido filtrados, usted puede editarlos haciendo uso de las opciones aprendidas en pasos previos. En este caso particular reemplace Bolitoglossa, que corresponde a un género, por Plethodontidae, la familia a la que pertenece el nombre científico (Fig. 15).

:brain: Para conocer más de las expresiones regulares diríjase a la documentación de Open Refine.

Al finalizar este ejercicio diríjase en el menú lateral y seleccione la opción Remove All (Fig. 8). Así removerá todos los Facets y Filtros que tenga en uso.

4.2.2. Corrección elmentos scientificName identificationQualifier

Diríjase a la columna scientificName, haga clic en el menú de la columna y luego en Text filter, aparecerá la ventana del Filtro. Marque la casilla regular expression. Escriba en el campo de texto la expresión regular [.] y realice un Text Facet para visualizar los registros con este elemento (Fig. 16).

Figura 16. Uso de expresiones regulares en GREL para filtrar y corregir las columnas scientificName identificationQualifier.

Podrá observar los registros que cumplen con el criterio de la expresión regular. El elemento identificationQualifier está diseñado para almacenar este tipo de información y por su parte el elemento scientificName debe encontrarse sin calificadores.

Para hacer el ajuste realice un Text Facet en el elemento identificationQualifier para editar masivamente, de manera que en los blank se documente “cf. sowelli” y se borre en el scientificName (Fig. 16).

El grado de incertidumbre de la identificación puede indicarse agregando varios términos, como aff. y cf. al nombre científico. El término calificativo se aplica a la parte del nombre que sigue inmediatamente al calificador y se pueden colocar delante de cualquier elemento del nombre.

  • aff. Similar o limítrofe, indica que una especie tiene afinidad con la especie mencionada, pero no es idéntica a ella.
  • cf. Comparar con, describe que un espécimen que es difícil de identificar e indica diversos grados o tipos de incertidumbre sobre el taxon, y pueden usarse de manera diferente según el autor.

Finalmente estos registros deben quedar documentados con el género Carollia en scientificName y en identificationQualifier el valor cf. sowelli (Fig. 17).

Figura 17. Documentación corregida y correcta de los elementos scientificName identificationQualifier.

Al finalizar este ejercicio diríjase al menú lateral y seleccione la opción Remove All (Fig. 8). Así removerá todos los Facets y Filtros que tenga en uso.

Paso 5 - Conjuntos

Diríjase a la columna recordedBy, haga clic en el menú de la columna y luego en Text facet, aparecerá la ventana del Facet con más de 200 opciones (choices) diferentes (Fig. 18).

Figura 18. Facet y opciones del elemento recordedBy.

En la parte superior derecha verá el botón Cluster haga clic (Fig. 18), aparecerá la ventana de Cluster & Edit para la columna recordedBy (Fig. 19).

Podrá ver la siguiente información:

  • Cluster size: La cantidad de versiones del dato que el algoritmo identifica como similares.
  • Row count: El número de registros por cluster.
  • Values in cluster: Los valores seleccionados por el algoritmo para esa agrupación y el número de registros por valor.
  • Merge?: En este cuadro se selecciona si los valores se fusionan en el valor que propone el algoritmo por defecto o el documentado por el usuario.
  • New cell value: En este campo de texto se puede escribir un valor completamente nuevo para el cluster. También se puede hacer clic en cualquier valor para asignarlo como valor por defecto.

Figura 19. Detalle de la ventana ventana de Cluster & Edit para hacer realizar clusters y las opciones de configuración disponibles.

Vaya a Keying Function, seleccione ngram-fingerprint y en Ngram Size escriba 1 (Fig. 19).

:brain: Para conocer más acerca de los algoritmos diríjase a la documentación de Open Refine.

  • Para el primer cluster asigne un valor nuevo, para esto vaya al cuadro de texto de New cell value y escriba David H | Arango A | Bedoya J (dejando espacios sencillos). Luego haga check en el cuadro de Merge? para ese cluster (Fig. 19).

  • Para el segundo cluster haga clic en Vargas I (la primera opción: sin espacios adicionales), automáticamente el valor en New cell value cambiará y la casilla Merge? se chequeará (Fig. 19).

  • Con los restantes evalúe si se deben o no agrupar dependiendo de las opciones disponibles y escoja en tal caso si selecciona o no la casilla.

Una vez escoja las entradas que desee fusionar vaya a Merge Selected & close para agrupar los valores y volver a la ventana principal.

Observe que la cantidad de opciones de datos disminuyó y que la primera entrada de nombres ha cambiado, es decir la información se simplificó y organizó correctamente gracias a este proceso.

Al finalizar este ejercicio diríjase al menú lateral y seleccione la opción Remove All. Así removerá todos los Facets y Filtros que tenga en uso.

Paso 6 - Servicios externos vía API's

En este ejercicio se utiliza el API de GBIF para verificar la validez taxonómica de una lista de nombres determinada.

Árbol taxonómico GBIF

GBIF fácilita un árbol taxonómico robusto a partir de la agrupación de reconciliación de diversos grupos biológicos y proveedores de contenido (Tabla 1), cada uno de las cuales es soportado por una comunidad de científicos. Este árbol permite la integración de múltiples fuentes de datos fácilitando las busquedad y descargas del portal, y esta en constante actualización.

Tabla 1. Principales fuentes a partir de las cuales se consolida el árbol taxonómico de GBIF

Proveedor * Enlace
CoL http://www.catalogueoflife.org/
International Barcode of Life project (iBOL) https://ibol.org/
World Register of Marine Species (WoRMS) http://www.marinespecies.org/
Index Fungorum http://www.indexfungorum.org/
Integrated Taxonomic Information System (ITIS) http://www.itis.gov/
International Plant Names Index http://www.ipni.org/
The Paleobiology Database http://www.paleodb.org/

*Para una lista completa de los proveedores y descripción de los mismos ingrese al GBIF Backbone Taxonomy

Preparación de los datos

Elimine los facets o filtros que tenga activos. Para tener una aproximación inicial al funcionamiento del API diríjase a la columna recordedBy y realice un Text Facet. Haga clic en la opción count y seleccione al investigador(es) con mayor número de registros asociados (Vargas I) (Fig. 20).

Figura 20. Filtro por conteo en recordedBy y selección de la opción con más registros.

Vaya a la columna scientificName. Es importante que estos nombres no contengan calificadores como aff., cf., sp. o spp., de ser este el caso, elimínelos como se mostró en los pasos anteriores y deje solamente como valor el nombre científico sin autoría.

Cree la columna NomAPI

Para realizar la validación a través del API es necesario que los espacios en blanco en cada nombre científico sean reemplazados por un valor que reconozca el API (“%20”).

Para ello vaya a Edit column > Add column based on this column e introduzca la expresión (tal y como aparece) _value.replace(" ","%20")_ y nombre la columna NomAPI (Fig. 21).

Figura 21. Creación de la nueva columna NomAPI

LLamado al API a partir del nombre científico

Cree una nueva columna llamada validTax a partir de la columna NomAPI, para esto siga la ruta Edit column > Add column by fetching URLs… e introduzca la expresión "http://api.gbif.org/v1/species/match?strict=true&name="+value. En el campo Throttle delay escriba 5, haga clic en OK y espere a que finalice el proceso (Fig. 22).

Figura 22. Creación de la nueva columna validTax

El tiempo de consulta depende de la cantidad de información, la velocidad de la red, y la memoria RAM del computador - para este caso solo tardará un par de minutos.

Podrá observar que en cada celda de la columna validTax aparecen expresiones a partir del llamado al API de GBIF para cada nombre científico consultado (Fig. 23).

Figura 23. Visualización de la columna validTax

Extracción de la información obtenida

Para observar claramente los resultados, y obtener la validación delnombre científico agregue una columna basada en validTax Edit column > Add column based on this column llamada Match a partir de la columna validTax, para esto siga la ruta Edit column > Add column based on this column e introduzca la expresión value.parseJson().get("matchType")(Fig. 24).

Figura 24. Creación de la columna Match a partir de la información obtenida del API

Validación del nombre científico

Realice un Text facet en la columna match y seleccione Fuzzy, esta opción denota los nombres científicos con los que no hubo coincidencia exacta entre el conjunto de datos y el árbol taxonómico de GBIF. No se encuentra coincidencia total para este caso con Dermanura cinereus ni Dermanura glaucus (Fig. 25).

Figura 25. Resultado del Facet para Fuzzy

GBIF también le retorna a través del API una posible opción de nombres científicos válidos de acuerdo a los que no reconoció totalmente, evalué estos nombres e indentifique si debe hacer una corrección.

Agregue una nueva columna llamada validName a partir de la columna validTax, para esto siga la ruta Edit column > Add column based on this column e introduzca la expresión value.parseJson().get("species")(Fig. 27) y haga clic en OK(Fig. 26).

Figura 26. Creación de la nueva columna validName

Haciendo un Text Facet en la columna validName verá que GBIF reconoce que la especie que seguramente desea documentar es Dermanura cinerea y Dermanura glauca, respectivamente (Fig. 27A). Corrija y edite entonces las inconsistencias en la columna scientificName de acuerdo al validName (Fig. 27B).

Figura 27. Corrección del nombre científico en OpenRefine

Habiendo realizado el proceso de verificación y limpieza de nombres científicos elimine las columnas adicionales que se crearon para este fín (NomAPI, validTax, Match y validName). Para ello siga la ruta Edit column > Remove this column (Fig. 28).

Figura 28. Ruta para eliminar una columna

Paso 7 - Modificación masiva de celdas

Para hacer una modificación en todas las celdas del archivo, diríjase a la primera columna presente All ,seleccione el menu desplegable y la opción Transform (Fig. 29).

Figura 29. Selección del menu para hacer el cambio masivo

En la pestaña emergente introduzca la fórmula value.trim().replace(/\u00A0/,' ').replace(/\s+/,' '), esta elimina dobles espacios, saltos de línea y algunos carácteres no reconocibles. Al hacer clic en OK le mostrará otra pestaña donde puede elegir las columnas a las que desea aplicarles la modificación. Deje la opción por defecto con todas las columnas y de clic en OK (Fig. 30).

_Figura 30. Pestaña para introducir la función de transformaciñon, y para seleccionar las columnas a las cuales se aplica la función _

El proceso puede tardar algunos segundos dependiendo del número de columnas y celdas.

Paso 8 - Exportación

8.1 Exportar un archivo

Existen múltiples maneras de exportar los archivos en Open Refine, la siguiente es la más confiable y con la mayor cantidad de opciones. Dirijase a la esquina superior derecha y siga la ruta Export > Custom tabular exporter… y le mostrara la ventada de exportación (Fig. 31).

En la pestaña Content de la ventana emergente tiene encontrará varias opciones para personalizar la exportación, entre estas:

  • Select and Order Columns to Export: le permite seleccionar las columnas y el orden en que se van a exportar.
  • Ignore facets and filters and export all rows: si al momento de exportar el archivo tiene Facets y Filtros activos, esta opción le permitirá ignorarlos, descargando así todo el conjunto de datos.

Figura 31. Ruta para expotar el archivo y ventana content

Vaya a la pestaña Download, donde podrá configurar el formano en el cuál se descargan los datos:

  • Line-based text formats/Other formats: si va a descargar los datos en formato de texto plano le permite selecionar el separado de las olumnas.
  • **Line separator**:si va a descargar los datos en formato de texto plano le permite seleccionar el separador de las filas.
  • Character encoding: le permite seleccionar la codificación de los datos. Se recomienda siempre utilizar UTF-8

Para este caso, use Other formats y elija la opción Excel in XML(.xlsx), haga clic en Download y guarde su archivo (Fig. 32).

Figura 32. Selección del formato de descarga del conjunto de datos

8.2 Exportar e importar un proyecto

Open Refine también le ofrece la posibilidad de exportar el proyeco completo, esto permite descargar un archivo que contiene toda la información que tenia el proyecto (datos e histórico de cambios). Este archivo se puede utilizar para trabajar OpenRefine desde otro equipo. Para hacerlo diríjase a la esquina superior derecha y siga la ruta Export > OpenRefine project archive to file y guarde su archivo (Fig. 33)

Figura 33. Exportación del proyecto

Los proyectos exportados tienen la extensión”.openrefine.tar.gz” y no es necesario descomprimirlos para usarlos. Solamente abralos con el siguiente procedimiento.

Para importar el proyecto, abra Open Refine y diríjase a la pestaña Import Project. Haga clic en Choose File y seleccione el archivo datos_Estructurados.openrefine.tar.gz y escoja la opción Import Project (Fig. 34).

Figura 34. Importación de un proyecto en OpenRefine


¡Felicitaciones! :raised_hands: Has aprendido a utilizar Open Refine para validdar y limpiar tus datos sobte biodiversidad.


Atribución y uso de los laboratorios

La licencia CC-BY te permite usar, redistribuir y construir sobre estos contenidos libremente. :open_hands: Queremos que compartas estos laboratorios y que juntos logremos datos sobre biodiversidad de mejor calidad.

Citación sugerida

SiB Colombia (2020). Laboratorios de datos, Ciclo de formación virtual. Consultado a través del SiB Colombia. Disponible en https://sib-colombia.github.io/Formacion/


Fuentes:

Verborgh, R., & De Wilde, M. (2013). Using OpenRefine. Packt Publishing Ltd.