נתרגל זיהוי מגמות, החלקת נתונים (Smoothing), והסרת מגמה (Detrending) באמצעות נתונים אמיתיים.
בעבודה זו נשתמש במאגר נתונים קלאסי ופתוח הנקרא AirPassengers.
המאגר מכיל את מספר הנוסעים החודשי (באלפים) בטיסות מסחריות בינלאומיות בין השנים 1949 ל-1960. קל מאוד לזהות בו גם כיוון כללי של מגמה (Trend) וגם תבנית שחוזרת על עצמה המייצגת עונתיות (Seasonality).
🔗 קישור ישיר לקובץ:
https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv
כך נטען את הנתונים ב-Python:
import pandas as pd
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv"
df = pd.read_csv(url, index_col='Month', parse_dates=True)
print(df.head())
pandas כדי לקרוא את קובץ ה-CSV מהקישור שסופק למעלה.matplotlib. הוסיפו כותרת לגרף ושמות לצירים (תאריך מול מספר נוסעים).index_col='Month' ו- parse_dates=True בתוך הפונקציה pd.read_csv(). זה יהפוך את ציר ה-X בגרף שלכם לתאריכים אמיתיים במקום למספרים סתמיים!
import pandas as pd
import matplotlib.pyplot as plt
# 1. טעינת הנתונים
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv"
df = pd.read_csv(url, index_col='Month', parse_dates=True)
# 2. הצגת שורות ראשונות
print(df.head())
# 3. ציור הגרף
plt.figure(figsize=(10, 5))
plt.plot(df.index, df['Passengers'], color='blue')
plt.title('Monthly Airline Passengers (1949-1960)')
plt.xlabel('Date')
plt.ylabel('Number of Passengers')
plt.grid(True)
plt.show()
MA_3.MA_12..rolling(window=X).mean() על העמודה הרלוונטית.
df['MA_3'] = df['Passengers'].rolling(window=3).mean()
# חישוב ממוצעים נעים
df['MA_3'] = df['Passengers'].rolling(window=3).mean()
df['MA_12'] = df['Passengers'].rolling(window=12).mean()
# ציור הגרפים ביחד
plt.figure(figsize=(10, 5))
plt.plot(df.index, df['Passengers'], label='Original', alpha=0.4, color='gray')
plt.plot(df.index, df['MA_3'], label='Moving Average (3)', color='orange')
plt.plot(df.index, df['MA_12'], label='Moving Average (12)', color='red', linewidth=2)
plt.title('Smoothing with Moving Average')
plt.legend()
plt.grid(True)
plt.show()
df['Passengers'].diff().pd.plotting.lag_plot(df['Passengers'], lag=1).from statsmodels.graphics.tsaplots import plot_acf.from statsmodels.graphics.tsaplots import plot_acf
import pandas.plotting as pd_plotting
# חישוב הפרשים מסדר ראשון (Detrending)
df['Diff'] = df['Passengers'].diff()
# 1. ציור סדרת ההפרשים
plt.figure(figsize=(10, 5))
plt.plot(df.index, df['Diff'], color='green')
plt.title('Differenced Series (Detrended)')
plt.axhline(0, color='red', linestyle='--') # קו האפס
plt.grid(True)
plt.show()
# 2. Lag Plot
plt.figure(figsize=(5, 5))
pd_plotting.lag_plot(df['Passengers'], lag=1)
plt.title('Lag Plot (Lag = 1)')
plt.show()
# 3. תרשים ACF (אופציונלי)
plt.figure(figsize=(10, 4))
plot_acf(df['Passengers'].dropna(), lags=30, ax=plt.gca())
plt.title('Autocorrelation (ACF)')
plt.show()
יש להגיש קובץ אחד (מומלץ Jupyter Notebook או קובץ Python + מסמך Word המאגד את התשובות והגרפים):
בהצלחה רבה!
התאמה לחומר השיעור: עבודה זו מכסה את עקרונות הבסיס בניתוח סדרות עיתיות כפי שנלמדו בהרצאה: טעינת נתונים, זיהוי חזותי של מגמה ועונתיות, יישום החלקה (Smoothing) באמצעות ממוצע נע לסינון רעשים, והבנת הרעיון של הסרת מגמה (Detrending) באמצעות חישוב הפרשים מסדר ראשון (Differencing). כמו כן, ישנה היכרות ראשונית עם תלות בזמן (Lag Plot ואוטוקורלציה).
מיומנויות נבדקות: התמצאות בסיסית בספריית Pandas (ניהול אינדקס תאריכים, סדרות עיתיות), הפקת תרשימים וגרפים באמצעות Matplotlib, ויכולת גזירת מסקנות אנליטיות ראשוניות מתוך הצגה חזותית.
רמת קושי: קלה עד בינונית (מותאמת למתחילים). המטלות מלוות בהנחיות מפורטות, רמזים, וקטעי קוד עזר, ונועדו להקנות לסטודנטים ביטחון ראשוני בגישה מעשית לניתוח נתוני זמן אמיתיים בסביבת Python.