2011-09-28 26 views
1

我試圖以某種方式「正常化」每月數據。如何生成拉伸圖的X值?

我的意思是,我需要採取每日價值,並檢查每個月的數據與另一個月的數據。

唯一的問題是,有些月份比其他月份長。所以我想出了一種方法,我想這樣做,但我有點困惑,至於如何做到這一點...

基本上,我在看這個網站:http://paulbourke.net/miscellaneous/interpolation/並試圖將每組座標轉換爲一個具有31個X和Y值的圖(我想使用餘弦內插器,但我仍然試圖找出如何處理它)。

現在,X值有一個函數。我可以像(1..28)通過,並演變成31個值......很簡單的代碼,這樣的事情對我的作品:

def total = (1..30) 
def days = 28 

def resize = {x, y-> 
    result = [] 
    x.each{ result << (it * (y/x.size())} 
    return result 
} 

resize(total,days) 

它返回的31跨越的Y值的列表0到28.

我的問題是:如何將相應的Y值列表轉換爲這些值?我真的很難將這個概念包裹起來,並且可以使用一些幫助。

我的第一個想法是簡單地通過這個函數運行Y值,但是返回的值都低於原始輸入。

我正在尋找的東西,將保留在某些點的價值觀,但只是水平拉伸圖。

例如,在圖形長度(1/3)的x值處,該值需要與原始圖形長度(1/3)處的值相同。

任何人都可以幫我解決這個問題嗎?這讓我很難過。

在此先感謝!

+0

你的x,y數據如何存儲?你只在這裏顯示x數據,我想作爲一個例子... –

+0

X數據就是我現在可以操作的所有東西。我的Y數據存儲在與「總數」相等的列表中。 (我可以通過做[total,yValues] .transpose()來引用每個座標對,如果這使得這個問題更容易) –

回答

4

不知道問題出在哪裏這個問題,所以我做了一些數據

我覺得你的算法是正確的,你只需要正常化x軸。

我想出了這個代碼(和一些地塊)證明什麼,我相信答案是

定義一些x和y的值:

def x = 1..30 
def y = [1..15,15..1].flatten() 

然後,產生XY值的列表形式:[ [ x, y ], [ x, y ], ...

def xy = [x,y].transpose() 

如果我們繪製這份名單中,我們得到:

a plot of the points from 1 to 30

然後定義一個函數正常化(基本和你的一樣,但它並沒有觸及的y值)

def normalize(xylist, days) { 
    xylist.collect { x, y -> [ x * (days/xylist.size()), y ] } 
} 

然後我們就可以正常化我們的名單到28天

def normalxy = normalize(xy, 28) 

現在,如果我們描繪出這些點,我們得到

a plot of the points from 1 to 28

正如你所看到的,這兩個地塊有相同的形狀,他們只是不同的寬度...

我有沒有錯過這一點?

+1

你點擊它。這非常有用,非常感謝你! –

+1

很高興幫助:-)祝你好運! –