ホームページ >バックエンド開発 >Python チュートリアル >マジックとマッスル: Magic を使用した ETL と、パワーリフティング トレーニングのデータを使用した DuckDB
ここから完全なパイプラインにアクセスできます
前回の投稿では、powrlifting トレーニング データを視覚化するために、Python と Looker Studio を使用して構築したダッシュボードについて書きました。この投稿では、同じデータセットを使用した ETL (抽出、変換、読み込み) パイプラインの手順を段階的に説明します。
パイプラインを構築するには、Mage を使用してパイプラインを調整し、Python を使用してデータの変換とロードを行います。最後のステップとして、変換されたデータを DuckDB データベースにエクスポートします。
Mage を実行するには、公式の Docker イメージを使用します。
docker pull mageai/mageai:latest
パイプラインは次のようになります:
抽出は簡単です。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 ブロック内で行っている変更を視覚化できることです。
今度は、データを 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 を使用してデータのパイプラインを構築する方法を簡単に説明しました。今後の投稿では、この素晴らしいフレームワークについてさらに詳しく見ていきます。
以上がマジックとマッスル: Magic を使用した ETL と、パワーリフティング トレーニングのデータを使用した DuckDBの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。