ストップウォッチ | package入門(カレンダー・システム編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

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

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

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

HOME > 講座 > package入門 > カレンダー・システム編 > ストップウォッチ hatena yahoo buzzurl livedoor del.icio.us nifty newsing twitter facebook rss ソーシャルブックマーク

ストップウォッチ

 既にファイル化されているデータを使うのは簡単ですが、実際にデータを収集するとなると意外に大変です。ストップウォッチやカウンターを片手に地道に計測して、紙に記録することになります。

データ収集では、観測したい事象が何回発生したか、何個あるか、何時起こったかなど記録するのですが、この作業を何とか軽減したいものです。そんなときに便利なrpnプログラムを用意しました。キーを叩くだけで時間を記録してくれるwatchプログラムです。

キーを叩いて時間を記録

 次のように入力すると、watchプログラムはストップウォッチのように時間を計測してくれます。

  >rpn -c watch


実行しても見た目に変化がありませんが、何かキーを押す度に時間が表示されます。キーはエンターキーでもスペースキーでも構いません。

  >rpn -c watch
  091215 1         <-- 任意のキーを押す


先頭の数字がキー押下の時間を示していて、2桁の時間、2桁の分、そして2桁の秒の6桁固定になっています。次の数字が前の記録時間からの経過時間です。しばらく待ってから、キーを押下すると2行目に押下した時間が表示されることが確認できます。

  >rpn -c watch
  091215 1         <-- 任意のキーを押す
  091230 15        <-- 任意のキーを押す


キー押下の時間が9時12分30秒で前回の記録時間から15秒経過していることが分かります。なお、計測を終了したいときは^Zを押します。

  >rpn -c watch
  103616 1
  103617 1
                   <-- ^Zで終了


^ZはCtrlキーを押しながらCキーを押すことです。キーボード左端下にCtrlというキーがあるので、そのCtrlを押したままでアルファベットのZキーを押してください。

ファイルにそのまま時間を記録

 観測する事象が10件程度であれば、画面に表示される時間を確認すればよいのですが、記録する数が多くなったり、後から再利用したい場合はリダイレクトでファイルに記録することになります。

  >rpn -c watch >tmp


このrpn式だけでキーを叩くたびにtmpファイルに時間が記録されていきます。ただし、実行中はファイルにリダイレクトするため、押下した時間は画面に表示されません。当然、計測結果のtmpファイルの行数を数えれば記録した回数(事象が発生した回数)になりますし、経過時間を合計すれば観測に掛かった全時間になります。

  >rpn -c count <tmp
  10
  >rpn -c sum <tmp
  125


上の実行例は、キーを10回叩いてから^Zで終了した場合です。観測に125秒掛かっていることが分かりますね。

車30台の通過を記録

 少し具体的な利用例を示しましょう。車が通過するときの時間の間隔は指数分布であると言われています。果たして本当にそうでしょうか。実際に計測してみましょう。

計測方法は以下のrpn式だけです。記録時間はファイルのcar.txtに格納されていくことになります。基準となる一台の車が通過した瞬間にrpnを実行です(次の一台からが計測対象)。

  >rpn -c watch >car.txt


計測中、画面には何も出てきませんが、時間の経過を監視しています。車が通過する度に任意のキーを押します。30台通過したら^Zキーで終了です。

警告計測終了時には必ず^Zを押下してください。^Cを入力するとデータは保存されません。

さっそくファイルの中身を確認してみましょう。

  >type car.txt
  104220 4
  104257 37
  104300 3
  104302 2
  104324 22
     :
   (中略)
     :
  104727 33
  104745 18
  104747 2
  104800 13
  104808 8


きちんと保存されているようです。

車の通過時間の分布

 それでは、収集したデータを使って、横軸に時間の経過、縦軸に通過に掛かった時間をプロットしていきます。

  >rpn x 10000 % x <car.txt | xyp -x4000,5000 -y,50 -s100,10 -m
  ^y 50               *
  |               *
  -
  |         *
  |
  -                           *
  |
  |
  -           *
  |            *               *
  |                    *
  -                *     *       *
  |                       **     *
  |       *            *  **             x
  4000       *    **   *  **   *      5000
  +--|---|---|---|---|---|---|---|---|--->


通過時間はバラバラに見えますね。次に経過時間の基本統計量を計算してみましょう。

  >rpn x _ <car.txt | rpn -c statinfo
  デ ー タ        30
  最 小 値        1
  最 大 値        50
  範    囲        49
  合 計 値(Σ)    352
  平 均 値(μ)    11.7333
  分 散 値(σ2)   172.596
  標準偏差(σ)    13.1376
  分 散 値(s2)   178.547
  標準偏差(s)    13.3622
  歪度(a3≒0)    1.64748
  尖度(a4≒3)    4.76248
  変動係数(ν)    1.13882


データ数は30個、車の通過間隔の最小時間は1秒、最大時間は50秒でした。平均して11秒で通過していますね。また、合計値から観測時間は6分弱だったことも分かります。次に度数分布を幹葉表示してみましょう。

  >rpn x _ <car.txt | rpn -c stemleaf
   0 | 1122222233345567899
   1 | 233578
   2 | 2
   3 | 37
   4 | 6
   5 | 0


ほとんどが10秒以内の通過です。この分布をグラフにすると以下のようになります。

  >rpn x _ <car.txt | rpn 1 50 5 -c freqdist >tmp
  >rpn _ _ _ #d __ @d <tmp | rpn 1 -c rownum | xyp -x,6 -y,30 -s1,10 -m
  ^y 30
  |
  |
  |
  -
  |     *
  |
  |
  |
  -
  |
  |
  |            *
  |                                      x
  |o                 *      *     *      *
  +-----|------|-----|------|------|----->


幹葉表示で大体の見当は付いていましたが、確かに指数分布に似ていますね。

        *


 実際に何かを観察して記録しようとすると意外に大変なことが分かります。できれば記録した瞬間にデジタル化されれば便利です。本格的な記録はできませんが、watchプログラムはちょっとした時間記録ができる小さなソフトウェアツールです。

情報本講座で使用したプログラムは、カレンダー・システムパッケージとして購入することができます。statinfo, stemleafはrpnマイスターパッケージに同梱されています。rownumはカンタン分析パッケージに同梱されています。freqdistはビジネス統計(基礎編)に同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

カレンダー・システムパッケージ

カレンダー

ユーティリティー

マイスター

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

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

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

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

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