Rumah > Artikel > pembangunan bahagian belakang > Magic and Muscles: ETL dengan Magic dan DuckDB dengan data daripada latihan powerlifting saya
Anda boleh mengakses saluran paip penuh di sini
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:
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'`
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.
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 }};
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!