كيف تستخدم itertools في Python لهندسة الميزات في السلاسل الزمنية
تساعد وحدة itertools في Python على إنشاء ميزات السلاسل الزمنية بسرعة. يستعرض المقال الجديد أمثلة عملية لهندسة الميزات (feature engineering) بكفاءة، مع شيفرة جاهزة لتوسيع نطاق مشاريعك.
معالج بواسطة الذكاء الاصطناعي من KDnuggets؛ بتحرير Hamidun News
تُعدّ وحدة Python itertools وحدة مدمجة للتعامل مع المكرِّرات (iterators)، وتتحول إلى أداة لا غنى عنها عند تنفيذ feature engineering للسلاسل الزمنية. إذا كنت تبني الميزات عبر الحلقات وتنسخ مجموعات البيانات، فإن itertools تساعدك على إنجاز ذلك أسرع بأضعاف وبذاكرة أقل.
ما هي itertools ولماذا نحتاجها
تحتوي وحدة itertools على دوال لإنشاء مكرِّرات سريعة وموفّرة للذاكرة. وهذا أمر حاسم في التعامل مع السلاسل الزمنية: فبدلًا من حفظ القوائم في الذاكرة، نولّد الميزات لحظة الحاجة إليها. وفي مجموعات البيانات التي تضم ملايين أو مليارات النقاط، لا يقتصر الأمر على الراحة، بل هو شرط أساسي لإمكانية العمل أصلًا.
أهم دوال itertools في feature engineering:
- `combinations()` — جميع الأزواج والتركيبات الممكنة للعناصر (ميزات lag، وتفاعلات المتغيرات)
- `permutations()` — جميع التباديل (لاختبار الترتيبات وتأثير الميزات)
- `islice()` — استخراج المتتاليات الجزئية والنوافذ المنزلقة دون نسخ
- `zip_longest()` — دمج سلاسل مختلفة الطول مع معالجة القيم المفقودة
- `chain()` — دمج المكرِّرات في تدفق واحد دون نسخ البيانات
أمثلة عملية: من النهج الساذج إلى النهج القابل للتوسع
المسألة الكلاسيكية: لدينا سلسلة زمنية للأسعار، ونريد بناء ميزات lag بفترات تأخر 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 باستخدام مكرِّرات كسولة (lazy) بدل نسخ المصفوفة.
الأداء: أين تُوفَّر الذاكرة والوقت
في مجموعات البيانات التي تضم مليارات النقاط:
- الحسابات الكسولة — تُولَّد العناصر عند الطلب فقط، ولا تُحمَّل كاملةً
- سلاسل العمليات — تدمج `chain()` المصادر دون نسخ وسيطة
- التركيب — بدمج دوال itertools نبني خط معالجة معقدًا بأقل قدر من الذاكرة
النتيجة: قد ينخفض استهلاك الذاكرة بمقدار 10-100 مرة. وفي السحابة يعني ذلك فاتورة أقل. أما على الجهاز المحلي، فيصبح ممكنًا تشغيل ما كان يعجز عن الاتساع في RAM.
ماذا يعني هذا لك
لعلماء البيانات: يمكنكم العمل مع مجموعات بيانات كانت تتجاوز سعة الذاكرة سابقًا. ولمهندسي ML: يتطلب نموذج الإنتاج موارد أقل ويعمل بثبات أكبر.
itertools ليست سحرًا، بل وسيلة مدمجة للتعامل مع البيانات بذكاء أكبر. ابدأ بميزات lag والنوافذ المنزلقة، ثم ستكتشف مواضع أخرى يمكن فيها تطبيق الحسابات الكسولة.
Executive AI Consulting, Custom Agents & Team Workshops
Work directly with Zhemal Khamidun at hamidun.com — enterprise AI architecture, production RAG & multi-agent systems, and executive training.
أهم ما في عالم الذكاء الاصطناعي — مرة كل أسبوع
سبع قصص مهمة فعلاً هذا الأسبوع، مختارة بعناية. بلا ضجيج ولا بيانات صحفية.
تم! تحقق من بريدك للتأكيد.