"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Magic and Muscles: 매직을 사용한 ETL 및 파워리프팅 훈련 데이터를 사용한 DuckDB

Magic and Muscles: 매직을 사용한 ETL 및 파워리프팅 훈련 데이터를 사용한 DuckDB

2024-08-01에 게시됨
검색:859

여기에서 전체 파이프라인에 액세스할 수 있습니다.

마술사

지난 게시물에서 저는 파워리프팅 훈련 데이터를 시각화하기 위해 Python과 Looker Studio를 사용하여 구축한 대시보드에 대해 썼습니다. 이 게시물에서는 동일한 데이터세트를 사용하여 ETL(추출, 변환, 로드) 파이프라인을 단계별로 안내해 드리겠습니다.

파이프라인을 구축하기 위해 Mage를 사용하여 파이프라인을 조정하고 데이터 변환 및 로드를 위한 Python을 사용합니다. 마지막 단계로 변환된 데이터를 DuckDB 데이터베이스로 내보냅니다.

Mage를 실행하기 위해 공식 도커 이미지를 사용합니다:

docker pull mageai/mageai:latest

파이프라인은 다음과 같습니다.

Image description

발췌

추출은 간단합니다. 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 블록을 사용하여 사용자 정의 템플릿을 선택하겠습니다.

우리가 해야 할 변환은 기본적으로 운동 이름 열의 매핑이므로 특정 운동에 해당하는 신체 부위를 식별할 수 있습니다.

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 템플릿과 함께 데이터 내보내기 블록을 포함하겠습니다.

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를 사용하여 데이터 파이프라인을 구축하는 방법에 대해 간략하게 설명했습니다. 향후 게시물에서 우리는 이 놀라운 프레임워크에 대해 더 자세히 알아볼 것입니다.

릴리스 선언문 이 기사는 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