最初と最後のデータ | package入門(rpnマイスター編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | package入門 | ポテンシャルを飛躍的に高めるrpnパッケージを学習。

HOME > 講座 > package入門 > rpnマイスター編 > 最初と最後のデータ

hatena twitter facebook rss ソーシャルブックマーク

最初と最後のデータ

 データ処理を行なうとき、重要なのが最初のデータと最後のデータです。中間のデータも大切ですが、最初のデータと最後(つまり最新)のデータは特に気になるものです。

例えば直近10日のデータで異常値はないか?データはどう変化しているのか?など時系列で記録されるデータの最後の部分は注意すべきポイントがたくさん潜んでいます。

このような需要が昔からあったからなのでしょうが、データの最初の部分と最後の部分を簡単に参照するための専用のプログラムもありました。例えば、UNIXではエディターを開くまでもなく、コマンドですぐに確認することができます。

rpnでも同様な仕組みを提供できれば、データ処理が楽になります。そこで、ユーティリティーパッケージではheadとtailの2つのプログラムを用意しました。ただし、あくまでもrpnは電卓なので、数値データだけを対象にしています。

最初のデータを取り出す

 ここに1から10までの乱数が3組で5行分あるとします。rpnで作ってみましょう。

  >rpn 10 ? 10 ? 10 ? -r 5
  9 9 4
  6 2 8
  1 10 3
  7 10 8
  5 1 6


この3列×5行のデータから最初の3行だけを取り出したい時は、headプログラムを使います。取り出したい行数を指定すれば、先頭から表示してくれます。

  >rpn 10 ? 10 ? 10 ? -r 5 | rpn 3 -c head
  9 9 4
  6 2 8
  1 10 3


最初の3行が表示されていますね。

最後のデータを取り出す

 次に最後の3行だけを取り出したい時ですが、今度はtailプログラムを使います。使い方はheadと同じです。最後の3行が表示されています。

  >rpn 10 ? 10 ? 10 ? -r 5 | rpn 3 -c tail
  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は複数のカラムに対応しています。加えて、カラムの数値の個数が違っていても動作します。例えば、以下のようなデータがあるとします。

  1 2
  3
  4 5 6
  7 8
  9 10


このデータがファイルのdata.txtに格納されているとして、以下のようにrpn式を実行すると最初の3行が表示されます。

  >rpn 3 -c head <data.txt
  1 2
  3
  4 5 6


各行の数値の数はばらばらでも動作していますね。これは、tailも同様です。

情報rpnプログラムのほとんどがn行1列、n行m列のデータ形式を操作するように作られていますので、headとtailが対応するデータ形式はrpnでは異色です。利便性を重視して、このような仕様になっています。

黒点数の移動平均を計算

 以下は20年間の年間平均黒点数の推移データです。

  155 154 140 115  66  45  17  13  29 100
  157 142 145  94  54  29  17   8  21  64


このデータを20行1列のデータ形式にして、ファイルのdata.txtに格納すると、最後の5年間の黒点数は次のとおりです。

  >rpn 5 -c tail <data.txt
  29
  17
  8
  21
  64


このdata.txtに以下の黒点数を順に追加していくとします。

   93 119 111 104  63  40  29  15   7   2


全部で10年分で、1年目は93個、2年目は119個、10年目に2個です。従って、1年目の93をdata.txtに追加した後の最後の5行は以下のようになります。

  >rpn 5 -c tail <data.txt
  17
  8
  21
  64
  93


29がなくなって93が追加されていますね。これを平均すると直近5年間の黒点数平均になります。

  >rpn 5 -c tail <data.txt | rpn -c mean
  40.6


同様な操作を10年間分繰り返すと、以下のような10個の移動平均データが計算できるわけです。同じ期間の実際の黒点数と比較してみましょう。向かって左の数字が5年移動平均で右の数字が実際の黒点数になります。

  40.6  93
  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つのデータ系列の違いがすぐに分かります。

  >rpn 1 -c rownum <move.txt | xyp -x,10 -y,120 -k2 -s1,50 -n -m
  ^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の姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

rpnマイスターパッケージ

マイスター

ユーティリティー

カレンダー

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn標準版(2kリビジョン)はダブルクォートで囲って下さい。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS」を参照ください。

注意rpnの障害情報と対策はこちら