"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Hongos Mágicos: explorando y tratando datos nulos con Mage

Hongos Mágicos: explorando y tratando datos nulos con Mage

Publicado el 2024-08-27
Navegar:966

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.

Cogumelos Mágicos: explorando e tratando dados nulos com Mage

Cargador de 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.

Cogumelos Mágicos: explorando e tratando dados nulos com Mage

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.

Cogumelos Mágicos: explorando e tratando dados nulos com Mage

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

Columnas de caída de transformador

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.

Transformador completa los valores faltantes

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.

Cogumelos Mágicos: explorando e tratando dados nulos com Mage

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.

Exportador de datos

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
        )

Gracias y ¿nos vemos la próxima vez?

repositorio -> https://github.com/DeadPunnk/Mushrooms/tree/main

Declaración de liberación Este artículo se reproduce en: https://dev.to/deadpunnk/cogumelos-magicos-explorando-e-tratando-dados-nulos-com-mage-ppb?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

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