إعادة أخذ العينات من السلاسل الزمنية / بيانات الطيف لتقليل الأبعاد [Python: SciPy]

2019 3 年 月 日 26

هذه طريقة عندما تريد تقليل السلاسل الزمنية / بيانات الطيف في DataFrame في Python.

باستخدام "pandas.DataFrame.resample" ، يجب عليك ضبط الوقت مثل D (يوميًا) و W (أسبوعيًا) مع الوسيطة.إذا كنت ترغب في تقليل بيانات السلاسل الزمنية أو بيانات الطيف التي لا تحتوي على عمود التاريخ والوقت ، فيمكنك استخدام الطريقة التالية.

ما هي السلاسل الزمنية / بيانات الطيف؟

يتم ملاحظة بيانات السلاسل الزمنية / الطيفية على فترات منتظمة على طول محور معين.تنطبق سلسلة البيانات.على سبيل المثال ، التغيرات في أسعار الأسهم وأطياف الامتصاص.

مثال على بيانات السلاسل الزمنية مثال على البيانات الطيفية
التحول في درجات الحرارة وظروف هطول الأمطار
تغييرات في ظروف حركة المرور
· المبيعات اليومية
التغيرات في أسعار الأسهم
التغيرات في أسعار البيتكوين
・ بيانات الصوت
- طيف الامتصاص المركب (الأشعة تحت الحمراء ، الأشعة فوق البنفسجية)
طيف من الأجرام السماوية

على الرغم من اختلاف كل تصنيف ، إلا أن البيانات لها الخصائص المتشابهة التالية.

  1. النقاط المجاورة لنقطة قياس تأخذ قيمًا متقاربة
  2. يتم تضمين الضوضاء على المدى الطويل (نطاق واسع)

参照: https://kotobank.jp/word/%E6%99%82%E7%B3%BB%E5%88%97%E3%83%87%E3%83%BC%E3%82%BF-1329677 https://datachemeng.com/preprocessspectratimeseriesdata/

إعادة أخذ عينات من السلاسل الزمنية / البيانات الطيفية

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

ما يجب استخدامه: SciPy (scipy.signal)

برمجيات مفتوحة المصدر للرياضيات والعلوم والهندسةالنظام البيئي للمستودعات (مجموعة متنوعة من مكتبات الحوسبة العلمية المتقدمة).

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

scipy.signal هي وحدة نمطية مرتبطة بمعالجة شكل الموجة في scipy.

  • scipy.signal.decimate

استيراد numpy كـ np من إشارة استيراد scipy # إنشاء بيانات الشكل الموجي الأساسية المكونة من 40 نقطة x = np.linspace (0 ، 10 ، 40 ، نقطة النهاية = خطأ) y = np.cos (-x ** 2/6) # الاختزال إلى 20 نقطة بناءً على البيانات x_down = np.linspace (0 ، 10 ، 20 ، نقطة النهاية = خطأ) y_down = signal.decimate (y ، 2) # Downsampling إلى 2/1 # رسم النتيجة على الرسم البياني٪ matplotlib plt.plot (x، y، '.-'، label = 'data') plt.plot (x_down، y_down، 'rs-'، label = down-sampled '، alpha = 0.5) plt.legend () plt.show () )
الاختزال باستخدام scipy.signal.decimate
الاختزال باستخدام scipy.signal.decimate

ينفذ scipy.signal.decimate معالجة مانعة للتشويش واختزال العينات (معالجة منع التشويش هي معالجة لإزالة التشوه عند أخذ العينات من البيانات المستمرة على فترات منتظمة).يتم إعادة تشكيلها في شكل مشابه لذلك مع تقليل نقاط البيانات كما هي.

انظر أيضا:https://docs.scipy.org/doc/scipy-1.2.1/reference/generated/scipy.signal.decimate.html

  • scipy.signal.resample

#Create 40 قاعدة بيانات الموجة x = np.linspace (0، 10، 40، endpoint = False) y = np.cos (-x ** 2/6) # 2.5 مرة بناءً على البيانات Upsampling إلى 100 نقطة x_up = np .linspace (0، 10، 100، endpoint = False) y_up = signal.resample (y، 100) # الاختزال إلى نصف 20 نقطة بناءً على البيانات x_down = np.linspace (0، 10، 20، endpoint = False) y_down = signal.resample (y، 20) #Plot النتيجة على الرسم البياني استيراد matplotlib.pyplot كـ plt٪ matplotlib inline plt.plot (x، y، '.-'، label = 'data') plt.plot (x_up، y_up ، 'go-'، label = 'up-sampled'، alpha = 0.3) plt.legend () plt.show () plt.plot (x، y، '.-'، label = 'data') plt.plot (x_down ، y_down ، 'rs-' ، التسمية = 'down-sampled' ، alpha = 0.5) plt.legend () plt.show ()
تتم معالجة بيانات الشكل الموجي بواسطة scipy.signal.resample
تتم معالجة بيانات الشكل الموجي بواسطة scipy.signal.resample

نظرًا لأن scipy.signal.resample يتم إعادة التشكيل باستخدام تحويل فورييه ، فإنه يعتمد على افتراض أن الإشارة دورية.إذا لم يتم استيفاء الدورية ، كما هو الحال في نهاية البيانات أعلاه ، ستنحرف القيمة بشكل كبير.

بالمناسبة ، يمكن أيضًا أن يكون scipy.signal.resample هو زيادة أخذ العينات.
الخط الأزرق هو نقطة البيانات الأصلية ، والأخضر هو الرسم بعد الاختزال ، والأحمر هو الرسم بعد الاختزال.

 

مسابقة تحليل الصوت kaggleيوجد أيضًا مثال على الاستخدام في ، لذلك سيكون مفيدًا.

انظر أيضا:https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.signal.resample.html

تنطبق على DataFrame

الصفوف لكل نقطة قياس والأعمدة لكل إطار بيانات عينة.

استيراد الباندا كـ pd # إنشاء البيانات المراد تخزينها في إطار البيانات y1 = np.cos (-x ** 2/6) * 1/2 y2 = np.cos (x) * 1/3 df1 = pd.DataFrame ( {{'y': y، 'y1': y1، 'y2': y2}) # الاختزال df1_down = signal.decimate (df1، 2، axis = 0) df1_down = pd.DataFrame (df1_down ، الأعمدة = ['y_down '،' y1_down '،' y2_down ']، index = np.linspace (0، 10، 20، endpoint = False)) # عرض البيانات المصغرة وطباعة الرسم (df1.head (10)) print (df1_down.head) ( 10)) df1.plot (النوع = "الخط" ، العلامة = ".") df1_down.plot (النوع = "الخط" ، العلامة = ".")
df1.head (10) df1_down.head (10)
 df1.head (10) df1_down.head (10)
نقاط البيانات قبل وبعد الاختزال
قبل الاختزال بعد الاختزال

حتى إذا قمت باختزال العينة من 40 نقطة الأصلية إلى 1 نقطة ، أي 2/20 ، يتم الحفاظ على شكل الموجة بدقة عالية ، ويبدو أن هناك القليل من فقدان المعلومات حتى لو تم استخدامها كميزة.

مثال لإطار البيانات مع صفوف لكل عينة وأعمدة لكل نقطة قياس
عندما يكون الصف عبارة عن كل عينة ويكون العمود هو كل نقطة قياس

إذا كان الصف أعلاه عبارة عن كل عينة وكان العمود عبارة عن إطار بيانات لكل نقطة قياس (ما يسمى بالبيانات المنظمة) ، فإن الوسيطةaxis=1إذا كان الأمر كذلك ، فلا بأس.