جلسه اول: از سیگنال خام تا جدول ویژگی - آغاز مهندسی داده برای ML

هدف اصلی: درک تفاوت بین تحلیل سیگنال به صورت دستی و ساخت یک پایپ‌لاین داده برای استخراج ویژگی در مقیاس بزرگ.

بخش اول: مقدمه و تعریف مسئله

سوال کلیدی: “ما به عنوان متخصصان پردازش سیگنال و تشخیص الگو، می‌توانیم از یک سیگنال ECG ویژگی‌های عالی استخراج کنیم. اما اگر میلیون‌ها سیگنال از هزاران بیمار داشته باشیم که به صورت مداوم تولید می‌شوند، چگونه این کار را به صورت کارآمد، قابل اعتماد و خودکار انجام دهیم؟”

مباحث:

معرفی چالش: از تحلیل اکتشافی (Exploratory) تا مهندسی تولید (Production). معرفی Feature Engineering به عنوان قلب تپنده یادگیری ماشین و پل ارتباطی با مهندسی داده. معرفی دیتاست: MIT-BIH Arrhythmia Database. این دیتاست شامل سیگنال‌های ECG بیماران است و برای تشخیص آریتمی (بیماری قلبی) استفاده می‌شود. این یک دیتاست “عالی” و مرتبط با تخصص شماست.

بخش دوم: رویکرد سنتی (تحلیل روی یک ماشین)

در این بخش، روشی که یک محقق یا دانشجوی کارشناسی ارشد برای شروع پروژه استفاده می‌کند را نشان می‌دهیم.

۱. آماده‌سازی محیط و داده: ابتدا کتابخانه‌های لازم را نصب کرده و دیتاست را از یک منبع قابل دسترس (مانند Kaggle) دانلود می‌کنیم.

# signal_analysis_local.py
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# بارگذاری دیتاست (فرض می‌کنیم فایل CSV آماده است)
# می‌توانید این دیتاست را از Kaggle دانلود کنید:
# https://www.kaggle.com/datasets/shayanfazeli/heartbeat
try:
    df = pd.read_csv('mitbih_train.csv', header=None)
except FileNotFoundError:
    print("فایل mitbih_train.csv یافت نشد. لطفاً از لینک بالا دانلود کنید.")
    exit()

# انتخاب یک نمونه سیگنال نرمال (کلاس 0)
normal_beat = df[df[187] == 0.0].iloc[0].values[:-1] # ستون آخر برچسب است

# رسم سیگنال
plt.figure(figsize=(12, 4))
plt.plot(normal_beat)
plt.title("نمونه سیگنال ECG نرمال")
plt.xlabel("نمونه‌های زمانی")
plt.ylabel("دامنه (mV)")
plt.grid(True)
plt.show()

بحث کلاسی: چه مشکلاتی در این روش وجود دارد؟

تکرارپذیری پایین: اگر داده جدیدی بیاید، باید دوباره و دوباره این اسکریپت را اجرا کنیم. مقیاس‌پذیری: پردازش میلیون‌ها رکورد با این روش بسیار کند است. مدیریت: چه کسی می‌داند کدام نسخه از کد روی کدام داده اجرا شده است؟ همکاری: به اشتراک‌گذاری این فرآیند با دیگران دشوار است.

بخش سوم: رویکرد مهندسی داده (ساخت پایپ‌لاین)

حالا همان فرآیند را به یک پایپ‌لاین داده مدرن تبدیل می‌کنیم. از یک ابزار Orchestration ساده و مدرن به نام Prefect استفاده می‌کنیم چون بسیار Python-native و قابل فهم است.

۱. آماده‌سازی محیط: