「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > マジックとマッスル: Magic を使用した ETL と、パワーリフティング トレーニングのデータを使用した DuckDB

マジックとマッスル: Magic を使用した ETL と、パワーリフティング トレーニングのデータを使用した DuckDB

2024 年 8 月 1 日に公開
ブラウズ:501

ここから完全なパイプラインにアクセスできます

メイジ

前回の投稿では、powrlifting トレーニング データを視覚化するために、Python と Looker Studio を使用して構築したダッシュボードについて書きました。この投稿では、同じデータセットを使用した ETL (抽出、変換、読み込み) パイプラインの手順を段階的に説明します。

パイプラインを構築するには、Mage を使用してパイプラインを調整し、Python を使用してデータの変換とロードを行います。最後のステップとして、変換されたデータを DuckDB データベースにエクスポートします。

Mage を実行するには、公式の Docker イメージを使用します:

docker pull mageai/mageai:latest

パイプラインは次のようになります:

Image description

抽出する

抽出は簡単です。csv ファイルを読み取り、それを使用してパンダ データフレームを作成するだけで、次のステップに進むことができます。データ ローダー ブロックを使用すると、作業するタンプレートがすでにあります。データが正しくロードされるように、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 ブロックを使用して、カスタム テンプレートを選択します。

必要な変換は基本的にエクササイズ名列のマッピングなので、特定のエクササイズに体のどの部分が対応するかを識別できます。

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 の興味深い機能は、列のボディ部分を使用して円グラフを生成できるようにする追加チャートを使用して、Transformer ブロック内で行っている変更を視覚化できることです。

Image description

負荷

データを DuckDB にロードします。 Docker イメージにはすでに DuckDB があるため、パイプラインに別のブロックを含めるだけで済みます。 SQL テンプレートを含む Data Exporter ブロックを含めて、テーブルを作成してデータを挿入できるようにしましょう。

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 を含む特定のタスクを開発するためのテンプレートの完全なセットを提供する powrfull ツールです。この投稿では、Mage を使用してデータのパイプラインを構築する方法を簡単に説明しました。今後の投稿では、この素晴らしいフレームワークについてさらに詳しく見ていきます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/deadpunnk/magic-and-muscles-etl-with-magic-and-duckdb-with-data-from-my-powerlifting-training-2ocj?1権利侵害、削除するには、[email protected] までご連絡ください。
最新のチュートリアル もっと>

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

Copyright© 2022 湘ICP备2022001581号-3