一致データの抽出 | 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 ソーシャルブックマーク

一致データの抽出

 最近は異常気象が続いていますが、太陽の活動と無関係とは言えないでしょう。ここに1999年から2008年までの10年間の年間平均黒点数のデータがあります。

  1999 93
  2000 119
  2001 111
  2002 104
  2003 63
  2004 40
  2005 29
  2006 15
  2007 7
  2008 2


10年間の黒点数の推移

 ここ数年で急激に黒点数が減ってきているような気がしますが、グラフにしてみるとどんな感じになるでしょうか。データはdata.txtに格納されているとして、xypとnpdでグラフを描きます。

  >xyp -x1999,2008 -y,120 -s1,25 <data.txt | npd
  ^   *
  -100    *
  |            *
  *
  |
  -75
  |
  |                *
  -50
  |
  |                    *
  -25                       *
  |
  |                             *
  |                                 *    *
  +---|---|----|---|----|---|----|---|--->
  1999                                   2008


急速に黒点数が減っていることがグラフで一目瞭然です。太陽活動が活発だった2000年からどんどん減ってきています。そろそろ上昇に転じるのかどうか観察が続いています。

直近5年だけのデータを抜き出すには

 さて、黒点数の直近の動向を知るために、直近5年間のデータだけを利用したいとします。ただし、前回の特定の行を取り出すやり方では面倒ですし、直近10年や20年を取り出したいという要求には耐えられそうもありません。

そこで、ユーティリティーパッケージのlookupプログラムを使ってみます。lookupはデータを行とみなして一番先頭にある数値がlookupに指定された数値の間にあるかどうかを判定して、該当する行を抽出するプログラムです。具体的にlookupを使って説明しましょう。

  >rpn 2004 2008 -c lookup <data.txt
  2004 40
  2005 29
  2006 15
  2007 7
  2008 2


lookupに指定した数値は2004と2008です。つまり、直近5年の2004年から2008年のデータを抽出することになります。データの中で最初の数値が2004から2008に合致するデータが次の黒点数と共に抽出されます。

では、直近5年間の平均黒点数を求めてみましょう。年のデータを消してから平均のプログラムに繋げればOKですね。

  >rpn 2004 2008 -c lookup <data.txt | rpn x _ | rpn -c mean
  18.6


直近5年間の平均黒点数は18.6です。その前の1999年から2003年までの5年間ではどうだったでしょう。

  >rpn 1999 2003 -c lookup <data.txt | rpn x _ | rpn -c mean
  98


かなり多いですね。最近の太陽活動が低下してきていることは間違いないようです。

黒点数が少ない年のデータを抜き出す

 次にちょっとした応用です。今度は年を範囲にデータを抽出するのではなく、年間平均の黒点数が20個以下だった年を抽出するにはどうすればいいでしょうか。lookupは最初の数値しか判定の基準にしませんので、以下のようにします。

  >rpn x <data.txt | rpn 0 20 -c lookup | rpn x
  2006 15
  2007 7
  2008 2


先にデータの順番を変えてからlookupプログラムに通して、最後にデータの順番を戻して答えを出しています。答えは、ここ3年だけということになりますね。

黒点数が異常な年のデータを抜き出す

 データの操作では、条件に一致したデータを抜き出す作業が多いのですが、希に条件に一致していないほうのデータを抜き出したいときがあります。

その場合は、ユーティリティーパッケージのnlookupプログラムを使います。nlookupはデータを行とみなして、一番先頭にある数値が nlookupに指定された数値の間にあるかどうかを判定して、該当しない行を抽出するプログラムです。

上記の例で、黒点数が20個から100個の範囲にない年(とても少ないか多い年)を知りたいときは、以下のようにします。

  >rpn x <data.txt | rpn 20 100 -c nlookup | rpn x
  2000 119
  2001 111
  2002 104
  2006 15
  2007 7
  2008 2


簡単に出てきますね。

情報本講座で使用したプログラムは、ユーティリティーパッケージとして購入することができます。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の障害情報と対策はこちら