Heim  >  Artikel  >  Backend-Entwicklung  >  Zauberpilze: Nulldaten mit Mage erforschen und behandeln

Zauberpilze: Nulldaten mit Mage erforschen und behandeln

王林
王林Original
2024-08-18 06:02:02607Durchsuche

Mage ist ein leistungsstarkes Tool für ETL-Aufgaben mit Funktionen, die die Datenexploration und -gewinnung, schnelle Visualisierungen durch Diagrammvorlagen und mehrere andere Funktionen ermöglichen, die Ihre Arbeit mit Daten in etwas Magisches verwandeln.

Bei der Verarbeitung von Daten während eines ETL-Prozesses kommt es häufig vor, dass fehlende Daten gefunden werden, die in der Zukunft zu Problemen führen können. Abhängig von der Aktivität, die wir mit dem Datensatz ausführen, können Nulldaten ziemlich störend sein.

Um das Fehlen von Daten in unserem Datensatz zu erkennen, können wir Python und die Pandas-Bibliothek verwenden, um die Daten zu überprüfen, die Nullwerte darstellen. Darüber hinaus können wir Diagramme erstellen, die die Auswirkungen dieser Nullwerte noch deutlicher zeigen Unser Datensatz.

Unsere Pipeline besteht aus 4 Schritten: Beginnend mit dem Laden der Daten, zwei Verarbeitungsschritten und dem Exportieren der Daten.

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

Datenlader

In diesem Artikel verwenden wir den Datensatz: Binäre Vorhersage giftiger Pilze, der im Rahmen eines Wettbewerbs auf Kaggle verfügbar ist. Nutzen wir den auf der Website verfügbaren Trainingsdatensatz.

Lassen Sie uns einen Data Loader-Schritt mit Python erstellen, um die Daten laden zu können, die wir verwenden werden. Vor diesem Schritt habe ich eine Tabelle in der Postgres-Datenbank erstellt, die ich lokal auf meinem Rechner habe, um die Daten laden zu können. Da die Daten in Postgres vorliegen, verwenden wir die bereits definierte Postgres-Ladevorlage in 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'

Innerhalb der Funktion load_data_from_postgres() definieren wir die Abfrage, die wir zum Laden der Tabelle in die Datenbank verwenden. In meinem Fall habe ich die Bankinformationen in der Datei io_config.yaml konfiguriert, wo sie als Standardkonfiguration definiert ist, sodass wir nur den Standardnamen an die Variable config_profile übergeben müssen.

Nach der Ausführung des Blocks verwenden wir die Funktion „Diagramm hinzufügen“, die über bereits definierte Vorlagen Informationen zu unseren Daten bereitstellt. Klicken Sie einfach auf das Symbol neben der Wiedergabeschaltfläche, das im Bild mit einer gelben Linie markiert ist.

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

Wir wählen zwei Optionen aus, um unseren Datensatz weiter zu untersuchen: die Optionen „summay_overview“ und „feature_profiles“. Über summary_overview erhalten wir Informationen über die Anzahl der Spalten und Zeilen im Datensatz. Wir können auch die Gesamtzahl der Spalten nach Typ anzeigen, beispielsweise die Gesamtzahl der kategorialen, numerischen und booleschen Spalten. Feature_profiles hingegen stellt beschreibendere Informationen zu den Daten dar, wie zum Beispiel: Typ, Minimalwert, Maximalwert und andere Informationen. Wir können sogar die fehlenden Werte visualisieren, die im Mittelpunkt unserer Behandlung stehen.

Um uns stärker auf fehlende Daten konzentrieren zu können, verwenden wir die Vorlage: % der fehlenden Werte, ein Balkendiagramm mit dem Prozentsatz der fehlenden Daten in jeder Spalte.

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

Das Diagramm enthält 4 Spalten, in denen fehlende Werte mehr als 80 % des Inhalts ausmachen, und weitere Spalten, in denen fehlende Werte, jedoch in geringeren Mengen, angezeigt werden. Diese Informationen ermöglichen es uns nun, nach verschiedenen Strategien zu suchen, um damit umzugehen Nulldaten.

Transformer-Drop-Spalten

Für Spalten, die mehr als 80 % Nullwerte haben, besteht die Strategie, die wir verfolgen werden, darin, Spalten im Datenrahmen zu löschen und die Spalten auszuwählen, die wir aus dem Datenrahmen ausschließen möchten. Mit dem Block TRANSFORMER in der Python-Sprache wählen wir die Option Spaltenentfernung aus.

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'

Innerhalb der Funktion execute_transformer_action() fügen wir eine Liste mit den Namen der Spalten ein, die wir aus dem Datensatz ausschließen möchten, in der Argumentvariablen. Nach diesem Schritt führen Sie einfach den Block aus.

Transformator ergänzt fehlende Werte

Nun verwenden wir für die Spalten, die weniger als 80 % Nullwerte haben, die Strategie Fehlende Werte ausfüllen, da wir in einigen Fällen trotz fehlender Daten diese durch Werte wie ersetzen Abhängig von Ihrem endgültigen Ziel kann es möglicherweise den Datenbedarf decken, ohne viele Änderungen am Datensatz zu verursachen.

Existem algumas tarefas, como a de classificação, onde a substituição dos dados faltantes por um valor que seja relevante (moda, média, mediana) para o dataset, possa contribuir com o algoritmo de classificação, que poderia chegar a outras conclusões caso o dados fossem apagados como na outra estratégia de utilizamos.

Para tomar uma decisão com relação a qual medida vamos utilizar, vamos recorrer novamente a funcionalidade Add chart do Mage. Usando o template Most frequent values podemos visualizar a moda e a frequência desse valor em cada uma das colunas.

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

Seguindos passos semelhantes aos anteriores, vamos usar o tranformer Fill in missing values, para realizar a tarefa de subtiruir os dados faltantes usando a moda de cada uma das colunas: steam_surface, gill_spacing, cap_surface, gill_attachment, ring_type.

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'

Na função execute_transformer_action() , definimos a estratégia para a substituição dos dados num dicionário do Python. Para mais opções de substituição, basta acessar a documentação do transformer: https://docs.mage.ai/guides/transformer-blocks#fill-in-missing-values.

Data Exporter

Ao realizar todas as transformações, vamos salvar nosso dataset agora tratado, na mesma base do Postgres mas agora com um nome diferente para podermos diferenciar. Usando o bloco Data Exporter e selecionando o Postgres, vamos definir o shema e a tabela onde queremos salvar, lembrando que as configurações do banco são salvas previamente no arquivo 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
        )

Obrigado e até a próxima ?

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

Das obige ist der detaillierte Inhalt vonZauberpilze: Nulldaten mit Mage erforschen und behandeln. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn