Magic and Muscle:使用 Magic 和 DuckDB 进行 ETL,其中包含我的举重训练数据

您可以在这里访问完整的管道

法师

在我的上一篇文章中,我写了一个使用 python 和 looker studio 构建的仪表板,用于可视化我的举重训练数据。在这篇文章中,我将使用相同的数据集逐步引导您完成 etl(提取、转换、加载)管道。

为了构建管道,我们将使用 mage 来编排管道,并使用 python 来转换和加载数据,最后一步,我们将转换后的数据导出到 duckdb 数据库中。

要执行 mage,我们需要使用官方 docker 镜像:

docker pull mageai/mageai:latest

管道将如下所示:

image description

提炼

提取很简单,我们只需读取 csv 文件并用它创建一个 pandas 数据框,这样我们就可以进行下一步。使用数据加载器块,我们已经有了一个可以使用的模板,只需记住在 read_csv( ) 函数中设置“sep”参数,即可正确加载数据。

from mage_ai.io.file import fileioimport pandas as pdif 'data_loader' not in globals():    from mage_ai.data_preparation.decorators import data_loaderif 'test' not in globals():    from mage_ai.data_preparation.decorators import test@data_loaderdef load_data_from_file(*args, **kwargs):    filepath = 'default_repo/data_strong.csv'    df = pd.read_csv(filepath, sep=';')      return df@testdef test_output(output, *args) -> none:    assert output is not none, 'the output is undefined'`

转换

在这一步中,使用 transformer 块,有很多模板可供选择,我们将选择一个自定义模板。

我们要做的转换基本上就是exercise name列的映射,这样我们就可以识别出哪个身体部位对应于特定的练习。

import pandas as pdif 'transformer' not in globals():    from mage_ai.data_preparation.decorators import transformerif 'test' not in globals():    from mage_ai.data_preparation.decorators import testbody_part = {'squat (barbell)': 'pernas',    'bench press (barbell)': 'peitoral',    'deadlift (barbell)': 'costas',    'triceps pushdown (cable - straight bar)': 'bracos',    'bent over row (barbell)': 'costas',    'leg press': 'pernas',    'overhead press (barbell)': 'ombros',    'romanian deadlift (barbell)': 'costas',    'lat pulldown (machine)': 'costas',    'bench press (dumbbell)': 'peitoral',    'skullcrusher (dumbbell)': 'bracos',    'lying leg curl (machine)': 'pernas',    'hammer curl (dumbbell)': 'bracos',    'overhead press (dumbbell)': 'ombros',    'lateral raise (dumbbell)': 'ombros',    'chest press (machine)': 'peitoral',    'incline bench press (barbell)': 'peitoral',    'hip thrust (barbell)': 'pernas',    'agachamento pausado ': 'pernas',    'larsen press': 'peitoral',    'triceps dip': 'bracos',    'farmers march ': 'abdomen',    'lat pulldown (cable)': 'costas',    'face pull (cable)': 'ombros',    'stiff leg deadlift (barbell)': 'pernas',    'bulgarian split squat': 'pernas',    'front squat (barbell)': 'pernas',    'incline bench press (dumbbell)': 'peitoral',    'reverse fly (dumbbell)': 'ombros',    'push press': 'ombros',    'good morning (barbell)': 'costas',    'leg extension (machine)': 'pernas',    'standing calf raise (smith machine)': 'pernas',    'skullcrusher (barbell)': 'bracos',    'strict military press (barbell)': 'ombros',    'seated leg curl (machine)': 'pernas',    'bench press - close grip (barbell)': 'peitoral',    'hip adductor (machine)': 'pernas',    'deficit deadlift (barbell)': 'pernas',    'sumo deadlift (barbell)': 'costas',    'box squat (barbell)': 'pernas',    'seated row (cable)': 'costas',    'bicep curl (dumbbell)': 'bracos',    'spotto press': 'peitoral',    'incline chest fly (dumbbell)': 'peitoral',    'incline row (dumbbell)': 'costas'}@transformerdef transform(data, *args, **kwargs):    strong_data = data[['date', 'workout name', 'exercise name', 'weight', 'reps',    'workout duration']]    strong_data['body part'] = strong_data['exercise name'].map(body_part)    return strong_data@testdef test_output(output, *args) -> none:    assert output is not none, 'the output is undefined'

mage 的一个有趣的功能是,我们可以使用添加图表来可视化我们在 tranformer 块内所做的更改,选择可以使用列 body 部分生成饼图。

image description

加载

现在是时候将数据加载到 duckdb 了。在 docker 镜像中,我们已经有了 duckdb,因此我们只需在管道中包含另一个块即可。让我们包含数据导出器块和 sql 模板,以便我们可以创建表并插入数据。

CREATE OR REPLACE TABLE powerlifting (    _date DATE,    workout_name STRING,    exercise_name STRING,    weight STRING,    reps STRING,    workout_duration STRING,    body_part STRING);INSERT INTO powerlifting SELECT * FROM {{ df_1 }};

结论

mage 是一个功能强大的管道编排工具,提供了一整套用于开发涉及 etl 的特定任务的模板。在这篇文章中,我们对如何开始使用 mage 构建数据管道进行了简短的解释。在以后的文章中,我们将进一步探索这个令人惊奇的框架。

以上就是Magic and Muscle:使用 Magic 和 DuckDB 进行 ETL,其中包含我的举重训练数据的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1347991.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Python 中的类(简介)
上一篇 2025年12月13日 11:39:30
使用 Python 构建 Tic-Tac-Toe 终端游戏
下一篇 2025年12月13日 11:39:37

相关推荐

  • Python与JavaScript MD5加密结果差异:如何解决有道翻译逆向解析中的类型不一致问题?

    有道翻译逆向工程:Python与JavaScript MD5加密结果差异及解决方案 在进行有道翻译逆向工程时,Python和JavaScript MD5加密结果的差异常常困扰开发者。这种差异源于两种语言对MD5哈希值处理方式的不同。本文将深入分析此问题,并提供有效的解决方法。 问题描述: 在使用Py…

    2026年9月2日
    100
  • Python和JavaScript MD5加密结果不同的原因是什么?

    Python与JavaScript MD5加密结果差异解析:有道翻译逆向工程案例 在进行有道翻译逆向工程时,经常会遇到Python和JavaScript MD5加密结果不一致的情况。这并非由于MD5算法本身的差异,而是两种语言处理和输出结果方式的不同。 Python的hashlib.md5()函数默…

    2026年9月2日
    400
  • 如何高效生成自定义答题卡?

    自定义答题卡生成:技术方案及流程详解 许多应用,如考试系统和问卷调查,都需要生成个性化答题卡。本文探讨实现自定义答题卡生成的多种方案,并强调清晰描述问题的重要性。 首先,必须明确答题卡结构。这包括题目数量、题型(单选、多选、填空等)以及答案区域设计。不同的题型需要不同的答案记录方式,例如单选题只需标…

    2026年9月2日
    100
  • VSCode的代码怎么运行_VSCode多语言代码执行方法与配置教程

    VSCode通过调用系统已安装的语言运行时来运行代码,需先安装对应语言环境,再结合扩展、集成终端或配置文件实现执行。 VSCode运行代码,说白了,它自己其实不“运行”代码,它更像是一个极其智能的遥控器和指挥中心。它利用你系统里已经安装好的各种语言运行时、编译器或解释器来完成这个任务。核心思路就是:…

    2026年9月2日
    200
  • 如何用代码实现自定义答题卡生成功能?

    如何构建一个自定义答题卡生成系统? 许多应用场景,例如在线考试系统和调查问卷平台,都需要自定义答题卡生成功能。本文将探讨如何实现这一功能。 首先,我们需要明确答题卡的设计要素: 题型: 支持多种题型,例如单选题、多选题、判断题和填空题等,每种题型需要不同的答案区域设计。题目数量: 系统应能根据题目数…

    2026年9月2日
    200
  • 如何快速生成各种类型的答题卡?

    快速生成答题卡,满足考试或问卷调查需求!本文将指导您轻松创建各种类型的答题卡。 许多用户希望快速生成答题卡,用于考试或问卷调查。本文将探讨如何实现这一功能,并解答用户关于答题卡生成代码的疑问。 答题卡生成方法取决于答题卡的复杂程度和所需功能。例如,是简单的选择题答题卡,还是包含填空题、简答题等多种题…

    2026年9月2日
    100
  • VSCode怎么侧边显示函数_VSCode大纲视图侧边栏函数列表教程

    最直接的方式是启用VSCode的“大纲视图”功能,它能清晰列出文件中的函数、类等符号,支持快速导航与筛选,提升代码阅读与重构效率。 VSCode中想要在侧边栏看到函数列表,最直接、也是我个人觉得效率最高的方式,就是利用它的“大纲视图”(Outline View)。这个功能就像给你的代码文件画了一张清…

    2026年9月2日
    200
  • 如何可靠地将复杂的LaTeX公式转换为可执行代码?

    LaTeX公式到可执行代码的可靠转换:挑战与策略 许多科研人员和工程师面临将LaTeX公式转换为可用于编程语言(如Python或JavaScript)进行计算的代码的难题。LaTeX侧重排版而非计算逻辑,直接转换并非易事。本文探讨如何将LaTeX公式字符串转换为可执行代码。 一个实际案例: {P}_…

    2026年9月2日
    100
  • 如何将复杂的LaTeX公式转换成Python或JavaScript代码进行数值计算?

    LaTeX公式到编程语言代码转换:挑战与解决方案 将LaTeX数学公式转换为Python或JavaScript等编程语言代码以进行数值计算,并非易事。LaTeX注重公式的排版美观,而编程语言则强调代码的执行逻辑。两者表达方式的差异,导致直接转换存在诸多挑战。 例如,考虑以下LaTeX公式: {P}_…

    2026年9月2日
    100
  • Cura二次开发版本输出的GCx文件如何解密?

    破解Cura自定义版本生成的加密GCx文件 一些Cura的二次开发版本会对生成的GCode文件进行加密,通常以GCx格式保存。本文将指导您如何解密这些文件,恢复原始的GCode代码。 GCx文件解密方法 Cura的GCx文件基于XML结构,包含加密的GCode指令。解密流程如下: XML解析: 使用…

    2026年9月2日
    200
  • 如何使用 Composer 解决 Docker API 版本问题

    可以通过一下地址学习composer:学习地址 在开发过程中,我发现了一个名为 badrutdinovrr/docker-php-api 的库,它是一个基于 Docker API 1.39 版本的分支。这个库是由 Jane OpenAPI Client 生成器生成的 Docker API 客户端,专…

    用户投稿 2026年9月2日
    100
  • 在VS Code中正确配置Docker容器PHP环境

    本文旨在解决在使用VS Code进行Docker化PHP项目开发时,IDE无法识别容器内PHP版本,反而使用本地PHP版本的问题。核心解决方案是利用VS Code的Remote Containers扩展,实现直接在Docker容器内部进行开发,从而确保VS Code的PHP工具链与容器环境保持一致,…

    2026年9月1日
    200
  • 使用 Composer 和 Docker 简化 Open Police Complaints 的安装与配置

    open police complaints 是一个基于 laravel 的 php 项目,旨在简化警察投诉的处理流程。该项目需要多个组件的支持,包括 nginx、php-fpm、postgresql 和 composer。我最初的尝试遇到了各种环境配置问题,最终通过使用 docker 和 comp…

    用户投稿 2026年9月1日
    200
  • MySQL安全认证插件使用_MySQL提升登录安全性的方案

    MySQL安全认证插件使用_MySQL提升登录安全性的方案MySQL安全认证插件使用_MySQL提升登录安全性的方案MySQL安全认证插件使用_MySQL提升登录安全性的方案MySQL安全认证插件使用_MySQL提升登录安全性的方案

    mysql登录安全性核心在于认证插件,推荐使用caching_sha2_password。1.检查默认插件:show variables like ‘default_authentication_plugin’; 2.修改my.cnf配置default_authenticat…

    2026年9月1日 用户投稿
    200
  • Python中pip install sklearn和pip install scikit-learn有什么区别?

    pip install sklearn 与 pip install scikit-learn:细微差别与最佳实践 在 Python 的机器学习领域,您可能会遇到两种安装 scikit-learn 库的命令:pip install sklearn 和 pip install scikit-learn。…

    2026年9月1日
    100
  • Windows下使用VS2013编译使用SDL库

    Windows下使用VS2013编译使用SDL库Windows下使用VS2013编译使用SDL库Windows下使用VS2013编译使用SDL库Windows下使用VS2013编译使用SDL库

    simple directmedia layer(sdl)是一个跨平台开发库,旨在通过opengl和direct3d提供对音频、键盘、鼠标、操纵杆和图形硬件的低级访问。多种软件,如视频播放工具、仿真器和许多热门游戏(包括valve的获奖作品和humble bundle中的众多游戏)都依赖于它。 SD…

    2026年9月1日 用户投稿
    300
  • pip install sklearn和pip install scikit-learn究竟有何区别?

    pip install sklearn 和 pip install scikit-learn 的区别与联系 这两个命令看似相似,实则指向不同的包。它们的区别在于: pip install scikit-learn: 这是正确的安装 Scikit-learn 库的命令。它只安装 Scikit-lear…

    2026年9月1日
    200
  • ChatGPT怎么用_ChatGPT注册登录与基础使用教程

    答案是注册并掌握提问技巧后,ChatGPT能成为高效工具。需通过官网注册,验证邮箱和手机号,登录后可在聊天界面输入问题,利用上下文记忆、角色设定、明确指令等技巧提升回答质量,免费版适合初试,Plus版则提供GPT-4、插件、数据分析等高级功能,适合高频深度使用者。 ☞☞☞AI 智能聊天, 问答助手,…

    2026年9月1日
    200
  • 响指AI开发平台进阶版重磅上线:后端能力全面开放!

    “我本来只是想帮我们机构整理一下志愿者信息,没想到最后竟然做出了一个能在线报名、筛选和地图导航的完整平台。” 李瑶是一家公益组织的项目协调员,她原计划请人开发一个志愿者报名系统,但被动辄上万的开发费用劝退了。 后来她试用了响指进阶版,只输入一句话:“我想做一个可以收集志愿者报名信息、自动分组、并在地…

    2026年9月1日
    100
  • 怎么在VSCode安装Pylint_VSCode配置Python代码检查工具Pylint教程

    答案是安装并配置Pylint扩展与Python包,再在VSCode中启用并自定义规则。首先安装VSCode的Pylint扩展,然后通过pip install pylint在Python环境中安装库;接着在settings.json中设置”python.linting.pylintEnab…

    2026年9月1日
    700

发表回复

登录后才能评论
关注微信