Magic and Muscle:使用 Magic 和 DuckDB 进行 ETL,它包括我的举重训练数据-Python教程

首页 2024-07-12 10:24:11

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

法师

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

我们将使用它来建造管道 mage 安排和使用管道 python 在转换和加载数据的最后一步,我们导出转换后的数据 duckdb 数据库中。

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

docker pull mageai/mageai:latest

管道将如下所示:

提炼

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

from mage_ai.io.file import fileio
import pandas as pd

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_file(*args, **kwargs):

? ? filepath = 'default_repo/data_strong.csv'
? ? df = pd.read_csv(filepath, sep=';')  

? ? return df

@test
def test_output(output, *args) -> none:
? ? assert output is not none, 'the output is undefined'`

转换

在此步骤中,使用 transformer 有许多模板可供选择,我们将选择一个自定义的模板。

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

import pandas as pd

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

body_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'}


@transformer
def 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

@test
def test_output(output, *args) -> none:
? ? assert output is not none, 'the output is undefined'

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

加载

现在是时候加载数据了 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,包括我的举重训练数据的详细内容,请关注其他相关文章!


p