"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > Magic and Muscles: ETL مع Magic وDuckDB مع بيانات من تدريبي على رفع الأثقال

Magic and Muscles: ETL مع Magic وDuckDB مع بيانات من تدريبي على رفع الأثقال

تم النشر بتاريخ 2024-08-01
تصفح:501

يمكنك الوصول إلى المسار الكامل هنا

بركه

في مشاركتي الأخيرة، كتبت عن لوحة التحكم التي قمت بإنشائها باستخدام Python وLooker Studio، لتصور بيانات التدريب الخاصة بي في رفع الأثقال. في هذا المنشور، سأرشدك خطوة بخطوة إلى خط أنابيب ETL (استخراج، تحويل، تحميل)، باستخدام نفس مجموعة البيانات.

لإنشاء المسار، سنستخدم Mage لتنسيق المسار وPython لتحويل البيانات وتحميلها، وكخطوة أخيرة، سنقوم بتصدير البيانات المحولة إلى قاعدة بيانات DuckDB.

لتنفيذ Mage، سنستخدم صورة عامل الإرساء الرسمية:

docker pull mageai/mageai:latest

سيبدو خط الأنابيب كما يلي:

Image description

يستخرج

سيكون الاستخراج بسيطًا، كل ما علينا فعله هو قراءة ملف CSV وإنشاء إطار بيانات الباندا به، حتى نتمكن من المضي قدمًا في الخطوات التالية. باستخدام كتلة أداة تحميل البيانات، لدينا بالفعل قالب للعمل به، فقط تذكر تعيين المعلمة "sep" int he read_csv()، حتى يتم تحميل البيانات بشكل صحيح.

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'`

تحول

في هذه الخطوة، باستخدام كتلة المحولات، التي تحتوي على الكثير من القوالب للاختيار من بينها، سنختار قالبًا مخصصًا.

التحويل الذي يتعين علينا القيام به هو في الأساس تعيين عمود اسم التمرين، حتى نتمكن من تحديد أي جزء من الجسم يتوافق مع التمرين المحدد.

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. في صورة عامل الإرساء، لدينا بالفعل 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