有没有简单的方法在python中推断数据点到未来?

我有一个简单的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所做的,但它看起来并不适用于外推。也许我绝对错了。 实际上更具体地说,我正在建立一个烧毁图表(xp术语):'x =日期和y =要完成的工作量',所以我已经完成了冲刺,我想要想象未来的冲刺方式如果目前的情况仍然存在,我们会去最后我想预测发布日期。因此,“要完成的工作量”的性质总是在烧毁图表上下降。此外,我想获得推断的发布日期:当卷变为零时的日期。 这一切都是为了向开发团队展示事情的进展。这里的准确性并不那么重要:)开发团队的动机是主要因素。这意味着我对非常近似的外推技术绝对没问题。     
已邀请:
外推生成垃圾太容易了;试试这个。 当然可以进行许多不同的推断; 一些产生明显的垃圾,一些非明显的垃圾,许多是不明确的。 替代文字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票证说, “FITPACK类的行为 scipy.interpolate比文档会让人相信“复杂得多” - imho也适用于其他软件doc。     
进行外推的一种简单方法是使用插值多项式或样条:在scipy.interpolate中有很多例程,并且很容易使用(只需给出(x,y)点,你得到一个函数[a可赎回的,正是])。 现在,正如本线程中所指出的那样,如果您没有数据模型,则不能指望外推总是有意义的(特别是当您远离数据点时)。但是,我鼓励您使用scipy.interpolate中的多项式或样条插值来查看您获得的结果是否适合您。     
在这种情况下,数学模型是可行的方法。例如,如果您只有三个数据点,则绝对没有迹象表明趋势将如何展开(可能是两个抛物线中的任何一个。) 获取一些统计学课程并尝试实施算法。试试Wikibooks。     
您必须指定需要外推的功能。 您可以使用回归http://en.wikipedia.org/wiki/Regression_analysis查找功能的参数。并在将来推断这一点。 例如: 将日期转换为x值并使用第一天作为x = 0来解决您的问题,这些值应该是适当的 (0,1.2),(400,1.8),(900,5.3) 现在你决定他的观点取决于类型的功能 一个+ BX + CX ^ 2 使用最小风的方法找到a,b和c http://en.wikipedia.org/wiki/Linear_least_squares (我将提供完整的来源,但后来,因为我没有时间这个)     

要回复问题请先登录注册