「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Magic Mushrooms: Mage を使用した null データの探索と処理

Magic Mushrooms: Mage を使用した null データの探索と処理

2024 年 8 月 27 日に公開
ブラウズ:147

Mage は ETL タスク用の強力なツールであり、データの探索とマイニングを可能にする機能、グラフ テンプレートによる迅速な視覚化、およびデータを使った作業を魔法のようなものに変えるその他のいくつかの機能を備えています。

データ処理では、ETL プロセス中に、将来問題を引き起こす可能性のある欠落データが見つかることがよくあります。データセットを使用して実行するアクティビティによっては、null データが非常に破壊的になる可能性があります。

データセット内にデータが存在しないことを特定するために、Python と pandas ライブラリを使用して null 値を示すデータをチェックできます。さらに、これらの null 値の影響をより明確に示すグラフを作成できます。私たちのデータセット。

私たちのパイプラインは 4 つのステップで構成されています。データのロードから始まり、2 つの処理ステップ、データのエクスポートです。

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

データローダー

この記事では、コンテストの一環として Kaggle で利用できるデータセット「毒キノコのバイナリ予測」を使用します。ウェブサイトで入手可能なトレーニング データセットを使用してみましょう。

使用するデータをロードできるように、Python を使用してデータ ローダー ステップを作成しましょう。この手順の前に、データをロードできるように、マシン上にローカルにある Postgres データベースにテーブルを作成しました。データは Postgres にあるため、Mage 内ですでに定義されている Postgres ロード テンプレートを使用します。

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'

関数 load_data_from_postgres() 内で、データベースにテーブルをロードするために使用するクエリを定義します。私の場合、デフォルト設定として定義されているファイル io_config.yaml で銀行情報を設定したため、デフォルト名を変数 config_profile に渡すだけで済みます。

ブロックの実行後、チャートの追加機能を使用します。これにより、すでに定義されたテンプレートを通じてデータに関する情報が提供されます。再生ボタンの横にある、画像内で黄色の線でマークされたアイコンをクリックするだけです。

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

データセットをさらに調査するために、summay_overview オプションと feature_profiles オプションの 2 つのオプションを選択します。 summary_overview を通じて、データセット内の列と行の数に関する情報を取得します。また、カテゴリ列、数値列、ブール列の合計数など、タイプごとの列の合計数を表示することもできます。一方、Feature_profiles は、タイプ、最小値、最大値などのデータに関するより記述的な情報を表示し、処理の焦点である欠損値を視覚化することもできます。

欠損データにさらに焦点を当てることができるように、欠損値の割合、各列の欠損データの割合を示す棒グラフのテンプレートを使用しましょう。

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

グラフには、欠損値が内容の 80% 以上に相当する 4 つの列と、欠損値を示す他の列が表示されますが、その量は少ないため、この情報により、これに対処するためのさまざまな戦略を模索できるようになりました。ヌルデータ。

変圧器ドロップカラム

Null 値が 80% を超える列の場合、データフレーム内で列の削除を実行し、データフレームから除外する列を選択する戦略に従います。 Python 言語の

TRANSFORMER ブロックを使用して、オプション 列削除 を選択します。

mage_ai.data_cleaner.transformer_actions.base から BaseAction をインポート mage_ai.data_cleaner.transformer_actions.constants からのインポート ActionType、Axis mage_ai.data_cleaner.transformer_actions.utils から build_transformer_action をインポート パンダからデータフレームをインポート 「transformer」が globals() にない場合:     mage_ai.data_preparation.decorators からのインポート トランスフォーマー 「test」が globals() にない場合:     mage_ai.data_preparation.decorators インポート テストから @トランス defexecute_transformer_action(df: DataFrame, *args, **kwargs) -> DataFrame:     「」     Transformer アクションの実行: ActionType.REMOVE     ドキュメント: https://docs.mage.ai/guides/transformer-blocks#remove-columns     「」     アクション = build_transformer_action(         DF、         action_type=アクションタイプ.REMOVE,         引数=['veil_type', 'spore_print_color', 'stem_root', 'veil_color'],           軸=軸.COLUMN、     )     BaseAction(アクション).execute(df)を返す @テスト def test_output(output, *args) -> なし:     「」     ブロックの出力をテストするためのテンプレート コード。     「」     アサート出力は None ではありません、「出力は未定義です」
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'
関数

execute_transformer_action() 内で、データセットから除外する列の名前を含むリストを引数変数に挿入します。このステップの後は、ブロックを実行するだけです。

欠損値を埋めるトランスフォーマー

NULL 値が 80% 未満の列については、

欠損値を埋める戦略を使用します。場合によっては、データが欠損しているにもかかわらず、これらを次のような値に置き換えます。最終的な目的に応じて、データセットに多くの変更を加えることなく、データのニーズを満たすことができる場合があります。

欠損データをデータセットに関連する値 (最頻値、平均値、中央値) に置き換える分類などのタスクがいくつかあり、データが削除された場合に別の結論に達する可能性がある分類アルゴリズムに貢献する可能性があります。私たちが使用した他の戦略と同様に。

どの測定値を使用するかを決定するために、Mage の

チャートの追加 機能を再度使用します。テンプレート MostfrequencyValues を使用すると、各列のこの値のモードと頻度を視覚化できます。

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

前の手順と同様の手順に従い、トランスフォーマー

欠損値を埋める を使用して、各列のモード (steam_surface、gill_spacing、cap_surface) を使用して欠損データを減算するタスクを実行します。 、ギルアタッチメント、リングタイプ.

mage_ai.data_cleaner.transformer_actions.constants から ImputationStrategy をインポートします mage_ai.data_cleaner.transformer_actions.base から BaseAction をインポート mage_ai.data_cleaner.transformer_actions.constants からのインポート ActionType、Axis mage_ai.data_cleaner.transformer_actions.utils から build_transformer_action をインポート パンダからデータフレームをインポート 「transformer」が globals() にない場合:     mage_ai.data_preparation.decorators からのインポート トランスフォーマー 「test」が globals() にない場合:     mage_ai.data_preparation.decorators インポート テストから @トランス defexecute_transformer_action(df: DataFrame, *args, **kwargs) -> DataFrame:     「」     Transformer アクションの実行: ActionType.IMPUTE     ドキュメント: https://docs.mage.ai/guides/transformer-blocks#fill-in-missing-values     「」     アクション = build_transformer_action(         DF、         action_type=アクションタイプ.IMPUTE、         argument=df.columns, # 代入する列を指定します         軸=軸.COLUMN、         options={'strategy': ImputationStrategy.MODE}, # 代入戦略を指定します     )     BaseAction(アクション).execute(df)を返す @テスト def test_output(output, *args) -> なし:     「」     ブロックの出力をテストするためのテンプレート コード。     「」     アサート出力は None ではありません、「出力は未定義です」
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'
関数

execute_transformer_action() で、Python 辞書内のデータを置換する戦略を定義します。その他の置換オプションについては、トランスフォーマーのドキュメント (https://docs.mage.ai/guides/transformer-blocks#fill-in-missing-values) にアクセスしてください。

データエクスポーター

すべての変換を実行するとき、現在処理しているデータセットを同じ Postgres データベースに保存しますが、区別できるように別の名前で保存します。

Data Exporter ブロックを使用して Postgres を選択し、データベース構成が以前にファイル io_config.yaml に保存されていることを思い出しながら、保存するシーマとテーブルを定義します。

mage_ai.settings.repo から get_repo_path をインポート mage_ai.io.config から ConfigFileLoader をインポート mage_ai.io.postgres から Postgres をインポート パンダからデータフレームをインポート インポートパスから 「data_exporter」が globals() にない場合:     mage_ai.data_preparation.decorators からのインポート data_exporter @data_exporter def export_data_to_postgres(df: DataFrame, **kwargs) -> なし:     「」     PostgreSQL データベースにデータをエクスポートするためのテンプレート。     「io_config.yaml」で構成設定を指定します。     ドキュメント: https://docs.mage.ai/design/data-loading#postgresql     「」     schema_name = 'public' # データをエクスポートするスキーマの名前を指定します     table_name = 'mushroom_clean' # データをエクスポートするテーブルの名前を指定します     config_path = path.join(get_repo_path(), 'io_config.yaml')     config_profile = 'デフォルト'     Postgres.with_config(ConfigFileLoader(config_path, config_profile)) をローダーとして使用:         ローダー.エクスポート(             DF、             スキーマ名、             テーブル名、             Index=False, # エクスポートされたテーブルにインデックスを含めるかどうかを指定します             if_exists='replace', #テーブル名がすでに存在する場合は解決ポリシーを指定します         )
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'
ありがとう、また会いましょう?

リポジトリ -> https://github.com/DeadPunnk/Mushrooms/tree/main

リリースステートメント この記事は次の場所に転載されています: https://dev.to/deadpunnk/cogumelos-magicos-explorando-e-tratando-dados-nulos-com-mage-ppb?1 権利侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3