Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cendawan Ajaib: meneroka dan merawat data nol dengan Mage

Cendawan Ajaib: meneroka dan merawat data nol dengan Mage

王林
王林asal
2024-08-18 06:02:02684semak imbas

Mage ialah alat yang berkuasa untuk tugasan ETL, dengan ciri yang membolehkan penerokaan dan perlombongan data, visualisasi pantas melalui templat graf dan beberapa ciri lain yang mengubah kerja anda dengan data menjadi sesuatu yang ajaib.

Apabila memproses data, semasa proses ETL adalah perkara biasa untuk mencari data yang hilang yang boleh menjana masalah pada masa hadapan, bergantung pada aktiviti yang akan kami jalankan dengan set data, data nol boleh menjadi agak mengganggu.

Untuk mengenal pasti ketiadaan data dalam set data kami, kami boleh menggunakan Python dan perpustakaan panda untuk menyemak data yang membentangkan nilai nol, selain itu kami boleh mencipta graf yang menunjukkan dengan lebih jelas kesan nilai nol ini dalam set data kami.

Saluran paip kami terdiri daripada 4 langkah: bermula dengan pemuatan data, dua langkah pemprosesan dan eksport data.

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

Pemuat Data

Dalam artikel ini, kami akan menggunakan set data: Ramalan Perduaan Cendawan Beracun yang tersedia di Kaggle sebagai sebahagian daripada pertandingan. Mari gunakan set data latihan yang tersedia di tapak web.

Mari kita buat langkah Pemuat Data menggunakan python untuk dapat memuatkan data yang akan kita gunakan. Sebelum langkah ini, saya mencipta jadual dalam pangkalan data Postgres, yang saya ada secara tempatan pada mesin saya, untuk dapat memuatkan data. Memandangkan data berada dalam Postgres, kami akan menggunakan templat muat Postgres yang telah ditetapkan dalam 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'

Dalam fungsi load_data_from_postgres() kami akan mentakrifkan pertanyaan yang akan kami gunakan untuk memuatkan jadual dalam pangkalan data. Dalam kes saya, saya mengkonfigurasi maklumat bank dalam fail io_config.yaml di mana ia ditakrifkan sebagai konfigurasi lalai, jadi kami hanya perlu menghantar nama lalai kepada pembolehubah config_profile.

Selepas melaksanakan blok, kami akan menggunakan ciri Tambah carta, yang akan memberikan maklumat tentang data kami melalui templat yang telah ditetapkan. Cuma klik pada ikon di sebelah butang main, ditandakan dalam imej dengan garis kuning.

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

Kami akan memilih dua pilihan untuk meneroka set data kami dengan lebih lanjut, pilihan summay_overview dan feature_profiles. Melalui summary_overview, kami memperoleh maklumat tentang bilangan lajur dan baris dalam set data Kami juga boleh melihat jumlah bilangan lajur mengikut jenis, contohnya jumlah bilangan lajur kategori, angka dan Boolean. Feature_profiles, sebaliknya, membentangkan lebih banyak maklumat deskriptif tentang data, seperti: jenis, nilai minimum, nilai maksimum, antara maklumat lain, kami juga boleh memvisualisasikan nilai yang hilang, yang menjadi tumpuan rawatan kami.

Untuk dapat menumpukan lebih pada data yang hilang, mari gunakan templat: % nilai yang hilang, graf bar dengan peratusan data yang tiada, dalam setiap lajur.

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

Graf membentangkan 4 lajur dengan nilai yang hilang sepadan dengan lebih daripada 80% kandungannya, dan lajur lain yang menunjukkan nilai yang hilang tetapi dalam kuantiti yang lebih kecil, maklumat ini kini membolehkan kami mencari strategi berbeza untuk menangani data nol ini

Lajur Penurunan Transformer

Untuk lajur yang mempunyai lebih daripada 80% nilai nol, strategi yang akan kami ikuti ialah melakukan penurunan lajur dalam bingkai data, memilih lajur yang akan kami kecualikan daripada bingkai data. Menggunakan TRANSFORMER Blok dalam bahasa Python, kami akan memilih pilihan Penyingkiran kolum .

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'

Dalam fungsi execute_transformer_action() kami akan memasukkan senarai dengan nama lajur yang ingin kami kecualikan daripada set data, dalam pembolehubah argumen, selepas langkah ini, laksanakan sahaja blok itu.

Pengubah Isikan Nilai yang Hilang

Kini untuk lajur yang mempunyai kurang daripada 80% nilai nol, kami akan menggunakan strategi Isi Nilai Hilang, seperti dalam beberapa kes walaupun mempunyai data yang hilang, menggantikannya dengan nilai seperti biasa, atau fesyen, ia mungkin dapat memenuhi keperluan data tanpa menyebabkan banyak perubahan pada set data, bergantung pada objektif akhir anda.

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

Atas ialah kandungan terperinci Cendawan Ajaib: meneroka dan merawat data nol dengan Mage. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn