Mage es una poderosa herramienta para tareas ETL, con funciones que permiten la exploración y extracción de datos, visualizaciones rápidas a través de plantillas de gráficos y varias otras funciones que transforman tu trabajo con datos en algo mágico.
En el procesamiento de datos, durante un proceso ETL es común encontrar datos faltantes que pueden generar problemas en el futuro, dependiendo de la actividad que vayamos a realizar con el conjunto de datos, los datos nulos pueden ser bastante disruptivos.
Para identificar la ausencia de datos en nuestro conjunto de datos, podemos usar Python y la biblioteca pandas para verificar los datos que presentan valores nulos, además podemos crear gráficas que muestren aún más claramente el impacto de estos valores nulos en nuestro conjunto de datos.
Nuestro proceso consta de 4 pasos: comenzando con la carga de los datos, dos pasos de procesamiento y la exportación de los datos.
En este artículo utilizaremos el conjunto de datos: Predicción binaria de hongos venenosos que está disponible en Kaggle como parte de una competencia. Utilicemos el conjunto de datos de entrenamiento disponible en el sitio web.
Creemos un paso del Cargador de datos usando python para poder cargar los datos que vamos a utilizar. Antes de este paso, creé una tabla en la base de datos de Postgres, que tengo localmente en mi máquina, para poder cargar los datos. Como los datos están en Postgres, usaremos la plantilla de carga de Postgres ya definida dentro de Mage.
from mage_ai.settings.repo import get_repo_path from mage_ai.io.config import ConfigFileLoader from mage_ai.io.postgres import Postgres from os import path if 'data_loader' not in globals(): from mage_ai.data_preparation.decorators import data_loader if 'test' not in globals(): from mage_ai.data_preparation.decorators import test @data_loader def load_data_from_postgres(*args, **kwargs): """ Template for loading data from a PostgreSQL database. Specify your configuration settings in 'io_config.yaml'. Docs: https://docs.mage.ai/design/data-loading#postgresql """ query = 'SELECT * FROM mushroom' # Specify your SQL query here config_path = path.join(get_repo_path(), 'io_config.yaml') config_profile = 'default' with Postgres.with_config(ConfigFileLoader(config_path, config_profile)) as loader: return loader.load(query) @test def test_output(output, *args) -> None: """ Template code for testing the output of the block. """ assert output is not None, 'The output is undefined'
Dentro de la función load_data_from_postgres() definiremos la consulta que usaremos para cargar la tabla en la base de datos. En mi caso, configuré la información bancaria en el archivo io_config.yaml donde está definida como configuración predeterminada, por lo que solo necesitamos pasarle el nombre predeterminado a la variable config_profile.
Después de ejecutar el bloque, usaremos la función Agregar gráfico, que proporcionará información sobre nuestros datos a través de plantillas ya definidas. Simplemente haz clic en el icono al lado del botón de reproducción, marcado en la imagen con una línea amarilla.
Seleccionaremos dos opciones para explorar más nuestro conjunto de datos, las opciones summay_overview y feature_profiles. A través de resumen_overview, obtenemos información sobre la cantidad de columnas y filas en el conjunto de datos. También podemos ver la cantidad total de columnas por tipo, por ejemplo, la cantidad total de columnas categóricas, numéricas y booleanas. Feature_profiles por su parte presenta información más descriptiva sobre los datos, como: tipo, valor mínimo, valor máximo, entre otra información, incluso podemos visualizar los valores faltantes, que son el foco de nuestro tratamiento.
Para poder centrarnos más en los datos faltantes, usemos la plantilla: % de valores faltantes, un gráfico de barras con el porcentaje de datos que faltan, en cada una de las columnas.
El gráfico presenta 4 columnas donde los valores faltantes corresponden a más del 80% de su contenido, y otras columnas que presentan valores faltantes pero en cantidades menores, esta información ahora nos permite buscar diferentes estrategias para enfrentar esto datos nulos
Para columnas que tengan más del 80% de valores nulos, la estrategia que seguiremos será realizar un drop de columnas en el dataframe, seleccionando las columnas que vamos a excluir del dataframe. Usando el Bloque TRANSFORMER en el lenguaje Python, seleccionaremos la opción Eliminación de columnas.
from mage_ai.data_cleaner.transformer_actions.base import BaseAction from mage_ai.data_cleaner.transformer_actions.constants import ActionType, Axis from mage_ai.data_cleaner.transformer_actions.utils import build_transformer_action from pandas import DataFrame if 'transformer' not in globals(): from mage_ai.data_preparation.decorators import transformer if 'test' not in globals(): from mage_ai.data_preparation.decorators import test @transformer def execute_transformer_action(df: DataFrame, *args, **kwargs) -> DataFrame: """ Execute Transformer Action: ActionType.REMOVE Docs: https://docs.mage.ai/guides/transformer-blocks#remove-columns """ action = build_transformer_action( df, action_type=ActionType.REMOVE, arguments=['veil_type', 'spore_print_color', 'stem_root', 'veil_color'], axis=Axis.COLUMN, ) return BaseAction(action).execute(df) @test def test_output(output, *args) -> None: """ Template code for testing the output of the block. """ assert output is not None, 'The output is undefined'
Dentro de la función execute_transformer_action() insertaremos una lista con el nombre de las columnas que queremos excluir del conjunto de datos, en la variable argumentos, luego de este paso, simplemente ejecuta el bloque.
Ahora para las columnas que tienen menos del 80% de valores nulos, usaremos la estrategia Rellenar valores faltantes, como en algunos casos a pesar de tener datos faltantes, reemplazando estos con valores como promedio, o moda, puede satisfacer las necesidades de datos sin causar muchos cambios en el conjunto de datos, dependiendo de su objetivo final.
Hay algunas tareas, como la clasificación, en las que reemplazar los datos faltantes con un valor que sea relevante (moda, media, mediana) para el conjunto de datos puede contribuir al algoritmo de clasificación, que podría llegar a otras conclusiones si los datos se eliminaran. como en la otra estrategia que utilizamos.
Para tomar una decisión con respecto a qué medición usaremos, usaremos la funcionalidad Agregar gráfico de Mage nuevamente. Usando la plantilla Valores más frecuentes podemos visualizar la moda y frecuencia de este valor en cada una de las columnas.
Siguiendo pasos similares a los anteriores, usaremos el transformador Rellenar valores faltantes, para realizar la tarea de restar los datos faltantes usando la moda de cada una de las columnas: steam_surface, gill_spacing, cap_surface , archivo adjunto_gill, tipo_anillo.
from mage_ai.data_cleaner.transformer_actions.constants import ImputationStrategy from mage_ai.data_cleaner.transformer_actions.base import BaseAction from mage_ai.data_cleaner.transformer_actions.constants import ActionType, Axis from mage_ai.data_cleaner.transformer_actions.utils import build_transformer_action from pandas import DataFrame if 'transformer' not in globals(): from mage_ai.data_preparation.decorators import transformer if 'test' not in globals(): from mage_ai.data_preparation.decorators import test @transformer def execute_transformer_action(df: DataFrame, *args, **kwargs) -> DataFrame: """ Execute Transformer Action: ActionType.IMPUTE Docs: https://docs.mage.ai/guides/transformer-blocks#fill-in-missing-values """ action = build_transformer_action( df, action_type=ActionType.IMPUTE, arguments=df.columns, # Specify columns to impute axis=Axis.COLUMN, options={'strategy': ImputationStrategy.MODE}, # Specify imputation strategy ) return BaseAction(action).execute(df) @test def test_output(output, *args) -> None: """ Template code for testing the output of the block. """ assert output is not None, 'The output is undefined'
En la función execute_transformer_action() , definimos la estrategia para reemplazar datos en un diccionario de Python. Para obtener más opciones de reemplazo, simplemente acceda a la documentación del transformador: https://docs.mage.ai/guides/transformer-blocks#fill-in-missing-values.
Al realizar todas las transformaciones, guardaremos nuestro conjunto de datos ahora tratado, en la misma base de datos de Postgres pero ahora con un nombre diferente para poder diferenciarnos. Usando el bloque Data Exporter y seleccionando Postgres, definiremos el shema y la tabla donde queremos guardar, recordando que las configuraciones de la base de datos se guardan previamente en el archivo io_config.yaml.
from mage_ai.settings.repo import get_repo_path from mage_ai.io.config import ConfigFileLoader from mage_ai.io.postgres import Postgres from pandas import DataFrame from os import path if 'data_exporter' not in globals(): from mage_ai.data_preparation.decorators import data_exporter @data_exporter def export_data_to_postgres(df: DataFrame, **kwargs) -> None: """ Template for exporting data to a PostgreSQL database. Specify your configuration settings in 'io_config.yaml'. Docs: https://docs.mage.ai/design/data-loading#postgresql """ schema_name = 'public' # Specify the name of the schema to export data to table_name = 'mushroom_clean' # Specify the name of the table to export data to config_path = path.join(get_repo_path(), 'io_config.yaml') config_profile = 'default' with Postgres.with_config(ConfigFileLoader(config_path, config_profile)) as loader: loader.export( df, schema_name, table_name, index=False, # Specifies whether to include index in exported table if_exists='replace', #Specify resolution policy if table name already exists )
repositorio -> https://github.com/DeadPunnk/Mushrooms/tree/main
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3