समय श्रृंखला / वर्णक्रमीय डेटा के पुन: नमूने द्वारा आयाम में कमी [पायथन: SciPy]

2019 3 年 月 日 26

यह एक तरीका है जब आप पायथन में डेटाफ्रेम में समय श्रृंखला/स्पेक्ट्रम डेटा को पतला करना चाहते हैं।

"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

scipy आयात संकेत से np के रूप में numpy आयात करें # 40 तरंग डेटा बेस बनाएं x = np.linspace(0, 10, 40, endpoint=False) y = np.cos(-x**2/6) # डेटा को 20 बिंदुओं तक डाउनसैंपल करें x_down = np.linspace(0, 10, 20, endpoint=False) y_down = Signal.decimate(y, 2) # 2 के कारक द्वारा डाउनसैंपल # ग्राफ़% matplotlib इनलाइन plt.plot (x, y, 'पर प्लॉट परिणाम .-', लेबल = 'डेटा') plt.plot (x_down, y_down, 'rs-', लेबल = 'डाउन-सैंपल', अल्फा = 1) 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

# बेस 40 पॉइंट वेवफॉर्म डेटा बनाएं x = np.linspace(0, 10, 40, endpoint=False) y = np.cos(-x**2/6) # डेटा के आधार पर, 2.5 अपसैंपलिंग से 100 पॉइंट तक गुणा करें x_up = np.linspace(0, 10, 100, endpoint=False) y_up = signal.resample(y, 100) # डेटा के आधे हिस्से में डाउनसैंपलिंग x_down = np.linspace( 20, 0, 10, endpoint=False) y_down = Signal.resample(y, 20) # परिणाम को ग्राफ़ आयात matplotlib.pyplot पर plt %matplotlib इनलाइन plt.plot(x, y, '.-', Label= 'data') plt.plot(x_up, y_up, 'जाओ-', लेबल = 'अप-नमूना', अल्फा = 20) plt.legend() plt.show() plt.plot (x, y, '.-', लेबल = 'डेटा') plt. प्लॉट (x_down, y_down, 'rs-', लेबल = 'डाउन-सैंपल', अल्फा = 0.3) plt.legend () plt.show ()
तरंग डेटा scipy.signal.resample के साथ संसाधित
तरंग डेटा scipy.signal.resample के साथ संसाधित

scipy.signal.resample इस धारणा पर आधारित है कि फूरियर रूपांतरण का उपयोग करके पुन: नमूनाकरण के कारण संकेत आवधिक है।यदि आवधिकता संतुष्ट नहीं है, जैसे कि उपरोक्त डेटा में टर्मिनल भाग, मान बहुत अधिक विचलित हो जाएगा।

वैसे, scipy.signal.resample अप-सैंपलिंग भी कर सकता है।
नीली रेखा मूल डेटा बिंदु है, हरा अपसैंपलिंग के बाद का प्लॉट है, और लाल डाउनसैंपलिंग के बाद का प्लॉट है।

 

कागल भाषण विश्लेषण प्रतियोगितासंदर्भ के लिए एक उपयोग उदाहरण भी है।

संदर्भ:https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.signal.resample.html

डेटाफ्रेम के लिए आवेदन

प्रत्येक नमूने के लिए प्रत्येक माप बिंदु और स्तंभों के लिए पंक्तियों के साथ एक डेटा फ़्रेम पर प्रदर्शन किया गया।

पीडी के रूप में पांडा आयात करें # डेटाफ्रेम में स्टोर करने के लिए डेटा बनाएं 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, column=['y_down' ,' y1_down','y2_down'], index=np.linspace(0, 10, 20, endpoint=False)) # डिस्प्ले और प्लॉट डाउनसैंपल्ड डेटा प्रिंट(df1.head(10)) प्रिंट(df1_down.head (10)) df1 प्लॉट (तरह = 'लाइन', मार्कर = '।') df1_down.plot (तरह = 'लाइन', मार्कर = '।')
df1.head(10) df1_down.head(10)
 df1.head(10) df1_down.head(10)
डाउनसैंपलिंग से पहले और बाद में डेटा बिंदु
डाउनसैंपलिंग से पहले डाउनसैंपलिंग के बाद

मूल 40 अंक से 1 अंक, जो कि 2/20 है, के नीचे जाने के बाद भी, तरंग को अच्छी सटीकता के साथ बनाए रखा जाता है, और ऐसा लगता है कि फीचर वैल्यू के रूप में उपयोग किए जाने पर भी जानकारी का बहुत कम नुकसान होता है।

प्रत्येक माप बिंदु के लिए प्रत्येक नमूने और स्तंभों के लिए पंक्तियों के साथ डेटा फ़्रेम का उदाहरण
जब पंक्तियाँ नमूने हों और स्तंभ माप बिंदु हों

एक डेटा फ्रेम (तथाकथित अर्दली डेटा) के मामले में जिसमें पंक्तियाँ प्रत्येक नमूना हैं और स्तंभ प्रत्येक माप बिंदु हैं, तर्कaxis=1अगर ऐसा है तो ठीक है।