Workshop de uso de DataRefiner
Disponible desde la versión 2.3.0-Immortal
- 1 Introducción
- 2 Tecnología en que se basa DataRefiner
- 3 Cómo usar DataRefiner
- 3.1 Crear un proyecto desde una URL externa
- 3.2 Otros ejemplos de uso
Introducción
Con el objetivo de incorporar en Onesait Platform nuevas capacidades de Data Governance, se ha incluido un nuevo módulo denominado DataRefiner, cuyo objetivo es el de «refinar» la información que se carga o que se extrae de la Plataforma.
Este módulo va a permitir:
Que un usuario cargue desde una interfaz de usuario datos desde diversos orígenes, como por ejemplo desde su propio ordenador, 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, etc.
El usuario puede trabajar con estos datos con un interfaz excel like para 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 una Entidad de la Plataforma.
Tecnología en que se basa DataRefiner
El módulo de DataRefiner se basa en OpenRefine, una herramienta Java open source con licencia BSD-3 y 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.
OpenRefine, como proyecto de código abierto, se encuentra disponible en GitHub para su descarga. Para poder integrarla en Onesait Platform, se han desarrollado una serie de extensiones que la han optimizado y hecho compatible.
La documentación del proyecto se encuentra disponible desde su página web, por lo que si se está interesado en conocer cómo iniciar un proyecto, explorar y transformar datos o exportar los resultados, os recomendamos acudir a ella.
Cómo usar DataRefiner
Este módulo se encuentra disponible en el menú de Machine Learning e IA > Herramienta Data Refiner.
Crear un proyecto desde una URL externa
Para este ejemplo se hará uso de este dataset de datos en formato CSV perteneciente al ayuntamiento de isla de Wight: https://www.iwight.com/documentlibrary/download/transparency-data-april-2013-csv
Tras acceder a la herramienta, se mostrará el listado de proyectos disponibles. Para crear uno nuevo, se pulsará en el botón de «Create» situado en la parte superior derecha de la pantalla.
Se mostrará entonces un listado con los distintos orígenes de datos. De este las opciones, se seleccionará la de «Web Addresses (URLs)»
Una vez introducida la URL del archivo CSV comentado previamente, se pulsará en el botón de «Next»:
Se mostrará una pantalla durante unos segundos indicando que se está cargando la información, para a continuación mostrarse todos los datos en formato tabla:
Esta pantalla forma parte del análisis de datos, pudiendo configurar cómo se cargan los datos y definir el formato en el que vienen. Por ello, en la parte inferior de la pantalla se cuenta con una serie de opciones de configuración de la carga, que será común a todos los orígenes de datos.
Una vez que los datos estén tal como se necesiten, se pulsará en el botón de «Create Project»:
Aparecerá una mensaje indicando que se está creando el proyecto, e inmediatamente en cuanto se termine de generá, se mostrará el proyecto, con un ejemplo de diez registros.
Para regresar al listado de proyectos, únicamente habrá que pulsar en el botón de «Back»:
En el listado de proyectos se podrá ver el nuevo proyecto que se acaba de crear:
Otros ejemplos de uso
A continuación se muestran una serie de ejemplos de uso de DataRefiner con diferentes orígenes.
Ingestar archivos locales
En este ejemplo, se generará un proyecto como en el caso anterior, pero en este caso el origen de los datos no será una URL, sino que vendrán de un archivo CSV existente en el ordenador.
Para ello, se podrá usar el siguiente CSV, que corresponde con el CSV utilizado en el ejemplo anterior:
Una vez descargado en local, se creará un nuevo proyecto, seleccionando en este caso la opción de «This Computer»:
Una vez seleccionado el archivo CSV, se pulsará en el botón de «Next»:
Como en el caso anterior, se mostrará una pantalla durante unos segundos indicando que se está cargando la información, para a continuación mostrarse todos los datos en formato tabla:
Transformaciones sencillas
En este ejemplo se va a transformar el tipo de una columna de tipo numérico a tipo string.
Para ello, se hará uso de uno de los proyectos creados previamente a partir de los datos de la isla de Wight. Desde el listado de proyecto, se seleccionará uno de ellos. En la parte derecha se verá la tabla con diez registros de vista previa. Se va a trabajar con la columna de nombre «Amount».
Pulsando en el icono de «▼» sobre la columna, se desplegarán las opciones disponibles.
Se busca transformar las celdas de datos de números a texto, por lo que para ello se navegará a Edit cells > Common transforms > To number.
Tras ejecutar la transformación, se mostrará una notificación indicando la realización de la transformación, y del número de registros transformados:
El total de registros es de 11.285, mientras que la transformación se ha realizado en 9.041 registros, por lo que quedan registros sin transformar. Para analizar qué es lo que ha pasado, se aplicará un facet. Para ello, en la columna en la que se está trabajando se seleccionará la opción de Facet > Numeric facet.
En la parte izquierda se mostrará entonces una gráfica de distribución de datos, en la que se muestra información sobre el número de registros numéricos, no numéricos, vacíos y que den error:
Acotando la distribución de datos, y fijándose en la columna de «Amount», se verá que la vista previa de datos se actualiza y que se muestra de un modo parecido a esto:
Aquí se puede ver que el problema está en la presencia de «comas» como separadores de miles, lo que genera que causa que la transformación no se lleve a cabo. Para solucionarlo, se tendrá que eliminar dichos caracteres de «coma».
Para ello, en las opciones de la columna se navegará hasta el menú Edit cells >Transform.
Aparecerá entonces una ventana en la que se podrá introducir un código que lleve a cabo la transformación.
Es posible utilizar diferentes lenguajes, como GREL, Python o Clojure. En este caso se va a utilizar GREL (General Refine Expression Language).
Para realizar la conversión se utilizará un comando de reemplazo:
value.replace(',','')
En la ventana se visualizará el valor original, y el valor transformado tras aplicar el comando, para comprobar directamente la transformación:
Se pulsará en el botón de «OK» para aplicar los cambios, mostrándose una notificación indicando los cambios ocurridos.
Hecho esto, se volverá a llevar a cabo la transformación de la columna de número a texto en Edit cells > Common transforms > To number. Si todo ha ido sin problemas, la notificación indicará que todas las celdas se han modificado.
Se muestra el valor de 8.459 registros y no el de 10.703 debido al filtro realizado en el histograma de distribución de valores. Reiniciándolo (pulsando en «reset»), mostrará todos los datos.
Transformaciones avanzadas
Es posible aplicar otra serie de transformaciones más avanzadas, como derivar una columna desde otra aplicando transformaciones.
Por ejemplo, para los datos con los que que se está trabajando en este workshop, se expandirán las opciones de la columna «Date», y se seleccionará la opción de Edit column > Add column based on this column.
Aparecerá entonces una nueva ventana en la que introducir el código necesario para realizar la transformación y aplicarlo en la nueva columna.
Como en el caso anterior, se puede definir diferentes lenguajes de programación a utilizar. Nuevamente se hará uso de GREL.
Se busca formatear el campo de fecha a algo más genérico, por lo que como comando se hará uso del siguiente código:
value.toDate('dd.mm.yy').toString('yyyy-mm-dd')
En la ventana se mostrará el nuevo campo con la transformación aplicada:
Se pulsará en el botón de «OK» para crear la nueva columna, mostrándose una notificación indicando los cambios ocurridos.
En la tabla de vista previa aparecerá la nueva columna creada -de nombre NewDate- con el formato indicado.
Pivotar datos
Es posible pivotar el orden de los datos de manera sencilla. Para este ejemplo, se hará uso de este otro dataset de datos, el cual habrá que cargar como datos locales:
Una vez generado el proyecto, se mostrará una tabla con tres registros:
Se va a pivotar los datos a partir de la columna «Country Name». Para ello, se abrirán las opciones de dicha columna, y se seleccionará la opción de Transpose > Transpose cells across columns into rows.
Se mostrará entonces una ventana en la que se indica desde qué columna a qué columna se quiere pivotar. Ésta se configurará de la siguiente forma:
Se pulsará en el botón de «Transpose» para aplicar los cambios. Como en casos anteriores, se mostrará una notificación indicando los cambios realizados:
A continuación, se separará la columna «year» en dos columnas diferentes. Para ello, desde las opciones de dicha columna, se seleccionará la opción de Edit column > Split into several columns.
Se muestra entonces una ventana en la que se puede configurar cómo se separará la columna.
El separador en este caso será «:». Pulsando en «OK» se ejecutará la separación, mostrándose una notificación al respecto:
La separación de la columna ha sido correcta. El siguiente paso será cambiar el nombre de las columnas a «Year» y «Life Expectancy». Para ello, se accederá a las opciones de las columnas y se seleccionará la opción de Edit columns > Rename this column.
Se lanzará entonces un modal en el que poder introducir el nuevo nombre de la columna:
Tras aceptar el nuevo nombre, se mostrará una notificación informando del cambio.
Exportar datos en distintos formatos
Para exportar datos, se pulsará en el botón de «Export ▼».
Se desplegará un menú con diferentes opciones y formatos para exportar.
Pulsando en la opción que interese, se descarga el archivo en el formato indicado.
Exportar datos a Onesait Platform
Lo normal es que, tras refinar los datos, se quiera ingestarlos en una Entidad más que descargarlos a local. Por ello, se cuenta con una extensión que permite exportar el proyecto directamente a una Entidad.
Para ello, se puede exportar tanto desde el botón de Export > EXPORT TO ONESAITPLATFORM como desde la sección de Extensions: Onesait Platorm > EXPORT TO ONESAITPLATFORM.
Se mostrará entonces una ventana en la que se tendrá que introducir cierta información de configuración de la Entidad:
Use Proxy: si la instancia se encuentra tras un proxy, se tendrá que marcar esta opción.
Proxy: URL del proxy. Por defecto:
http://proxy.indra.es
ProxyPort: el puerto del proxy. Por defecto:
8080
Token: el token del usuario, para autorizar la operación.
OP URL Server: la URL de la instancia donde se encuentra la Plataforma en uso.
Ontology Name: el nombre de la Entidad.
New Ontology: si se quiere crear una nueva entidad, se marcará este campo.
Ontology Description: el texto descriptivo de la Entidad, para cuando se crea una nueva.
Importar datos desde Onesait Platform
Al igual que se puede exportar los datos refinados a una Entidad, es posible importar datos de la propia Plataforma a DataRefiner.
Para ello, desde el listado de proyectos, se pulsará en el botón de «Create» situado en la parte superior derecha de la pantalla.
Se mostrará entonces un listado con los distintos orígenes de datos. De este las opciones, se seleccionará la de «Onesait Platform».
Se mostrará un listado de posibles conexiones ya existentes, así como la opción de crear una nueva conexión. En este segundo caso, se tendrá que introducir la siguiente información:
Use Proxy: si la instancia se encuentra tras un proxy, se tendrá que marcar esta opción.
Proxy: URL del proxy. Por defecto:
http://proxy.indra.es
ProxyPort: el puerto del proxy. Por defecto:
8080
Name: el nombre de la conexión a crear.
Host: la URL de la instancia de Onesait Platform.
User: el usuario con el que conectarse.
Vertical: el vertical de la instancia a la que conectar.
Password: la clave del usuario.
Tras incluir esta información, se podrá pulsar en el botón de «Test» para probar la conexión.
Comprobando que funciona, se podrá salvar la conexión y conectarse mediante el botón de «Connect».
Tras conectarse, aparecerá el editor de consultas. Por poner un ejemplo, se obtendrán los datos de la Entidad «Helsinkipopulation».
Dependiendo del tipo de consulta que se realice, se obtendrá los datos de una manera u otra. Así, para obtener todos los datos se ejecutará la siguiente consulta:
SELECT * FROM Helsinkipopulation
Utilizar DataRefiner mediante API REST
Se pueden realizar las mismas operaciones que se realizan desde la interfaz de usuario desde API REST. Para acceder al Swagger con las operaciones del API, se tendrá que navegar desde Control Panel al menú de APIs localizado en el menú contextual junto al nombre del usuario.
Se mostrará una ventana con accesos directos a los diferentes APIs, teniendo que seleccionar el de «Control Panel»:
Una vez en el Swagger, en el selector de definiciones se tendrá que elegir la de «Data Refiner»:
Se mostrará entonces el API de Data Refiner con la operación /datarefiner
, que será que habrá que utilizar.
Para hacer uso de esta operación, habrá que rellenar los siguientes campos:
Authorization: el Bearer token del usuario.
Operations: con los pasos que se pueden obtener de manera sencilla pulsando el botón «extract» desde la interfaz de usuario:
exportType: el formato permitido para la exportación de los datos.
engine:
importOptions: el JSON con las opciones relevantes del formato del archivo.
Definidas las opciones de la operación, únicamente quedará pendiente pulsar en el botón de «Execute» para lanzar la consulta.
Ejemplo de operación para pivotar columnas
{
"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"
}