KDnuggets→ المصدر

كيفية استخدام itertools في Python من أجل feature engineering للسلاسل الزمنية

يساعد itertools في Python على إنشاء ميزات للسلاسل الزمنية بسرعة. وتستعرض المقالة الجديدة أمثلة عملية على feature engineering بكفاءة وكودًا جاهزًا لتوسيع مشاريعك

كيفية استخدام itertools في Python من أجل feature engineering للسلاسل الزمنية
المصدر: KDnuggets. كولاج: Hamidun News.
◐ استمع للمقال

Python itertools — وهي وحدة برمجية مدمجة للعمل مع المكررات، وتصبح أداة لا غنى عنها في هندسة الميزات للسلاسل الزمنية. إذا كنت تبني ميزات من خلال الحلقات ونسخ مجموعات البيانات، فإن itertools سيساعدك على فعل ذلك بسرعة أكبر بعدة مرات وبكفاءة أعلى في استهلاك الذاكرة.

ما هو itertools ولماذا تحتاج إليه

تحتوي وحدة itertools على دوال لإنشاء مكررات سريعة وفعالة في استخدام الذاكرة. للعمل مع السلاسل الزمنية، هذا أمر حاسم: بدلاً من تخزين القوائم في الذاكرة، نوّلد الميزات على الفور. على مجموعات البيانات التي تحتوي على ملايين أو مليارات النقاط، هذا ليس مريحاً فقط — إنه ضروري للعمل على الإطلاق.

الدوال الرئيسية لـ itertools في هندسة الميزات:

  • `combinations()` — جميع الأزواج والتوليفات من العناصر (ميزات التأخير، تفاعلات المتغيرات)
  • `permutations()` — جميع التبديلات (اختبار الأوامر وتأثير الميزات)
  • `islice()` — استخراج السلاسل الجزئية والنوافذ المنزلقة بدون نسخ
  • `zip_longest()` — دمج السلاسل ذات الأطوال المختلفة مع معالجة القيم المفقودة
  • `chain()` — دمج المكررات في تدفق واحد بدون نسخ البيانات

أمثلة عملية: من النهج الساذج إلى القابل للتوسع

المشكلة الكلاسيكية: سلسلة زمنية للأسعار، تحتاج إلى بناء ميزات التأخير مع تأخيرات 1، 2، 3.

النهج الساذج (بطيء):

```python import pandas as pd data = pd.read_csv('prices.csv') for lag in range(1, 4): data[f'price_lag_{lag}'] = data['price'].shift(lag) ```

المشكلة: كل `shift()` ينشئ نسخة من مجموعة البيانات في الذاكرة. على 10 ملايين صف، هذا يعني ~300 مليون عملية نسخ بالإضافة إلى استهلاك ذاكرة 3x.

مع itertools (سريع وفعال):

```python from itertools import islice prices = [100, 102, 105, 103, 107, 110] for lag in range(1, 4): lagged = list(islice(prices, lag, None)) print(f'lag {lag}: {lagged}') ```

`islice` لا ينسخ القائمة — فهو ينقل المؤشر إلى الموضع المطلوب ببساطة. على مجموعات البيانات الكبيرة، هذا يوفر ساعات من الحساب.

المثال الثاني — النوافذ المنزلقة:

```python from itertools import islice, tee

def sliding_window(iterable, n): iterables = tee(iterable, n) for i, it in enumerate(iterables): for _ in range(i): next(it, None) return zip(*iterables)

prices = [100, 102, 105, 103, 107, 110] windows = list(sliding_window(prices, 3)) ```

هذا ينشئ نوافذ منزلقة بحجم 3، باستخدام مكررات كسولة بدلاً من نسخ الصفيف.

الأداء: حيث يتم توفير الذاكرة والوقت

على مجموعات البيانات التي تحتوي على مليارات النقاط:

  • الحساب الكسول — يتم توليد العناصر عند الطلب، وليس تحميلها بالكامل
  • سلاسل العمليات — `chain()` تدمج المصادر بدون نسخ وسيطة
  • التركيب — بدمج itertools، نبني خط أنابيب معقداً بحد أدنى من الذاكرة

النتيجة: يمكن أن ينخفض استهلاك الذاكرة بمعامل 10-100. في السحابة، هذا يعني فاتورة أقل رخصاً. على آلة محلية — يعمل مع ما لم يكن يناسب الذاكرة من قبل.

ما معنى هذا بالنسبة لك

للعاملين في مجال علوم البيانات: اعمل مع مجموعات بيانات كانت ببساطة لا تناسب الذاكرة من قبل.

لمهندسي التعلم الآلي: نموذج الإنتاج يتطلب موارد أقل وأكثر استقراراً.

itertools ليست سحراً، إنها طريقة مدمجة للعمل مع البيانات بذكاء أكبر. ابدأ بميزات التأخير والنوافذ المنزلقة، ثم ابحث عن الأماكن الأخرى حيث يمكنك تطبيق الحساب الكسول.

ZK
Hamidun News
أخبار الذكاء الاصطناعي بدون ضوضاء. اختيار تحريري يومي من أكثر من 400 مصدر. منتج من جمال حميدون، رئيس الذكاء الاصطناعي في Alpina Digital.
ما رأيك؟
جارٍ تحميل التعليقات…