كيفية حساب المتوسطات المتحركة في بايثون
المتوسط المتحرك هو أسلوب يمكن استخدامه لتسهيل بيانات السلاسل الزمنية لتقليل “التشويش” في البيانات وتحديد الأنماط والاتجاهات بسهولة أكبر.
الفكرة وراء المتوسط المتحرك هي أخذ متوسط عدد من الفترات السابقة للوصول إلى “المتوسط المتحرك” لفترة معينة.
يشرح هذا البرنامج التعليمي كيفية حساب المتوسطات المتحركة في بايثون.
مثال: المتوسطات المتحركة في بايثون
لنفترض أن لدينا الجدول التالي الذي يوضح إجمالي مبيعات شركة معينة خلال 10 فترات:
x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104]
الطريقة الأولى: استخدام الدالة cumsum().
إحدى الطرق لحساب المتوسط المتحرك هي استخدام الدالة cumsum():
import numpy as np #define moving average function def moving_avg(x, n): cumsum = np.cumsum(np.insert(x, 0, 0)) return (cumsum[n:] - cumsum[:-n]) / float(n) #calculate moving average using previous 3 time periods n = 3 moving_avg(x, n): array([47, 46.67, 56.33, 69.33, 86.67, 87.33, 89, 90])
وإليك كيفية تفسير النتيجة:
- المتوسط المتحرك للفترة الثالثة هو 47. ويتم حسابه على أنه متوسط الفترات الثلاث الأولى: (50+55+36)/3 = 47 .
- المتوسط المتحرك للفترة الرابعة هو 46.67. ويتم حساب ذلك على أنه متوسط الفترات الثلاث السابقة: (55+36+49)/3 = 46.67 .
وما إلى ذلك وهلم جرا.
الطريقة الثانية: استخدام الباندا.
هناك طريقة أخرى لحساب المتوسط المتحرك وهي كتابة دالة تعتمد على الباندا:
import pandas as pd #define array to use and number of previous periods to use in calculation x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104] n=3 #calculate moving average pd.Series(x).rolling(window=n).mean().iloc[n-1:].values array([47, 46.67, 56.33, 69.33, 86.67, 87.33, 89, 90])
تنتج هذه الطريقة نفس النتائج تمامًا مثل الطريقة السابقة، ولكنها تميل إلى العمل بشكل أسرع على المصفوفات الأكبر حجمًا.
لاحظ أنه يمكنك أيضًا تحديد أي عدد من الفترات السابقة لاستخدامها في حساب المتوسط المتحرك. على سبيل المثال، قد تفضل استخدام n=5:
#use 5 previous periods to calculate moving average n=5 #calculate moving average pd.Series(x).rolling(window=n).mean().iloc[n-1:].values array([54.8, 59.8, 69., 79., 85.2, 89.2])
كلما زاد عدد الفترات التي تستخدمها لحساب المتوسط المتحرك، كلما أصبح خط المتوسط المتحرك أكثر “سلاسة”.