Skip to content

Instantly share code, notes, and snippets.

@kawaz
Created July 27, 2023 05:06
Show Gist options
  • Save kawaz/1921fd02829146809203b3e7d481e30a to your computer and use it in GitHub Desktop.
Save kawaz/1921fd02829146809203b3e7d481e30a to your computer and use it in GitHub Desktop.
データ列に対してmapすると移動平均が得られるフィルタ関数。chartjs が移動平均線の描画に対応してないっぽいが、これを噛ましてやれば自力で移動平均用のデータ列が作れる。
const movingAverageFilter = (ws=3) => {
if(!Number.isInteger(ws) || ws < 1) {
throw new Error(`Invalid window size. ws must be >=1. You entered: ws=${ws}.`)
}
let win = []
let sum = 0
let pos = 0
let tail = 0
return (head) => {
sum = sum + head - tail
win[pos] = head
pos = pos < ws - 1 ? pos + 1 : 0
if(win.length < ws) {
return
}
tail = win[pos]
return sum/ws
}
}
// test
const data = [1,2,3,4,5,6,7,8,9,10];
[1,2,3,5,10].forEach(ws => {
console.log(`ws=${ws}`, data.map(movingAverageFilter(ws)))
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment