簡體   English   中英

數組中時間序列對象的移動平均值

[英]Moving average of time series objects in Array

[使用 Node 和 ReactJS] 我需要幫助將對象數組中的數據轉換為移動平均值。 此數據會不斷更新並按順序保存日期。

[...{
  x: 2020-02-13T03:31:46.864+00:00
  y: 0.49366917937994004
}...]

需要幫助實現將數據轉換為移動平均值,同時保持數據的結構。

我的主要問題是如何執行移動平均線,同時確保按順序保留和使用日期。

假設您想創建一個函數,允許您根據不同的時間段獲得移動平均線,您首先將數據按時間順序排序,然后根據要使用的間隔(2 天、3-日等)。 之后,您計算每個切片的平均值,然后將所有這些放入一個更大的數組中,以根據時間段為您提供一組移動平均值。 這個函數有很多方法可以分解(主要是錯誤的日期時間輸入),所以請謹慎對待它,並確保如果可能的話提前實施一些測試。

const testData =  [
  {
    x: '2020-02-13T03:31:46.864+00:00',
    y: 0.4936691793799400
  },
  {
    x: '2020-02-14T03:31:46.864+00:00',
    y: 0.5936691793799400
  },
  {
    x: '2020-02-01T03:31:46.864+00:00',
    y: 0.1936691793799400
  },
  {
    x: '2020-02-06T03:31:46.864+00:00',
    y: 0.2936691793799400
  },
  {
    x: '2020-02-06T03:32:46.864+00:00',
    y: 0.9936691793799400
  }
]


const sortDates = (data) => data.sort((a, b) => new Date(a.x) - new Date (b.x));
const getAverage = (data) => data.reduce((acc, val) => acc + val.y, 0) / data.length;

const computeMovingAverage = (data, period) => {
  const movingAverages = [];
  const sortedData = sortDates(data);

  // if the period is greater than the length of the dataset
  // then return the average of the whole dataset
  if (period > sortedData.length) {
    return getAverage(data);
  }
  for (let x = 0; x + period - 1 < sortedData.length; x += 1) {
    console.log('sortedData.slice(x, x + period)', sortedData.slice(x, x + period))
    movingAverages.push(getAverage(sortedData.slice(x, x + period)))
  }
  return movingAverages;
}

const twoDayMovingAverage = computeMovingAverage(testData, 2);
const threeDayMovingAverage = computeMovingAverage(testData, 3);

console.log('twoDayMovingAverage', twoDayMovingAverage);
console.log('threeDayMovingAverage', threeDayMovingAverage);

/*
twoDayMovingAverage [
  0.24366917937994,
  0.6436691793799401,
  0.74366917937994,
  0.54366917937994
]
threeDayMovingAverage [ 0.49366917937994, 0.59366917937994, 0.6936691793799401 ]
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM