見出し画像

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のサンプルページ

にコピペしてグラフに表示してみました。

画像1

それなりに分解できています。使えそうです。
ここで今朝は時間切れです。猫が後ろで「終了です。」と言っています。
明日は、このライブラリを使ってポーリング結果のSTL分析を組み込んでみようと思います。
明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。