TWSNMP FC:R言語の便利な関数STLを組み込むための調査
今朝も3時に猫が起こしにきてくれました。今朝はお世話した後、二度寝できました。4時にまた起こしにきてくれました。
まずは昨日の夜、寝る前に気になっていた外部コマンド実行のポーリングを修正しました。
です。
その後、前々から組み込みたかったR言語のSTL関数
のような分析機能の調査を始めました。この関数はかなり便利で時系列データを
のように分解して分析できるものです。R言語以外だとPythonの実装が見つかりました。JavaScriptかGO言語でできないか調べているとありました。
まずはサンプルコード試してみることにしました。元のサンプルコードだと結果が数値なのでちゃんと動いているかよくわりません。そこで、サンプルコードを
package main
import (
"encoding/csv"
"fmt"
"os"
"strconv"
"github.com/chewxy/stl"
)
func main() {
var data []float64
f, _ := os.Open("co2.csv")
r := csv.NewReader(f)
r.Read() // read header
for rec, err := r.Read(); err == nil; rec, err = r.Read() {
// here we're ignoring errors because we know the file to be correct
if co2, err := strconv.ParseFloat(rec[0], 64); err == nil {
data = append(data, co2)
}
}
// The main function:
res := stl.Decompose(data, 12, 35, stl.Additive(), stl.WithRobustIter(2), stl.WithIter(2))
printData(res.Data)
printData(res.Seasonal)
printData(res.Trend)
printData(res.Resid)
}
func printData(data []float64) {
fmt.Println()
fmt.Printf("[")
for i, d := range data {
if i%20 == 0 {
fmt.Println()
}
fmt.Printf("[%d,%f],", i, d)
}
fmt.Println("]")
}
のように書き換えてechartsで表示しやすいデータを出力するようにしました。このデータをechartsのサンプルページ
にコピペしてグラフに表示してみました。
それなりに分解できています。使えそうです。
ここで今朝は時間切れです。猫が後ろで「終了です。」と言っています。
明日は、このライブラリを使ってポーリング結果のSTL分析を組み込んでみようと思います。
明日に続く
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。