2009-10-21 14 views
8

मेरे पास एक साधारण numpy सरणी है, प्रत्येक तारीख के लिए डेटा बिंदु है। कुछ इस तरह:क्या भविष्य में डेटा पॉइंट्स को निकालने के लिए अजगर में आसान तरीका है?

>>> import numpy as np 
>>> from datetime import date 
>>> from datetime import date 
>>> x = np.array([(date(2008,3,5), 4800), (date(2008,3,15), 4000), (date(2008,3, 
20), 3500), (date(2008,4,5), 3000) ]) 

वहाँ आसान तरीका भविष्य के लिए डेटा बिंदुओं एक्सट्रपलेशन है: तिथि (2008,5,1), तारीख (2008, 5, 20) आदि? मैं समझता हूं कि यह गणितीय एल्गोरिदम के साथ किया जा सकता है। लेकिन यहां मैं कुछ कम लटकते फल की तलाश में हूं। दरअसल मुझे पसंद है कि numpy.linalg.solve क्या करता है, लेकिन यह extrapolation के लिए लागू नहीं लग रहा है। शायद मैं बिल्कुल गलत हूँ।

दरअसल अधिक विशिष्ट होने के लिए मैं एक बर्न-डाउन चार्ट (एक्सपी टर्म) बना रहा हूं: 'x = date और y = काम की मात्रा' करने के लिए, इसलिए मुझे पहले से ही किया गया स्पिंट मिला है और मैं कल्पना करना चाहता हूं अगर वर्तमान स्थिति बनी रहती है तो भविष्य में दौड़ कैसे जाएंगी। और अंत में मैं रिलीज की तारीख की भविष्यवाणी करना चाहता हूं। तो 'काम की मात्रा' की प्रकृति 'यह हमेशा जलने वाले चार्ट पर नीचे जाती है। इसके अलावा मैं extrapolated रिलीज दिनांक प्राप्त करना चाहता हूं: जब मात्रा शून्य हो जाती है।

यह सब देव टीम को दिखाने के लिए है कि चीजें कैसे जाती हैं। सटीकता यहां इतनी महत्वपूर्ण नहीं है :) देव टीम की प्रेरणा मुख्य कारक है। इसका मतलब है कि मैं लगभग अनुमानित एक्सट्रापोलेशन तकनीक के साथ बिल्कुल ठीक हूं।

+1

जब आप "सांख्यिकी पायथन" के लिए गुगल करते हैं तो आपको क्या मिला? आपको मिले किसी भी सांख्यिकीय पैकेज पर कोई प्रश्न? –

+0

प्रश्न में डेटा की प्रकृति को जानने के बिना, किसी भी extrapolation के बारे में बात करना मुश्किल है। उपर्युक्त, जहां तक ​​कोई भी देख सकता है, कुछ भी हो सकता है (यादृच्छिक मूल्यों को छोड़कर नहीं), इसलिए किसी भी व्यावहारिक दृष्टिकोण के बारे में बात करने के लिए बस अनुमान लगाना होगा। सवाल परिशोधित करें। – Rook

+0

आप बिल्कुल सही हैं! परिष्कृत। – maplpro

उत्तर

16

एक्सट्रापोलेशन के लिए कचरा उत्पन्न करना बहुत आसान है; इसे इस्तेमाल करे। कई अलग-अलग एक्सट्रापोलेशन निश्चित रूप से संभव हैं; कुछ स्पष्ट कचरा उत्पन्न करते हैं, कुछ गैर-स्पष्ट कचरा, कई बीमार परिभाषित हैं।

alt text http://i39.tinypic.com/am62wp.png

""" extrapolate y,m,d data with scipy UnivariateSpline """ 
import numpy as np 
from scipy.interpolate import UnivariateSpline 
    # pydoc scipy.interpolate.UnivariateSpline -- fitpack, unclear 
from datetime import date 
from pylab import * # ipython -pylab 

__version__ = "denis 23oct" 


def daynumber(y,m,d): 
    """ 2005,1,1 -> 0 2006,1,1 -> 365 ... """ 
    return date(y,m,d).toordinal() - date(2005,1,1).toordinal() 

days, values = np.array([ 
    (daynumber(2005,1,1), 1.2), 
    (daynumber(2005,4,1), 1.8), 
    (daynumber(2005,9,1), 5.3), 
    (daynumber(2005,10,1), 5.3) 
    ]).T 
dayswanted = np.array([ daynumber(year, month, 1) 
     for year in range(2005, 2006+1) 
     for month in range(1, 12+1)]) 

np.set_printoptions(1) # .1f 
print "days:", days 
print "values:", values 
print "dayswanted:", dayswanted 

title("extrapolation with scipy.interpolate.UnivariateSpline") 
plot(days, values, "o") 
for k in (1,2,3): # line parabola cubicspline 
    extrapolator = UnivariateSpline(days, values, k=k) 
    y = extrapolator(dayswanted) 
    label = "k=%d" % k 
    print label, y 
    plot(dayswanted, y, label=label ) # pylab 

legend(loc="lower left") 
grid(True) 
savefig("extrapolate-UnivariateSpline.png", dpi=50) 
show() 

जोड़ा गया: एक Scipy ticket कहते हैं, " scipy.interpolate में FITPACK वर्गों के व्यवहार बहुत डॉक्स से अधिक जटिल है विश्वास करने के लिए एक नेतृत्व करेंगे" - imho का सच अन्य सॉफ्टवेयर डॉक्टर भी।

+0

बहुत अच्छा उदाहरण! धन्यवाद! – maplpro

+0

इंटरपोलिंग extrapolating नहीं है, और दूसरी तरफ। – tagoma

3

गणितीय मॉडल इस मामले में जाने का तरीका हैं। उदाहरण के लिए, आप केवल तीन डेटा बिंदुओं है, तो आप कैसे प्रवृत्ति प्रकट होगा पर बिल्कुल कोई संकेत नहीं है (दो परवलय के किसी भी हो सकता है।)

कुछ आँकड़े पाठ्यक्रम जाओ और एल्गोरिथम को लागू करने की कोशिश कर सकते हैं। Wikibooks आज़माएं।

+0

पूरी तरह से सहमत हैं, इसे समझें लेकिन स्पष्टीकरण देना चाहते हैं, मैं सिर्फ यह जांच रहा हूं कि कुछ मौके से numpy.extrapolate फ़ंक्शन पहले से ही जगह पर है, "एक्सट्रापोलेशन विधि चुनें" :) यही कारण है कि मैं इसे "कम लटकाने वाला फल" कहता हूं – maplpro

1

आपको उस फ़ंक्शन पर स्पीसिस्फी करना होगा जिस पर आपको एक्स्ट्राप्रोलेशन की आवश्यकता है। फ़ंक्शन के पैरामीटर खोजने के लिए आप http://en.wikipedia.org/wiki/Regression_analysis पर रीग्रेशन का उपयोग कर सकते हैं। और भविष्य में इसे extrapolate।

उदाहरण के लिए: एक्स मूल्यों में दिनांक का अनुवाद और प्रयोग पहले दिन एक्स = आपकी समस्या के लिए 0 के रूप में मान shoul aproximatly (0,1.2), (400,1.8), (900,5.3)

अब आप तय करते हैं अपने अंक प्रकार ए + बी x + ग x^2

उपयोग एक, बी और सी को खोजने के लिए http://en.wikipedia.org/wiki/Linear_least_squares (मैं प्रदान करेगा कम से कम squers की विधि पूर्ण स्रोत के समारोह पर स्थित है कि , लेकिन बाद में, beacuase मेरे पास इसके लिए समय नहीं है)

4

एक्सट्रापोलेशन करने का एक आसान तरीका इंटरपोलिंग बहुपद या स्प्लिंस का उपयोग करना है: scipy.interpolate में इसके लिए कई दिनचर्या हैं, और उपयोग करने में काफी आसान है (केवल (x, y) अंक दें, और आपको एक फ़ंक्शन मिलता है [ एक कॉल करने योग्य, ठीक]]।

अब, जैसा कि इस धागे में इंगित किया गया है, आप अपने डेटा के लिए मॉडल नहीं होने पर एक्सट्रापोलेशन हमेशा सार्थक होने की उम्मीद नहीं कर सकते हैं (विशेष रूप से जब आप अपने डेटा पॉइंट से बहुत दूर हैं)। हालांकि, मैं आपको scipy.interpolate से बहुपद या स्पलीन इंटरपोलेशन के साथ खेलने के लिए प्रोत्साहित करता हूं ताकि आप यह देख सकें कि आपके द्वारा प्राप्त किए गए परिणाम क्या हैं।

+0

इस तरह, निश्चित रूप से कोशिश करने जा रहा है, बहुत बहुत धन्यवाद! – maplpro

संबंधित मुद्दे

 संबंधित मुद्दे