最初と最後のデータ
データ処理を行なうとき、重要なのが最初のデータと最後のデータです。中間のデータも大切ですが、最初のデータと最後(つまり最新)のデータは特に気になるものです。
例えば直近10日のデータで異常値はないか?データはどう変化しているのか?など時系列で記録されるデータの最後の部分は注意すべきポイントがたくさん潜んでいます。
このような需要が昔からあったからなのでしょうが、データの最初の部分と最後の部分を簡単に参照するための専用のプログラムもありました。例えば、UNIXではエディターを開くまでもなく、コマンドですぐに確認することができます。
rpnでも同様な仕組みを提供できれば、データ処理が楽になります。そこで、ユーティリティーパッケージではheadとtailの2つのプログラムを用意しました。ただし、あくまでもrpnは電卓なので、数値データだけを対象にしています。
最初のデータを取り出す
ここに1から10までの乱数が3組で5行分あるとします。rpnで作ってみましょう。
9 9 4
6 2 8
1 10 3
7 10 8
5 1 6
この3列×5行のデータから最初の3行だけを取り出したい時は、headプログラムを使います。取り出したい行数を指定すれば、先頭から表示してくれます。
9 9 4
6 2 8
1 10 3
最初の3行が表示されていますね。
最後のデータを取り出す
次に最後の3行だけを取り出したい時ですが、今度はtailプログラムを使います。使い方はheadと同じです。最後の3行が表示されています。
1 10 3
7 10 8
5 1 6
実際、5行程度のデータならあまり便利な感じはありませんが、データ量が100行、1000行と増えてくるとheadとtailをありがたく感じ始めます。
最初の数行を見るためにわざわざメモ帳や表計算ソフトを起動するのは野暮ったいものです。起動の時間に加えて、巨大なデータだと読み込むだけでも時間が掛かります。
その点、rpnのheadとtailなら手間が掛かりません。5行でも1万行でも同じrpn式で答えが出てきます。
headとtailがなくてもrownumとlookupで同じことはできますが、最初と最後のデータを取り出すのなら、headとtailの方が早くて便利です。
headとtailはマルチカラム対応
上記の例にあるように、rpnのheadとtailは複数のカラムに対応しています。加えて、カラムの数値の個数が違っていても動作します。例えば、以下のようなデータがあるとします。
3
4 5 6
7 8
9 10
このデータがファイルのdata.txtに格納されているとして、以下のようにrpn式を実行すると最初の3行が表示されます。
1 2
3
4 5 6
各行の数値の数はばらばらでも動作していますね。これは、tailも同様です。
rpnプログラムのほとんどがn行1列、n行m列のデータ形式を操作するように作られていますので、headとtailが対応するデータ形式はrpnでは異色です。利便性を重視して、このような仕様になっています。
黒点数の移動平均を計算
以下は20年間の年間平均黒点数の推移データです。
157 142 145 94 54 29 17 8 21 64
このデータを20行1列のデータ形式にして、ファイルのdata.txtに格納すると、最後の5年間の黒点数は次のとおりです。
29
17
8
21
64
このdata.txtに以下の黒点数を順に追加していくとします。
全部で10年分で、1年目は93個、2年目は119個、10年目に2個です。従って、1年目の93をdata.txtに追加した後の最後の5行は以下のようになります。
17
8
21
64
93
29がなくなって93が追加されていますね。これを平均すると直近5年間の黒点数平均になります。
40.6
同様な操作を10年間分繰り返すと、以下のような10個の移動平均データが計算できるわけです。同じ期間の実際の黒点数と比較してみましょう。向かって左の数字が5年移動平均で右の数字が実際の黒点数になります。
61 119
81.6 111
98.2 104
98 63
87.4 40
69.4 29
50.2 15
30.8 7
18.6 2
このデータがmove.txtに格納されているとして、グラフ化してみると2つのデータ系列の違いがすぐに分かります。
^y 120 +
100 +
| + *
| +
| * *
|
| *
| * +
50 *
| *
| +
| + *
| *
| + x
|o + 1+
+--1---2---3---4---5---6---7---8---9--->
"+"が実際の黒点数で、"*"が5年移動平均です。移動平均が実際の黒点数を後から追いかけていくのがよく分かります。このように、移動平均は実際のデータ変化に対して遅延が発生する欠点があります。しかし、同時に計算期間の誤差を吸収することでデータの方向性を示してもくれます。
特に移動平均は毎日データが発生するような頻度の高い業務で、直近データから素早く今後の傾向を知るのに便利です。tailを使った移動平均の計算は簡便なわりに使えるノウハウでしょう。
tailは数値の数が500個程度に収まるようにしてください。
本講座で使用したプログラムは、rpnマイスターパッケージとして購入することができます。rownumはカンタン分析パッケージに同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。