إحدى الطرق العديدة التي يضيف بها مهندسو البرمجيات قيمة إلى المؤسسة هي إجراء تحليل السلاسل الزمنية. تتيح لنا هذه التقنية القوية استخلاص رؤى قيمة من البيانات الزمنية وتتكون من التحليل والتنبؤات بناءً على الأنماط المستندة إلى الوقت.
في هذه التدوينة سوف نتعمق في عالم تحليل السلاسل الزمنية باستخدام لغة Python، والتي غالبًا ما تعتبر لغة البرمجة المفضلة لتحليل البيانات. توفر Python نظامًا بيئيًا غنيًا بالمكتبات والأدوات، مما يجعلها خيارًا مثاليًا للعمل مع بيانات السلاسل الزمنية.
مثال على تحليل السلاسل الزمنية مع بايثون
لقد برزت بايثون بسرعة كأداة مفضلة لتحليل البيانات بسبب بساطتها وتعدد استخداماتها ودعم المجتمع الواسع لها. بفضل تركيبها البديهي ونظام المكتبة الشامل، تتيح لك معالجة المشكلات المعقدة بكفاءة.
سواء كنت تقوم ببناء تطبيق أو تعمل مع عالم بيانات ذي خبرة، فإن Python توفر منصة قوية لاستكشاف البيانات المعتمدة على الوقت وتصورها ونمذجتها.
دعونا نرى كيف يمكن لبايثون تمكين عملك باستخدام بيانات السلاسل الزمنية. خذ بعين الاعتبار المثال التالي الذي يقوم بتحميل مجموعة بيانات سلاسل زمنية باستخدام الباندا ورسمها باستخدام Matplotlib:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# Generate random time-series data
np.random.seed(42)
dates = pd.date_range(start='2022-01-01', periods=100, freq='D')
values = np.random.randn(100).cumsum()
# Create a DataFrame from the generated data
data = pd.DataFrame({'date': dates, 'value': values})
# Set the 'date' column as the index
data.set_index('date', inplace=True)
# Plot the time-series data
plt.plot(data.index, data['value'])
plt.xlabel('Time')
plt.ylabel('Value')
plt.xticks(rotation = 45)
plt.title('Time Series Data')
plt.show()
في هذا المثال، يتم إنشاء مجموعة بيانات سلاسل زمنية عشوائية باستخدام منشئ الأرقام العشوائية في NumPy. تتكون مجموعة البيانات من 100 تاريخ، بدءًا من 1 يناير 2022، والقيم العشوائية المقابلة. يتم بعد ذلك تحويل البيانات إلى Pandas DataFrame، ويتم تعيين عمود “date” كفهرس. وأخيرًا، يتم رسم بيانات السلاسل الزمنية باستخدام Matplotlib، مع عرض تباين “value” بمرور الوقت.
لماذا نستخدم بايثون لتحليل بيانات السلاسل الزمنية؟
تقدم بايثون مجموعة من الفوائد فيما يتعلق بتحليل السلاسل الزمنية:
- لغة سهلة الاستخدام.
- متاحة على نطاق واسع في عالم مفتوح المصدر.
- لديها دعم مكتبة واسعة النطاق.
- يمكنها إعادة استخدام الكود الموجود.
دعونا نتع
دعونا نتعمق في هذه المزايا.
بايثون سهلة الاستخدام
تشتهر لغة بايثون ببساطتها وسهولة استخدامها. لديها بناء جملة بديهي يجعل من السهل تعلمها، حتى بالنسبة للمبتدئين. تعمل البنية النظيفة لكود Python على تعزيز ممارسات البرمجة الفعالة، مما يسمح لك بالتركيز على تحليل بيانات السلاسل الزمنية بدلاً من التعامل مع مفاهيم البرمجة المعقدة.
بايثون مفتوحة المصدر
إحدى المزايا الرائعة لـ Python هي أنها لغة مفتوحة المصدر. وهذا يعني أنه متاح للاستخدام مجانًا ويتم تحسينه ودعمه باستمرار من قبل مجتمع حيوي من المطورين. تتيح طبيعة Python مفتوحة المصدر لعلماء البيانات الوصول إلى ثروة من الموارد والأدوات والمكتبات لتحليل بيانات السلاسل الزمنية دون تكبد تكاليف إضافية.
تقدم بايثون دعمًا واسعًا للمكتبة
تقدم Python مجموعة واسعة من المكتبات والأدوات المتخصصة المصممة خصيصًا لتحليل السلاسل الزمنية. توفر هذه المكتبات، مثل Pandas و NumPy و statsmodels و Scikit-Learn، دوال و أدوات متنوعة مصممة خصيصًا لمواجهة التحديات الفريدة للعمل مع البيانات المعتمدة على الوقت. فهي تعمل على تبسيط العمليات المعقدة، مما يسمح لك بالتركيز على استخلاص رؤى ذات معنى بدلاً من إعادة اختراع العجلة.
تعمل لغة بايثون على تسهيل إعادة استخدام التعليمات البرمجية
بفضل طول عمرها واعتمادها على نطاق واسع، تتمتع لغة Python بقاعدة تعليمات برمجية واسعة يمكن لعلماء البيانات ومطوري التطبيقات الاستفادة منها لتلبية احتياجات تحليل السلاسل الزمنية الخاصة بهم.
تم بالفعل تنفيذ العديد من المهام الشائعة، مثل تحميل البيانات والتنظيف والتحويل والتصور، ومشاركتها بواسطة مجتمع Python. يتيح لك ذلك توفير الوقت والجهد من خلال الاعتماد على التعليمات البرمجية والحلول الموجودة، وتسريع عملية التحليل.
رسم البيانات باستخدام Pyplot
يعد رسم بيانات السلاسل الزمنية خطوة أساسية في تصور الأنماط و الاتجاهات. توفر Python مكتبة Matplotlib، والتي تتضمن وحدة Pyplot لإنشاء أنواع مختلفة من المخططات، بما في ذلك المخططات الخطية و الرسوم البيانية.
لتوضيح ذلك، دعونا ننشئ مجموعة بيانات عشوائية ونرسمها باستخدام Pyplot:
import numpy as np
import matplotlib.pyplot as plt
# Generate random time-series data
np.random.seed(0)
dates = pd.date_range(start='2023-01-01', periods=100)
values = np.random.randn(100).cumsum()
# Plot the time-series data
plt.plot(dates, values)
plt.xlabel('Date')
plt.ylabel('Value')
plt.xticks(rotation = 45)
plt.title('Time Series Data')
plt.show()
مهام تحليل السلاسل الزمنية في بايثون
يتضمن إجراء تحليل السلاسل الزمنية فحص البيانات التاريخية للكشف عن الأنماط والاتجاهات والرؤى القيمة الأخرى. إنها خطوة حاسمة في فهم سلوك البيانات المعتمدة على الوقت والتنبؤ بالمستقبل. يشمل تحليل السلاسل الزمنية العديد من التقنيات، مثل تحليل الاتجاه، والكشف الموسمي، والتنبؤ، والكشف عن الشذوذ.
تحديد اتجاهات البيانات وأنماطها في بايثون
في بايثون، هناك تقنيات مختلفة متاحة لتحليل البيانات للاتجاهات والأنماط. تمكن هذه التقنيات علماء البيانات والمطورين من الحصول على رؤى قيمة حول الخصائص الأساسية لمجموعات البيانات الخاصة بهم. يعد فهم اتجاهات البيانات وأنماطها أمرًا بالغ الأهمية لاتخاذ قرارات وتنبؤات مستنيرة بناءً على المعلومات المتاحة.
الثبات
تشير الثباتية إلى مفهوم أساسي في تحليل السلاسل الزمنية حيث تظل الخصائص الإحصائية لمجموعة البيانات، مثل المتوسط والتباين، ثابتة مع مرور الوقت. في سياق لغة بايثون، يتضمن اختبار الثبات أساليب مثل اختبار ديكي فولر المعزز (ADF)، واختبار كوياتكوفسكي-فيليبس-شميت-شين (KPSS)، والفحص البصري لمخططات السلاسل الزمنية. فيما يلي مثال لكيفية اختبار الثبات في Python باستخدام اختبار ADF:
from statsmodels.tsa.stattools import adfuller
# Assuming 'data' is the time series data
result = adfuller(data)
print('ADF Statistic:', result[0])
print('p-value:', result[1])
الموسمية
تتعلق الموسمية بالأنماط المتكررة أو التقلبات في سلسلة زمنية تحدث على فترات منتظمة. ويقدم اختلافات يمكن التنبؤ بها في البيانات خلال فترات محددة. يعد التمييز بين الموسمية والثبات أمرًا ضروريًا، حيث أنهما يمثلان جوانب مختلفة من سلوك السلاسل الزمنية.
يمكن إجراء اختبار الموسمية في لغة بايثون من خلال تقنيات مثل تحليل التحلل ومخططات دالة الارتباط الذاتي (ACF). يتضمن أحد أمثلة اختبار الموسمية تحليل السلاسل الزمنية وتحليل المكون الموسمي بصريًا.
الارتباط الذاتي والارتباط الذاتي الجزئي
يقيس الارتباط التلقائي العلاقة بين القيمة الحالية للمتغير وقيمه السابقة في فترات زمنية مختلفة. من ناحية أخرى، يحدد الارتباط الذاتي الجزئي العلاقة المباشرة بين القيمة الحالية للمتغير وقيمه السابقة، باستثناء تأثير المتغيرات المتوسطة المتأخرة.
في بايثون، غالبًا ما يتضمن اختبار الارتباط التلقائي والارتباط الذاتي الجزئي رسم دالة الارتباط التلقائي (ACF) و دالة الارتباط الذاتي الجزئي (PACF) ومراقبة الأنماط. فيما يلي مثال لكيفية تصور الارتباط التلقائي والارتباط التلقائي الجزئي في بايثون:
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# Assuming 'data' is the time series data
plot_acf(data)
plot_pacf(data)
plt.show()
التنبؤ بالقيم المستقبلية بناء على البيانات التاريخية
تقدم بايثون مجموعة متنوعة من المكتبات والتقنيات للتنبؤ بالسلاسل الزمنية، وإحدى الطرق الشائعة هي نموذج المتوسط المتحرك المتكامل (ARIMA). ARIMA هو أسلوب قوي ومستخدم على نطاق واسع يجمع بين المكونات الثلاثة التالية لالتقاط الأنماط والاتجاهات في بيانات السلاسل الزمنية:
- الانحدار الذاتي (AR)
- التمايز (I)
- المتوسط المتحرك (MA)
يمكنك استخدام statsmodels.tsa.arima.model
لتطبيق نموذج ARIMA في فئة Python.ARIMA
. تسمح لك هذه الفئة بتحديد ترتيب مكونات AR وI وMA وتناسب النموذج مع بياناتك التاريخية. بمجرد تركيب النموذج، يمكنك استخدامه للتنبؤ بالقيم المستقبلية عن طريق استدعاء التابع predict
وتحديد تاريخي البدء والانتهاء لفترة التنبؤ.
أنواع نماذج التنبؤ
في تحليل السلاسل الزمنية، تتوفر نماذج تنبؤية مختلفة للتنبؤ بالقيم المستقبلية بناءً على البيانات التاريخية. ولكل نموذج نقاط قوته وقيوده ومدى ملاءمته لأنواع مختلفة من بيانات السلاسل الزمنية. دعنا نستكشف بعض الأنواع الشائعة من نماذج التنبؤ:
المتوسط المتحرك (MA)
يقوم نموذج المتوسط المتحرك بحساب متوسط الملاحظات السابقة للتنبؤ بالقيم المستقبلية. فهو يساعد على القضاء على التقلبات قصيرة المدى وتحديد الاتجاهات الأساسية في البيانات.
يمكن تنفيذ نموذج المتوسط المتحرك باستخدام دالة rolling
في الباندا، والتي تحسب المتوسط خلال نافذة محددة من الملاحظات السابقة. إليك مثال مبسط:
import pandas as pd
# Assuming 'data' is the time series data
window_size = 3moving_avg = data.rolling(window=window_size).mean()
الانحدار الذاتي (AR)
يستخدم نموذج الانحدار الذاتي الملاحظات السابقة ومعادلة الانحدار الخطي للتنبؤ بالقيم المستقبلية. ويفترض أن القيم المستقبلية تعتمد على القيم السابقة بفارق زمني.
يمكن تنفيذ نموذج الانحدار الذاتي باستخدام فئة AR
من مكتبة statsmodels، والتي تمكن من ملاءمة نموذج الانحدار الذاتي لبيانات السلاسل الزمنية.
from statsmodels.tsa.ar_model import AR
# Assuming 'data' is the time series data
model = AR(data)
ar_model = model.fit()
predictions = ar_model.predict(start=len(data), end=len(data)+n) # Replace n with the number of future values to predict
المتوسط المتحرك ذاتي الانحدار (ARMA)
يجمع نموذج ARMA بين نماذج الانحدار الذاتي والمتوسط المتحرك، مع الأخذ في الاعتبار كلاً من الملاحظات السابقة ومتوسط الأخطاء السابقة لإجراء التنبؤات.
يمكن تنفيذ نموذج المتوسط المتحرك ذاتي الانحدار باستخدام فئة ARMA
من مكتبة statsmodels، والتي تسمح بتركيب نموذج ARMA على بيانات السلاسل الزمنية:
from statsmodels.tsa.arima.model import ARIMA
# Assuming 'data' is the time series data
model = ARIMA(data, order=(p, d, q)) # Replace p, d, and q with appropriate values
arma_model = model.fit()
predictions = arma_model.predict(start=len(data), end=len(data)+n, typ='levels') # Replace n with the number of future values to predict
المتوسط المتحرك المتكامل ذاتي الانحدار (ARIMA)
يعمل نموذج ARIMA على توسيع نموذج ARMA من خلال دمج الفروق لجعل السلاسل الزمنية ثابتة. وهي مناسبة للبيانات غير الثابتة ذات الاتجاهات والموسمية.
يمكن أيضًا تنفيذ نموذج المتوسط المتحرك المتكامل ذاتي الانحدار باستخدام فئة ARIMA من مكتبة statsmodels:
from statsmodels.tsa.arima.model import ARIMA
# Assuming 'data' is the time series data
model = ARIMA(data, order=(p, d, q)) # Replace p, d, and q with appropriate values
arima_model = model.fit()
predictions = arima_model.predict(start=len(data), end=len(data)+n, typ='levels') # Replace n with the number of future values to predict
تجانس الأسي
تطبق نماذج التجانس الأسي أوزانًا على الملاحظات السابقة، مما يعطي أهمية أكبر للقيم الحديثة. تستوعب الأشكال المختلفة للتجانس الأسي، مثل التجانس الأسي البسيط (SES)، والتجانس الأسي الخطي لهولت، والتجانس الأسي لهولت-وينترز، أنماطًا مختلفة في البيانات. ويمكن تنفيذ نماذج التجانس الأسي باستخدام فئات SimpleExpSmoothing
، و AsponentialSmoothing
، و Holt
من مكتبة statsmodels. فيما يلي مثال على التجانس الأسي البسيط (SES):
from statsmodels.tsa.holtwinters import SimpleExpSmoothing
# Assuming 'data' is the time series data
model = SimpleExpSmoothing(data)
ses_model = model.fit()
predictions = ses_model.forecast(steps=n) # Replace n with the number of future values to forecast
استخراج الميزات المفيدة لخوارزميات التعلم الآلي/التعلم العميق
يعد استخراج ميزات ذات معنى من بيانات السلاسل الزمنية أمرًا بالغ الأهمية أيضًا لتدريب التعلم الآلي أو نماذج التعلم العميق. تعمل هذه الميزات كمدخلات للنماذج وتساعد في التقاط الأنماط والخصائص ذات الصلة في البيانات. توفر بايثون تقنيات ومكتبات متنوعة لاستخراج ميزات مفيدة لتحليل السلاسل الزمنية.
أحد الأساليب الشائعة هو تطبيق تقنيات هندسة الميزات لتحويل بيانات السلاسل الزمنية الأولية إلى ميزات إعلامية. دعونا نفكر في مثال لتدريب نموذج التعلم الآلي لاكتشاف المخاطر المحتملة للإصابة بنوبة قلبية بناءً على بيانات معدل ضربات القلب. يمكن أن تساعدنا تقنيات تحليل السلاسل الزمنية في استخلاص رؤى ذات معنى من بيانات معدل ضربات القلب التي يمكن استخدامها كمدخلات للنموذج.
على سبيل المثال، يمكننا حساب المقاييس الإحصائية مثل المتوسط والانحراف المعياري لمعدل ضربات القلب. توفر هذه التدابير معلومات حول الاتجاه المركزي وتقلب بيانات معدل ضربات القلب، على التوالي.
بالإضافة إلى ذلك، يمكننا حساب ميزات أخرى مثل الارتباط التلقائي، الذي يقيس الارتباط بين قيم معدل ضربات القلب في فترات زمنية مختلفة. ومن خلال إدخال هذه الميزات في نموذج التعلم الآلي، يمكننا إجراء تنبؤات دقيقة حول مستوى خطر الإصابة بالنوبات القلبية المحتملة.
تنظيف البيانات
يلعب تنظيف البيانات دورًا حاسمًا في تحليل السلاسل الزمنية لأنه يضمن دقة وموثوقية البيانات المستخدمة لمزيد من التحليل والنمذجة. في Python، يمكنك الاستفادة من التقنيات والمكتبات المختلفة لتنظيف بيانات السلاسل الزمنية ومعالجة المشكلات الشائعة، مثل القيم المفقودة أو القيم المتطرفة أو التناقضات.
يتضمن تنظيف البيانات في تحليل السلاسل الزمنية عادةً الخطوات التالية:
- معالجة القيم المفقودة: يمكن أن تحدث القيم المفقودة في بيانات السلاسل الزمنية لأسباب مختلفة، مثل فشل المستشعر، أو مشكلات نقل البيانات، أو الأخطاء البشرية. توفر Python مكتبات مثل Pandas التي تقدم طرقًا للتعامل مع القيم المفقودة، مثل الاستيفاء أو التعبئة الأمامية أو التعبئة الخلفية أو إسقاط الصفوف ذات القيم المفقودة.
- الكشف عن القيم المتطرفة وعلاجها: القيم المتطرفة هي القيم المتطرفة التي تنحرف بشكل كبير عن الأنماط العادية في السلسلة الزمنية. يعد تحديد القيم المتطرفة والتعامل معها أمرًا مهمًا لتجنب التشوهات في التحليل. توفر مكتبات بايثون مثل pandas أو NumPy أو scikit-learn تقنيات لاكتشاف القيم المتطرفة والتعامل معها، مثل الأساليب الإحصائية أو الأساليب القائمة على تعلم الآلة.
- التعامل مع البيانات غير المتسقة أو غير الصحيحة: قد تحتوي بيانات السلاسل الزمنية في بعض الأحيان على قيم غير متسقة أو غير صحيحة، مثل الوحدات غير المتسقة، أو أنواع البيانات غير الصالحة، أو أخطاء إدخال البيانات. توفر Python دوال لتنظيف وتصحيح حالات عدم اتساق البيانات، بما في ذلك تحويل نوع البيانات أو تسوية البيانات أو تطبيق قواعد العمل لتحديد البيانات الخاطئة وتصحيحها.
تحديات العمل مع بيانات السلاسل الزمنية في بايثون
إن العمل مع بيانات السلاسل الزمنية في بايثون يمكن أن يشكل بعض التحديات، خاصة عند التعامل مع مجموعات البيانات الكبيرة. في هذا القسم، سوف نستكشف تحديين شائعين في العمل مع السلاسل الزمنية ونناقش استراتيجيات التغلب عليهما.
تحميل البيانات بسرعة وكفاءة
يعد تحميل مجموعات بيانات السلاسل الزمنية الكبيرة بكفاءة أمرًا ضروريًا لتحليل البيانات بشكل سلس. توفر Python العديد من المكتبات مثل Pandas وNumPy التي توفر هياكل بيانات وأدوات فعالة للتعامل مع بيانات السلاسل الزمنية.
لتحميل البيانات بسرعة، فكر في استخدام دالة read_csv
الخاصة بـ Pandas مع المعلمات المحسنة. على سبيل المثال، يمكن أن يؤدي تحديد أنواع البيانات المناسبة لكل عمود إلى تسريع عملية التحميل بشكل ملحوظ. بالإضافة إلى ذلك، يمكن أن يؤدي استخدام تقنيات الضغط مثل ملفات gzip أو parquet إلى تقليل حجم الملف وتحسين أداء التحميل.
هناك طريقة أخرى لتحسين سرعة تحميل البيانات وهي الاستفادة من المعالجة المتوازية. ويمكن تحقيق ذلك من خلال استخدام تقنيات المعالجة المتعددة، حيث يتم تقسيم تحليل البيانات عبر أجهزة متعددة، ويتم دمج النتائج في الخطوة النهائية. توفر المكتبات مثل Dask و Apache Spark إمكانات حوسبة موزعة، مما يسمح لك بتوزيع الحمل عبر أجهزة متعددة، وبالتالي تسريع عملية تحميل البيانات وتحليلها.
التعامل مع مجموعات البيانات الكبيرة
عند التعامل مع غيغابايت (أو تيرابايت) من بيانات السلاسل الزمنية، قد يصبح تحليلها ومعالجتها كلها أمرًا صعبًا. في مثل هذه الحالات، من الضروري أن يكون لديك استراتيجية للتعامل مع مجموعات البيانات الكبيرة بكفاءة.
يمكنك استخدام تقنيات المعالجة المتعددة، كما ذكرنا سابقًا. ومن خلال تقسيم التحليل عبر أجهزة متعددة ودمج النتائج بعد ذلك، يمكنك توزيع عبء العمل ومعالجة مجموعات البيانات الكبيرة بشكل أسرع.
هناك خيار آخر يتمثل في الاستفادة من أطر الحوسبة الموزعة مثل Apache Spark. يتيح لك Spark نشر معالجة البيانات عبر مجموعة من الأجهزة، مما يتيح المعالجة الفعالة لمجموعات بيانات السلاسل الزمنية واسعة النطاق. إن إمكانات المعالجة المتوازية في Spark و دوال معالجة البيانات المضمنة تجعلها أداة قوية لإدارة وتحليل بيانات السلاسل الزمنية الكبيرة.
العمل مع السلاسل الزمنية في بايثون
يتضمن العمل مع بيانات السلاسل الزمنية في بايثون عدة خطوات أساسية، بدءًا من اختيار مكتبة السلاسل الزمنية المناسبة ووصولاً إلى تحميل البيانات وتحليلها. دعنا نستكشف الجوانب الأساسية للعمل مع السلاسل الزمنية في بايثون، مثل اختيار مكتبة السلاسل الزمنية، واستخدام مكتبة الباندا الأساسية لتحميل البيانات وتحليلها وتصورها، والبحث في بعض المكتبات الأكثر تخصصًا لمهام السلاسل الزمنية المتقدمة.
اختيار مكتبة السلاسل الزمنية
توفر بايثون مكتبات متنوعة مصممة لتحليل السلاسل الزمنية. المكتبة الأساسية لتحليل السلاسل الزمنية في بايثون هي Pandas. حيث توفر هياكل و دوال بيانات فعالة للتعامل مع السلاسل الزمنية بفعالية. و تسمح لك بتحميل البيانات من مصادر متنوعة، مثل ملفات CSV وقواعد البيانات مثل Timescale.
باستخدام Pandas، يمكنك إجراء التحليل الأساسي وتصور بيانات السلاسل الزمنية. هيكل البيانات المركزي في Pandas هو DataFrame، الذي يعمل بمثابة الوحدة الأساسية لتمثيل بيانات السلاسل الزمنية.
باستخدام Pandas، يمكنك تحميل بيانات السلاسل الزمنية من مصادر مختلفة بسهولة. تمكّنك دوال مثل read_csv()
و read_sql()
من تحميل البيانات إلى DataFrame لمزيد من التحليل. تتيح لك هذه المرونة العمل مع البيانات من تنسيقات ومنصات مختلفة.
يوفر Pandas مجموعة غنية من الوظائف لتحليل وتصور بيانات السلاسل الزمنية. يمكنك إجراء عمليات متنوعة، بما في ذلك تجميع البيانات وتصفيتها وحساب الإحصائيات الموجزة. بالإضافة إلى ذلك، تتكامل الباندا بشكل جيد مع مكتبات التصور مثل Matplotlib و Seaborn، مما يسمح لك بإنشاء مخططات ومخططات ثاقبة لاستكشاف الأنماط والاتجاهات في البيانات.
فيما يلي مثال يوضح خطوات التحميل والعمل مع بيانات السلاسل الزمنية باستخدام Pandas في بايثون:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Step 1: Load time-series Data
dates = pd.date_range(start='2023-01-01', periods=100)
values = np.sin(np.linspace(0, 2*np.pi, 100))
data = pd.DataFrame({'Date': dates, 'Value': values})
# Step 2: Perform Data Analysis
# Calculate summary statistics
summary_stats = data.describe()
# Filter data based on specific conditions
filtered_data = data[data['Value'] > 0]
# Resample data to a different frequency
resampled_data = data.resample('1W', on='Date').sum()
# Step 3: Visualize time-series Data
plt.plot(data['Date'], data['Value'])
plt.xlabel('Date')
plt.ylabel('Value')
plt.xticks(rotation = 45)
plt.title('Time Series Data')
plt.show()
ينشئ هذا الكود مجموعة بيانات سلاسل زمنية تحتوي على تواريخ وقيم موجة جيبية. يقوم بمهام تحليل البيانات مثل حساب الإحصائيات الموجزة، وتصفية البيانات بناءً على الظروف، وإعادة أخذ عينات من البيانات إلى تردد مختلف. وأخيرًا، يقوم بتصور بيانات السلاسل الزمنية عن طريق رسم القيم مقابل التواريخ.
للتعمق أكثر في pandas و دوالها ، يمكنك الرجوع إلى وثائق pandas الرسمية.
بالإضافة إلى pandas، هناك مكتبات متخصصة يمكنها تعزيز قدراتك على تحليل السلاسل الزمنية:
- sktime: مكتبة تقوم بتدريب نماذج السلاسل الزمنية المتعددة وتتصل بالمكتبات ذات الصلة، مما يتيح النمذجة المتقدمة وتحليل بيانات السلاسل الزمنية.
- pdmarima: مكتبة تستخدم لحساب نماذج ARIMA (المتوسط المتحرك المتكامل التلقائي)، وهي تقنية شائعة للتنبؤ بالسلاسل الزمنية وتحليلها.
- tsfresh: مكتبة مصممة خصيصًا لاستخراج الميزات من بيانات السلاسل الزمنية. حث توفر نطاقًا واسعًا من الخوارزميات والتقنيات لاستخراج ميزات مفيدة يمكن استخدامها في التعلم الآلي والنمذجة التنبؤية.
ومن خلال الاستفادة من هذه المكتبات، يمكنك العمل بكفاءة مع بيانات السلاسل الزمنية وإجراء تحليل متقدم واستخراج رؤى قيمة.
الحصول على بيانات السلاسل الزمنية وتخزينها
قبل الغوص في تحليل السلاسل الزمنية، من الضروري تحديد المصادر التي ستجمع منها بياناتك. خذ بعين الاعتبار العوامل التالية:
- حدد الغرض من تحليلك وحدد متطلبات البيانات المحددة.
- استكشف مصادر البيانات المتاحة مثل المستودعات العامة أو قواعد البيانات أو واجهات برمجة التطبيقات أو البيانات المجمعة من تطبيقاتك الخاصة.
- ضمان سلامة البيانات ودقتها عن طريق اختيار مصادر موثوقة وذات سمعة طيبة.
- ضع في اعتبارك معدل تكرار تحديث بياناتك للتأكد من بقائها محدثة.
هناك العديد من الاحتمالات للحصول على بيانات السلاسل الزمنية وتخزينها، اعتمادًا على متطلباتك المحددة. فيما يلي بعض الأساليب الشائعة:
تحميل مجموعات البيانات الموجودة: إذا كانت لديك بيانات سلاسل زمنية مخزنة بتنسيق CSV أو تنسيقات ملفات أخرى، فيمكنك استخدام مكتبات مثل pandas أو Timescale لتحميل البيانات ومعالجتها. توفر هذه المكتبات دوال مرنة لقراءة البيانات من الملفات وإجراء عمليات مختلفة عليها.
فيما يلي مثال لكيفية تحميل بيانات السلاسل الزمنية من ملف CSV باستخدام pandas:
import pandas as pd
# Load data from a CSV file
data = pd.read_csv('path/to/your/file.csv')
في المثال أعلاه، تحتاج إلى توفير المسار لملف CSV كوسيطة للدالة read_csv()
. سيقوم Pandas تلقائيًا بتحليل الملف وإنشاء DataFrame يحتوي على بيانات السلاسل الزمنية.
الحصول على البيانات من واجهات برمجة التطبيقات العامة أو الخاصة: توفر العديد من المؤسسات واجهات برمجة التطبيقات التي تسمح بالوصول إلى بيانات السلاسل الزمنية الخاصة بها. على سبيل المثال، توفر واجهات برمجة التطبيقات لبيانات الطقس معلومات تاريخية وفي الوقت الفعلي عن الطقس. يمكنك استخدام مكتبات مثل requests
أو حزم Python المتخصصة للتفاعل مع واجهات برمجة التطبيقات هذه واسترداد بيانات السلاسل الزمنية المطلوبة.
الكتابة ديناميكيًا من تطبيقاتك الخاصة: إذا كان لديك تطبيقاتك الخاصة التي تولد بيانات سلاسل زمنية، فيمكنك كتابة تعليمات برمجية لالتقاطها وتخزينها ديناميكيًا. على سبيل المثال، يمكنك تتبع نشاط تسجيل دخول المستخدم أو نشاط شراء المستخدم على موقع ويب وتخزينه في قاعدة بيانات أو ملف.
تحميل وتحليل بيانات السلاسل الزمنية في بايثون
لتحميل وتحليل بيانات السلاسل الزمنية في بايثون، يمكنك استخدام مكتبات وتنسيقات متنوعة بناءً على متطلباتك المحددة. أحد الخيارات الشائعة هو استخدام Pandas، وهي مكتبة قوية لمعالجة البيانات و توفر طريقة ملائمة لتحميل بيانات السلاسل الزمنية وتحويلها وتحليلها.
لقد قمت بالفعل بإنشاء جدول الطقس في قاعدة البيانات الخاصة بي بعمودين: التاريخ ودرجة الحرارة، كما هو موضح أدناه:
يمكنك اتباع الخطوات التالية لتحميل البيانات من Timescale إلى الباندا وإجراء استخراج ميزات السلاسل الزمنية باستخدام tsfresh
.
- قم بتثبيت المكتبات المطلوبة، مثل psycopg2، pandas، tsfresh.
- قم باستيراد الوحدات الضرورية كما هو موضح أدناه:
import psycopg2
from psycopg2 import sql
import pandas as pd
from tsfresh import extract_features
- أنشئ اتصالاً بمثيل الجدول الزمني الخاص بك:
con = psycopg2.connect(
host='your_host',
port='your_port',
database='your_database',
user='your_username',
password='your_password'
)
قم بإنشاء كائن مؤشر مرتبط باتصالك القائم بـ Timescale. يسمح لك بالتفاعل مع قاعدة البيانات وتنفيذ استعلامات SQL.
cursor = con.cursor()
قم بإنشاء كائن استعلام SQL باستخدام فئة sql.SQL
من الوحدة النمطية psycopg2. يتيح لك ذلك إنشاء استعلامات SQL بأمان باستخدام العناصر النائبة لقيم المعلمات.
LIMIT = 10;
query = sql.SQL(f"SELECT * FROM Weather LIMIT {LIMIT}")
cursor.execute(query)
استعلام SELECT * FROM
هو استعلام SQL بسيط يقوم باسترداد كافة الصفوف والأعمدة من جدول “الطقس”. ومع ذلك، بدلاً من جلب كافة السجلات من الجدول، فإنه يحدد مجموعة النتائج بحد أقصى 10 سجلات باستخدام عبارة LIMIT
.
بعد إنشاء كائن الاستعلام، يقوم السطر cursor.execute(query)
بتنفيذ استعلام SQL باستخدام مؤشر الكائن الذي قمت بإنشائه مسبقًا. يرسل الاستعلام إلى قاعدة بيانات Timescale للتنفيذ.
جلب كافة الصفوف المتوفرة من تنفيذ الاستعلام.
# Fetch the results
results = cursor.fetchall()
يمكنك التكرار على كل صف في قائمة النتائج وطباعة الصف.
# Do something with the results
for row in results:
print(row)
استخراج البيانات من قائمة results
التي تحتوي على صفوف تم جلبها من قاعدة البيانات، وتخزينها في قوائم و dates
و values
منفصلة.
dates = []
values = []
for date, value in results:
dates.append(date)
values.append(value)
تتكرر حلقة for فوق كل صف في قائمة results
، حيث يتم تمثيل كل صف كمجموعة تحتوي على عنصرين: date
و value
. باستخدام صيغة date, value in results
، يمكنك مباشرة فك المجموعة إلى متغيرين منفصلين: date
و value
.
داخل الحلقة، يتم إلحاق متغيرات date
و value
بتواريخ وقيم القوائم المعنية باستخدام التابع append()
. يتيح لك ذلك تخزين القيم بشكل منفصل لمزيد من المعالجة أو التحليل.
قم بإنشاء Pandas DataFrame من البيانات المستخرجة وقم بإجراء استخراج الميزات باستخدام دالة extract_features
من مكتبة tsfresh
.
# Create a pandas DataFrame from the extracted data
data_df = pd.DataFrame({'date': dates, 'temperature': values})
data_df['id'] = ""
# Perform feature extraction
extracted_features = extract_features(data_df, column_id='id', column_sort='date')
قم بالتكرار على أعمدة Extract_features
و طباعة المعلومات حول كل عمود والبيانات المقابلة له. على سبيل المثال، يمكنك فحص أسماء وبيانات أي من الأعمدة الخمسة.
columns = extracted_features.columns
for column in columns[5:10]:
print(f"Column: {column}")
print(f"Data: {extracted_features[column][0]}")
print()
يوضح هذا المثال كيفية تحميل بيانات السلاسل الزمنية إلى الباندا واستخراج الميزات باستخدام مكتبة tsfresh. يوفر الجدول الزمني تخزينًا واسترجاعًا فعالاً لبيانات السلاسل الزمنية، وهو مُحسّن للاستعلامات المستندة إلى الوقت. ويقدم مزايا مثل:
- الجداول التشعبية: يقدم الجدول الزمني مفهوم الجداول التشعبية، وهي جداول مقسمة تقوم تلقائيًا بتقسيم البيانات إلى أجزاء أصغر بناءً على فترات زمنية. يسمح هذا التقسيم بالتوازي والتنفيذ الأمثل للاستعلام. في المثال أعلاه، من المحتمل أن يكون جدول “الطقس” عبارة عن جدول مفرط التشعب، مما يتيح تحميل واسترجاع بيانات السلاسل الزمنية بشكل أسرع.
- دوال السلاسل الزمنية: يوفر الجدول الزمني مجموعة غنية من دوال السلاسل الزمنية وملحقاتها للتحليلات المتقدمة على البيانات المستندة إلى الوقت. في الكود أعلاه، تعمل دالة
extract_features
من مكتبةtsfresh
على الاستفادة من إمكانيات Timescale لإجراء استخراج الميزات على بيانات السلاسل الزمنية. - قابلية التوسع: تم تصميم الجدول الزمني للتوسع بسهولة مع نمو بيانات السلاسل الزمنية. يمكنه التعامل مع كميات هائلة من البيانات مع الحفاظ على الأداء العالي. تضمن قابلية التوسع هذه أن يظل تحليل السلاسل الزمنية فعالاً على الرغم من زيادة حجم البيانات.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.