Workshop uso del Data Refiner

Descripción

Con el objetivo de incorporar nuevas capacidades de Data Governance en Plataforma se ha incluido un nuevo módulo, denominado DataRefiner accesible desde la entrada de menú Gobierno del Dato.



El objetivo de este componente es “refinar” la información que se carga o que se extrae de plataforma. Para esto permite:

  • Que un usuario final cargue desde una UI datos desde diversos lugares, por ejemplo desde su propio PC, desde una URL o bien desde información residente en la propia plataforma

  • La herramienta permite cargar datos en los principales formatos, entre ellos Excel, XML, JSON, CSV,…

  • El usuario puede trabajar con estos datos con un interfaz “Excel-like” realizar un perfilado de los datos, incluyendo limpieza, mejora, reestructuración o conciliación de estos.

  • Los datos “refinados” podrán descargarse como ficheros o bien cargarse en plataforma como Entidad.

Tecnología en que se basa Data Refiner

Nuestro DataRefiner se basa en el software OpenRefine al que se le han añadido un conjunto de extensiones para trabajar con la plataforma.

Open Refine es una herramienta Java open-source (licencia BSD-3) basada en Java que con un interfaz web al estilo Excel permite cargar datos provenientes de diferentes sitios y en diferentes formatos, entenderlos, limpiarlos, conciliarlos y mejorarlos.

Primero hay que avisar que el concepto de OpenRefine es que puedas hacer las transformaciones desde tu propio ordenador, pero en lugar de utilizar una aplicación lo hagas desde tu navegador

OpenRefine se encuentra en github: OpenRefine

Para encontrar más información podéis acceder a su wiki: https://github.com/OpenRefine/OpenRefine/wiki/Documentation-For-Users

y al manual de usuario

manual de usuario open refine

Uso desde la interfaz de usuario

Ejemplo 1 Ingestar ficheros url externa

Ingestar ficheros por interfaz de usuario desde una url externa.

Url del ejemplo: https://www.iwight.com/documentlibrary/download/transparency-data-april-2013-csv

Ejemplo 2 Ingestar ficheros locales

Ingestar ficheros por interfaz de usuario desde el PC.

 

Ejemplo 3 transformación sencilla

Transformamos la columna Amount al tipo numérico.

Edit cells>Common transforms>to number

Algunos de los registros no se han transformado bien por lo que ahora le aplicaré un Facet seleccionando en la columna amount:

Facet>Numeric Facet

Vemos que hay elementos que no se han transformado porque hay una coma en los separadores de los miles.

Así que puedo transformarlo con la herramienta y su lenguaje GREL (Google Refine Expression Language). Iré a la columna Amount, seleccionaré Edit cells>Transform y en la transformación indicaré value.replace(',','')

Repetimos:

Edit cells>Common transforms>to number

y vemos que ya todos están en formato númerico.

Ejemplo 4 transformaciones más avanzadas

Puedo aplicar otras transformaciones más avanzadas, como derivar una columna desde otra aplicando transformaciones.

Para eso me pondré en la columna Date , seleccionaré Edit column>Add column based on this column

En esta aplicaré la transformación de formato de fecha:

value.toDate('dd.mm.yy').toString('yyyy-mm-dd')

Y luego le aplicaré Edit cells>Commons Transformations>To date

NOTA

Utilizaremos Extract… para obtener el historial de cambios realizados sobre el proyecto para poder aplicarlos en otros proyectos con la misma estructura, también para poder usarlos en el api rest que podemos invocar del datarefiner de la plataforma.

Ejemplo 5 Exportar datos a distintos formatos

Mostraremos como exportar datos a distintos formatos de fichero.

Ejemplo 6 Exportar datos a la plataforma

Exportar datos a la plataforma creando una ontología nueva.

El token se rellena con el oauth token, marcamos new ontology y le damos un nombre.

Ejemplo 7 Pivotar datos

 

Creamos un proyecto con el fichero.

Seleccionaré la columna Country Name y seleccionaré Transpose>Transpose cells across columns into rows

Separamos la columna year en dos columnas:

Edit column>Split into several columns

Renombramos las columnas a year y a life expectancy.

Ejemplo 8 Importar datos desde una conexión con onesaitplatform

 

Formulario de conexiones

Use Proxy, Proxy y ProxyPort: Se rellenarán en caso de tener que utilizar un proxy.

Name: Será el nombre de la conexión.

Host: El Host de la plataforma en este caso estamos indicando la del lab.onesaitplatform.com

User: Usuario de la Onesait platform con el que se pretende conectar para tener acceso a sus recursos.

Vertical: En caso de usar verticales debe rellenarse.

Password: Contraseña del usuario para acceder a la plataforma.

 

Nos conectaremos y aparece editor de consultas.

Obtendremos los datos de la entidad de ejemplo Helsinkipopulation

Dependiendo de la consulta ontendremos los datos de una manera u otra.

Select * from…

Select Helsinki from…

 

Refinar ficheros desde el api datarefiner

Podemos realizar las mismas operaciones que realizamos desde la interfaz de usuario, para lo cual tan sólo tenemos que rellenar el campo operations con los pasos que podemos obtener de una manera sencilla pulsando el botón Extract… desde la interfaz de usuario. Pondremos unos ejemplos:

Ejemplo 1 uso desde api

refinaremos el fichero que hemos usado para el ejemplo de pivote, añadiendo las operaciones que realizamos anteriormente

{ "op": "core/transpose-columns-into-rows", "combinedColumnName": "year", "startColumnName": "2005", "columnCount": 5, "ignoreBlankCells": true, "fillDown": true, "prependColumnName": true, "separator": ":", "keyColumnName": null, "valueColumnName": null, "description": "Transpose cells in 5 column(s) starting with 2005 into rows in one new column named year" }, { "op": "core/column-split", "engineConfig": { "facets": [], "mode": "row-based" }, "columnName": "year", "guessCellType": true, "removeOriginalColumn": true, "mode": "separator", "separator": ":", "regex": false, "maxColumns": 0, "description": "Split column year by separator" }, { "op": "core/column-rename", "oldColumnName": "year 2", "newColumnName": "life expectancy", "description": "Rename column year 2 to life expectancy" }, { "op": "core/column-rename", "oldColumnName": "year 1", "newColumnName": "year", "description": "Rename column year 1 to year" }

y seleccionando como exportype html por ejemplo.