質問

単純な 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 = 実行する作業量」なので、すでに完了したスプリントがあり、現在の状況が続いた場合に将来のスプリントがどのように進むかを視覚化したいと考えています。最後に発売日を予想したいと思います。したがって、「実行すべき作業量」の性質は、バーンダウン チャートでは常に減少するということです。また、推定されたリリース日を取得したいと思います。ボリュームがゼロになる日付。

これは、開発チームに状況を示すためのすべてです。ここでは正確さはそれほど重要ではありません:) 開発チームのモチベーションが主な要素です。つまり、非常に近似的な外挿手法でまったく問題ないということです。

役に立ちましたか?

解決

これは、ごみを発生させるために外挿のためにあまりにも簡単です。これを試して。 多くの異なる外挿は、もちろん可能です。 一部の農産物明白なゴミ、いくつかの非自明なゴミは、多くの人が病気に定義されています。

""" 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()

を追加しました:A scipyのダウンロードチケットのは、言います FITPACKクラスの「行動で scipy.interpolateははるかに複雑なドキュメントよりも「信じるために1を招くです - その他のソフトウェアのドキュメントの真の私見すぎます。

他のヒント

外挿を行う簡単な方法は、内挿多項式またはスプラインを使用することです。これには多くのルーチンがあります scipy.補間, 、非常に使いやすいものがあります ((x, y) 点を指定するだけで、[正確に呼び出し可能な] 関数が得られます)。

さて、このスレッドで指摘されているように、データのモデルがない場合、外挿が常に意味を持つとは期待できません (特にデータ ポイントから遠く離れている場合)。ただし、scipy.interpolate の多項式補間またはスプライン補間を試して、得られる結果が自分に合うかどうかを確認することをお勧めします。

数学モデルは、この場合には移動するための方法です。あなたが唯一の3つのデータ点を持っている場合たとえば、あなたは(2つの放物線のいずれかである可能性があります。)傾向が展開する方法については全く兆候を持つことはできません。

いくつかの統計のコースを取得し、アルゴリズムを実装してみてください。 ウィキブックスにしてみます。

あなたは外挿を必要としている機能の上にswpecifyする必要があります。 あなたは見つけるために回帰 http://en.wikipedia.org/wiki/Regression_analysis に使用することができますよりも、機能のparatmeters。そして、将来的にはこれを外挿するます。

例えば: あなたの問題のためのx = 0として、xの値に日付を変換し、使用初日値はaproximatlyことshoul (0,1.2)、(400,1.8)、(900,5.3)

今、あなたが決めるそのタイプの機能上の彼のポイントの嘘 + bの X + C のX ^ 2

の使用、a、b及びcを見つけるために少なくともsquersの方法 http://en.wikipedia.org/wiki/Linear_least_squaresする (私は完全なソースを提供しますが、後に、私はこのための時間を持っていないbeacuase)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top