2012-05-24 24 views
3

我有時間序列數據,我希望簡化(降低的點的數量,同時具有圖形保持相同的形狀)。例如,如果我有這組數據:減少/簡化的時間序列數據

Time: 1, Value: 5 
Time: 6, Value: 5 
Time: 11, Value: 5.1 
Time: 12, Value: 5 
Time: 20, Value: 5.2 
Time: 22, Value: 6 
Time: 23, Value: 10 

簡化版本爲0.5的誤差會是這樣的:

Time: 1, Value: 5 
Time: 20, Value: 5.2 
Time: 22, Value: 6 
Time: 23, Value: 10 

我知道道格拉斯 - 普克算法GIS數據但我不知道如何將它應用於時間序列數據,因爲軸有不同的單位。如果我可以在數據庫中完成所有操作,那將會非常棒。

+0

這不是一個真正的形狀相同,是嗎?例如,如果它是一個方波「1,0 2,0 3,0 4,0 5,0 6,10」,並且你將它改爲「1,0 6,10」,那麼你將會產生一個斜率;你需要保持兩個端點的斜率不變。 – Phrogz

+0

@Progrog這是真的,但如果你有1,0 5,0 6,10這將是相同的形狀。理想情況下,會有一點寬容,這就是爲什麼我在上面的示例中篩選出3,5.1的原因。 – Mike

回答

1

我不知道,一個內置的功能。此查詢可能做的工作:

WITH x AS (
    SELECT t, val 
      ,@(lead(val) OVER w - val) AS delta1 
      ,@(lag(val) OVER w - val) AS delta2 
    FROM tbl 
    WINDOW w AS (ORDER BY t) 
    ORDER BY t 
    ) 
SELECT t, val 
FROM x 
WHERE delta1 > 0.2 
    OR delta2 > 0.2 
    OR delta1 IS NULL 
    OR delta2 IS NULL; 

我使用window functions lead() and lag()absolute value operator @的CTE來計算增量(應該是最快的)。

只有那些行保留,其中增量中的至少一個是大於0.2(符合例如任意的閾值)。

第一行和最後一行是delta1delta2NULL(無前導/落後行)的特殊情況。我們希望在任何情況下都包含這些行,所以我將NULL檢查添加到最終的SELECT

可生產你所要求的結果。


,致力於對多少的方向變化的另一變型:

WITH x AS (
    SELECT t, val 
      ,@(lead(val) OVER w + lag(val) OVER w - 2*val) AS deviate 
    FROM tbl 
    WINDOW w AS (ORDER BY t) 
    ORDER BY t 
    ) 
SELECT t, val, deviate 
FROM x 
WHERE deviate > 0.2 
    OR deviate IS NULL; 

這應該更緊密地保持形狀。這個例子保持行Time: 12, Value: 5,並避免你在評論中描述的效果。 (你的問題例如沒有這個方向指向。)

+0

這非常接近我所需要的。唯一的問題是,如果我的公差爲.5,它將返回1,5 20,6 23,10,這將改變圖形的形狀...爲了保持形狀,它應該返回1,5 20,5.2 22, 6,23,10。在視覺上,如果你想要繪製圖形,第一種方法對第二點有穩定的向上趨勢,但在第二種方法中,線條會比較平坦,然後突然跳躍到第三點,這更接近原始數據。 – Mike

+0

@Mike:你的例子似乎專注於絕對值。我添加了一個關注方向改變的變體。 –

1

拉默道格拉斯·普克將在這裏工作 - 單位應該是一個問題。