”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Magic Mushrooms:使用 Mage 探索和处理空数据

Magic Mushrooms:使用 Mage 探索和处理空数据

发布于2024-08-27
浏览:672

Mage 是用于 ETL 任务的强大工具,具有支持数据探索和挖掘的功能、通过图形模板进行快速可视化以及其他一些功能,可将您的数据工作转变为神奇的东西。

在数据处理中,在 ETL 过程中,经常会发现丢失的数据,这些数据可能会在将来产生问题,具体取决于我们要对数据集执行的活动,空数据可能会造成相当大的破坏。

为了识别数据集中是否缺少数据,我们可以使用 Python 和 pandas 库来检查呈现空值的数据,此外,我们可以创建图表来更清楚地显示这些空值的影响我们的数据集。

我们的管道由 4 个步骤组成:从加载数据开始,两个处理步骤和导出数据。

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 选项。通过summary_overview,我们可以获得数据集中的列数和行数信息,我们还可以按类型查看列的总数,例如分类列、数字列和布尔列的总数。而Feature_profiles则呈现了更多关于数据的描述性信息,例如:类型、最小值、最大值等信息,我们甚至可以将缺失值可视化,这是我们处理的重点。

为了能够更多地关注缺失数据,让我们使用模板:缺失值百分比,这是一个条形图,每列中包含缺失数据的百分比。

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

该图显示了 4 列,其中缺失值对应于其内容的 80% 以上,而其他列则呈现缺失值,但数量较少,这些信息现在允许我们寻求不同的策略来处理此问题空数据。

变压器跌落柱

对于空值超过 80% 的列,我们将遵循的策略是在数据框中执行删除列,选择我们要从数据框中排除的列。使用Python语言中的

TRANSFORMER块,我们将选择选项列删除

从 mage_ai.data_cleaner.transformer_actions.base 导入 BaseAction 从 mage_ai.data_cleaner.transformer_actions.constants 导入 ActionType,轴 从 mage_ai.data_cleaner.transformer_actions.utils 导入 build_transformer_action 从 pandas 导入 DataFrame 如果“transformer”不在 globals() 中:     从 mage_ai.data_preparation.decorators 导入变压器 如果“test”不在 globals() 中:     从 mage_ai.data_preparation.decorators 导入测试 @变压器 defexecute_transformer_action(df: DataFrame, *args, **kwargs) -> DataFrame:     ”“”     运行变压器操作:ActionType.REMOVE     文档:https://docs.mage.ai/guides/transformer-blocks#remove-columns     ”“”     动作 = build_transformer_action(         df,         action_type=ActionType.REMOVE,         参数=['veil_type','spore_print_color','stem_root','veil_color'],           轴=轴.COLUMN,     )     返回 BaseAction(action).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()中,我们将在参数变量中插入一个列表,其中包含我们想要从数据集中排除的列的名称,在此步骤之后,只需执行该块即可。

变压器填充缺失值

现在,对于空值少于 80% 的列,我们将使用策略

填充缺失值,在某些情况下,尽管存在缺失数据,但仍将其替换为诸如以下的值平均,或时尚,它可能能够满足数据需求,而不会对数据集造成太多更改,具体取决于您的最终目标。

有一些任务,例如分类,用与数据集相关的值(众数、平均值、中位数)替换缺失数据,可以对分类算法做出贡献,如果删除数据,分类算法可以得出其他结论正如我们使用的其他策略一样。

为了决定我们将使用哪种测量,我们将再次使用 Mage 的

添加图表功能。使用模板最常见的值我们可以可视化每列中该值的众数和频率。

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

接下来的步骤与之前的类似,我们将使用变压器

填充缺失值,使用每列的模式来执行减去缺失数据的任务:steam_surface、gill_spacing、cap_surface 、gill_attachment、ring_type。

从 mage_ai.data_cleaner.transformer_actions.constants 导入 ImputationStrategy 从 mage_ai.data_cleaner.transformer_actions.base 导入 BaseAction 从 mage_ai.data_cleaner.transformer_actions.constants 导入 ActionType,轴 从 mage_ai.data_cleaner.transformer_actions.utils 导入 build_transformer_action 从 pandas 导入 DataFrame 如果“transformer”不在 globals() 中:     从 mage_ai.data_preparation.decorators 导入变压器 如果“test”不在 globals() 中:     从 mage_ai.data_preparation.decorators 导入测试 @变压器 defexecute_transformer_action(df: DataFrame, *args, **kwargs) -> DataFrame:     ”“”     运行转换器操作:ActionType.IMPUTE     文档:https://docs.mage.ai/guides/transformer-blocks#fill-in-missing-values     ”“”     动作 = build_transformer_action(         df,         action_type=ActionType.IMPUTE,         argument=df.columns, # 指定要插补的列         轴=轴.COLUMN,         options={'strategy': ImputationStrategy.MODE}, # 指定插补策略     )     返回 BaseAction(action).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 从 pandas 导入 DataFrame 从导入路径 如果“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'
谢谢您,下次再见?

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

版本声明 本文转载于:https://dev.to/deadpunnk/cogumelos-magicos-explorando-e-tratando-dados-nulos-com-mage-ppb?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何将美丽搜索与 Node.js 集成
    如何将美丽搜索与 Node.js 集成
    作为 Node.js 开发人员,构建能够提供快速且准确的搜索结果的应用程序非常重要。用户期望立即得到相关的响应,但实现起来可能具有挑战性,特别是在处理大型数据集时。 这就是美丽搜索的用武之地——一个为轻松满足这些需求而构建的搜索引擎。 什么是美丽搜索? Meilisearch 是一个...
    编程 发布于2024-11-06
  • 并行 JavaScript 机
    并行 JavaScript 机
    作者:Vladas Saulis,PE Prodata,克莱佩达,立陶宛 2024 年 5 月 18 日 抽象的 本文提出了一种新的编程模型,可以以简单且自动平衡的方式利用多核 CPU 系统。该模型还提出了一种更简单的编程范例,用于在大多数大规模并行计算领域(例如天气预报、核物理、搜索引擎等)开发并...
    编程 发布于2024-11-06
  • 推荐项目:人事管理系统数据库设置
    推荐项目:人事管理系统数据库设置
    LabEx 的这个综合项目提供了深入研究数据库管理世界的宝贵机会,重点是人事管理系统的创建和实施。无论您是新手数据库管理员还是经验丰富的开发人员,这种实践经验都将为您提供必要的技能,以便在关系数据库环境中有效管理和操作数据。 深入了解数据库基础知识 该项目首先引导您完成使用 sudo...
    编程 发布于2024-11-06
  • Python 中实例方法和类方法有什么区别?
    Python 中实例方法和类方法有什么区别?
    类与实例方法Python 的 PEP 8 风格指南建议使用“self”作为实例方法的第一个参数,使用“cls”作为类方法的第一个参数。理解这两类方法之间的区别对于有效的面向对象编程至关重要。实例方法实例方法与类的特定实例相关联。它们对实例的数据进行操作,并且通常接收“self”作为它们的第一个参数。...
    编程 发布于2024-11-06
  • 将 AdoptiumJDK 源代码加载到 Eclipse IDE 中
    将 AdoptiumJDK 源代码加载到 Eclipse IDE 中
    AdoptiumJDK 的安装程序中没有内置源代码文件,如果您需要通过 Eclipse IDE 检查如何使用任何本机 JDK 方法,这是不可能的。 按照以下步骤在Eclipse IDE中加载源代码: 访问 AdoptiumJDK 官方网站并按所需的 JDK 版本进行过滤,在我的例子中是 11.0.2...
    编程 发布于2024-11-06
  • 绝对定位与相对定位:为什么它们的行为如此不同?
    绝对定位与相对定位:为什么它们的行为如此不同?
    了解绝对位置与相对位置:宽度、高度等处理网页上的元素定位时,了解这些概念绝对位置与相对位置的区别至关重要。让我们深入探讨经常引起疑问的四个关键点:1。相对宽度与绝对宽度为什么相对定位的div自动占据100%宽度,而绝对定位的div只占据内容宽度?原因是设置位置:absolute 从文档结构的正常流程...
    编程 发布于2024-11-06
  • Python、Node js 和 PHP 中用于验证码识别的顶级模块
    Python、Node js 和 PHP 中用于验证码识别的顶级模块
    在我们的自动化时代,大多数解决方案都可以免费找到,我现在不是在谈论解决数学问题,而是稍微复杂的任务,例如数据解析,和我们的例子一样,还有 recapcha 识别。但如何找到一个好的模块呢?毕竟,随着技术的发展,每个人都得到了它,无论是认真的开发人员还是彻头彻尾的骗子。 我分析了验证码识别模块的市场,...
    编程 发布于2024-11-06
  • 以下是一些标题选项,重点关注问题格式和核心内容:

**选项 1(直接且简洁):**

* **如何在 PHP 中高效地循环多维数组?**

**选项2
    以下是一些标题选项,重点关注问题格式和核心内容: **选项 1(直接且简洁):** * **如何在 PHP 中高效地循环多维数组?** **选项2
    在 PHP 中循环多维数组多维数组可能是解析的一个挑战,特别是在处理不同深度级别和非顺序索引时。考虑一个保存事件信息的数组,其中可以包含多个艺术家及其相应的链接,如下所示:array(2) { [1]=> array(3) { ["eventID"]...
    编程 发布于2024-11-06
  • 通过 Linting 提高代码质量
    通过 Linting 提高代码质量
    Whenever I start a new project, one of the first things I do is put in place a code linter. For the uninitiated, linters analyze your project and call...
    编程 发布于2024-11-06
  • 如何有效地执行JavaScript中的回调函数?
    如何有效地执行JavaScript中的回调函数?
    理解 JavaScript 中回调函数的本质在 JavaScript 中,回调函数提供了一种方便的机制,可以在另一个函数完成后执行一个函数它的执行。虽然概念很简单,但回调的最佳实现有时可能不清楚。让我们探讨一个简化的示例:var myCallBackExample = { myFirstFu...
    编程 发布于2024-11-06
  • Vue 框架简介
    Vue 框架简介
    What is Vue? from the Vue website Vue is a "progressive" JavaScript framework for building user interfaces. It works by build...
    编程 发布于2024-11-06
  • 逃离戏剧:为什么 HydePHP 是您的 WordPress 替代品
    逃离戏剧:为什么 HydePHP 是您的 WordPress 替代品
    WordPress 戏剧 随着 WordPress 生态系统面临前所未有的混乱,许多开发人员和网站所有者正在重新考虑他们的平台选择。最近 WordPress 联合创始人 Matt Mullenweg 和 WP Engine 之间的冲突凸显了 WordPress 社区内的控制、贡献和...
    编程 发布于2024-11-06
  • Go 中的并发模式;工作池和扇出/扇入
    Go 中的并发模式;工作池和扇出/扇入
    Go 以其卓越的并发模型而闻名,但许多开发人员只关注 goroutine 和通道。然而,工作池和扇出/扇入等并发模式提供了真正的效率。 本文将介绍这些高级概念,帮助您最大限度地提高 Go 应用程序的吞吐量。 为什么并发很重要 并发允许程序高效地执行任务,特别是在处理 I/O 操作、...
    编程 发布于2024-11-06
  • 如何在 C++ 中将单个字符转换为 std::string?
    如何在 C++ 中将单个字符转换为 std::string?
    从单个字符创建字符串人们可能会遇到需要将表示为 char 数据类型的单个字符转换为std::string。从字符串中获取字符很简单,只需在所需位置索引字符串即可。然而,相反的过程需要不同的方法。要从单个字符创建 std::string,可以使用多种方法:使用 std::string参数计数为 1:c...
    编程 发布于2024-11-06
  • JavaScript 变量名称中美元符号的含义是什么?
    JavaScript 变量名称中美元符号的含义是什么?
    JavaScript 变量名称中美元符号的意义在编程领域,命名约定的使用对于增强代码至关重要可读性并遵循最佳实践。在 JavaScript 中,美元符号 ($) 通常作为变量名称的前缀出现,特别是引用 jQuery 对象的变量名称。美元符号的用途是什么?与流行的看法相反,JavaScript 变量名...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3