La función de ETL
La función de ETL debe ser una función de Python que reciba como argumento la instancia de un dataset y otros **kwargs que te explicaré más adelante.
La función debe retornar un diccionario con las siguientes llaves:
data: UnDataFramedepandascon los datos limpios y listos para ser analizados.metadata: Un diccionario con la metadata deldatasetque se está procesando.notes: Una lista de strings con notas sobre los datos. Estas notas se mostrarán en la página de datos de la plataforma.
El dataset
El dataset es un objeto de la clase Dataset que será pasado como el primer argumento a la función de ETL. En principio, el único campo que debería ser relevante para la función de ETL es el campo original_url que contiene la URL original donde se publican los datos.
Si el dataset depende de un Archivo en Datafaro u otros conjuntos de datos estos serán pasados como argumentos nombrados (kwargs) a la función de ETL.
Los kwargs
Los kwargs son argumentos nombrados que se pasan a la función de ETL. Estos argumentos pueden ser cualquier cosa que necesites para procesar el dataset.
Estos son los kwargs que debes esperar actualmente:
binary_data: Cuando el conjunto de datos depende de un archivo en Datafaro, este argumento contendrá la representación binaria del archivo. El archivo se puede leer utilizando la funciónio.BytesIO(binary_data).datasets: Un diccionario con otros conjuntos de datos que se han publicado en la plataforma. El diccionario tiene como llave el id del conjunto de datos y como valor la tabla correspondiente a la última actualización de los datos de dicho conjunto.
El diccionario de retorno
El DataFrame de pandas
El DataFrame de pandas debe contener los datos limpios y listos para ser analizados. Es importante que los datos se presenten en un formato que sea fácil de analizar y que sea fácil de entender. Normalmente, esto significa que los datos deben estar en un formato tabular y que las columnas deben tener nombres descriptivos.
Los datos se mostrarán en la plataforma en el mismo orden en el que están almecenados en el DataFrame, por lo que es importante que los datos estén ordenados de la manera que quieres que se muestren. Aplica tanto para las filas como para las columnas.
Datos preliminares: Si tu conjunto de datos contiene datos preliminares, es importante que estos datos se muestren de manera clara y que se identifiquen como datos preliminares. Esto se logra creando una columna llamada (p) que contenga 1 para los datos preliminares y 0 para los datos definitivos. Se debe identificar como preliminar cualquier fila que contenga al menos un valor preliminar, sin importar si el resto de los valores son definitivos.
Campos de fecha: Si tu conjunto de datos contiene campos de fecha, es importante que estos campos se muestren en un formato uniforme. De todas formas, lo más importante es que las fechas siempre se almacenen como fechas y estén redondeadas a final de período sin importar la frecuencia de los datos. La plataforma se encargará de mostrar las fechas en el formato correcto utilizando la metadata.
La metadata
La metadata es un diccionario que contiene información sobre el conjunto de datos. La metadata es importante porque es la que determina cómo se muestran los datos en la plataforma.
La metadata contiene un campo por cada una de las columnas del DataFrame de pandas. Cada campo es un diccionario con la siguiente información:
name: El nombre de la columna. Contrario al nombre de la columna en elDataFrame, el nombre de la columna en la metadata debe ser un nombre descriptivo que sea fácil de entender.dtype: El tipo de dato de la columna. Los tipos de dato que se pueden utilizar son:text: Para cadenas de texto.int: Para números enteros.f*: Para números decimales. El asterisco indica la cantidad de decimales que se deben mostrar.date: Para fechas de frecuencia diaria.mdate: Para fechas de frecuencia mensual, trimestral o equivalentes.ydate: Para fechas de frecuencia anual.
role: El rol de la columna. Los roles que se pueden utilizar son:key: Para columnas que son claves para el conjunto de datos.total: Para columnas que contienen totales o sumas.preliminary: Para la columna(p).*.*: Una cadena de texto conformada por números (asterisco) y puntos (punto). Los números indican el orden de la columna y los puntos indican la jerarquía de la columna. Por ejemplo,1indica que la columna es la primera columna de la primera jerarquía.2indica que la columna es la segunda columna de la primera jerarquía.2.1indica que la columna es la primera columna de la segunda jerarquía y así sucesivamente.
Las notas
Las notas son una lista de strings que contienen notas sobre los datos. Estas notas siempre se mostrarán en la página de datos de la plataforma.
El entorno de ejecución
Por razones de seguridad, las funciones de ETL se ejecutarán en un entorno controlado, de forma que estas no pueden instalar o importar paquetes que no estén disponibles en el entorno.
A continuación, se muestra un listado de los paquetes, funciones y objetos que están disponibles en el entorno de ejecución. Sin embargo, es importante tener en cuenta que este listado irá cambiando con el tiempo.
Si necesitas un recurso que no está disponible en el entorno de ejecución, por favor, inicia una discusión en el canal de
#data-etlen Discord. Puedes acceder directamente haciendo clic https://discord.gg/58gR2SaS (opens in a new tab).
A continuación, la lista de recursos disponibles en el entorno de ejecución:
BytesIO: La funciónBytesIOde la libreríaio.fake_dataset: Una clase que te permite crear conjuntos de datos de prueba. La clase tiene los siguientes atributos:original_url: La URL original del conjunto de datos.
pd: La libreríapandas.re: La libreríare.