Rumah >pembangunan bahagian belakang >Tutorial Python >Magic and Muscles: ETL dengan Magic dan DuckDB dengan data daripada latihan powerlifting saya

Magic and Muscles: ETL dengan Magic dan DuckDB dengan data daripada latihan powerlifting saya

王林
王林asal
2024-07-17 12:39:01410semak imbas

Anda boleh mengakses saluran paip penuh di sini

Mage

Dalam catatan terakhir saya, saya menulis tentang papan pemuka yang saya bina menggunakan Python dan Looker Studio, untuk menggambarkan data latihan powrlifting saya. Dalam siaran ini saya akan membimbing anda melalui langkah demi langkah saluran paip ETL (Ekstrak, Transformasi, Muat), menggunakan set data yang sama.

Untuk membina saluran paip, kami akan menggunakan Mage untuk mengatur saluran paip dan Python untuk mengubah dan memuatkan data, sebagai langkah terakhir kami akan mengeksport data yang diubah menjadi pangkalan data DuckDB.

Untuk melaksanakan Mage, kami akan menggunakan imej docker rasmi:

docker pull mageai/mageai:latest

Jalur paip akan kelihatan seperti ini:

Image description

Ekstrak

Pengekstrakan akan menjadi mudah, kita hanya perlu membaca fail csv dan mencipta bingkai data panda dengannya, supaya kita boleh meneruskan ke langkah seterusnya. Menggunakan blok Pemuat Data, kami sudah mempunyai tamplate untuk digunakan, cuma ingat untuk menetapkan parameter "sep" int dia read_csv( ) fungsi, jadi data dimuatkan dengan betul.

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

Berubah

Dalam langkah ini, menggunakan blok Transformer, yang mempunyai banyak templat untuk dipilih, kami akan memilih templat tersuai.

Transformasi yang perlu kami lakukan pada asasnya ialah pemetaan lajur Nama Latihan, jadi kami boleh mengenal pasti bahagian badan yang sesuai dengan senaman tertentu.

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'

Ciri Mage yang menarik ialah kita boleh menggambarkan perubahan yang kita buat di dalam blok Tranformer, menggunakan carta Tambah yang memilih pilihan untuk menjana graf pai menggunakan bahagian Badan lajur.

Image description

Muatkan

Sekarang adalah masa untuk memuatkan data ke DuckDB. Dalam imej docker kami sudah mempunyai DuckDB, jadi kami hanya perlu memasukkan satu lagi blok dalam saluran paip kami. Mari sertakan blok Pengeksport Data, dengan templat SQL supaya kita boleh membuat jadual dan memasukkan data.

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 }};

Kesimpulan

Mage ialah alat yang berkuasa untuk mengatur saluran paip, menyediakan set templat lengkap untuk membangunkan tugas khusus yang melibatkan ETL. Dalam siaran ini, kami mempunyai penjelasan nafas tentang cara mula menggunakan Mage untuk membina saluran paip data. Dalam siaran akan datang, kami akan meneroka lebih lanjut tentang rangka kerja yang mengagumkan ini.

Atas ialah kandungan terperinci Magic and Muscles: ETL dengan Magic dan DuckDB dengan data daripada latihan powerlifting saya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn