データの整形
以下に4つのデータ形式を再度、表示します。
1 1 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
2 2 9 6 2 3 5 8 0 6
| 3 ---> data2.txt | 3 7 6 6 1 3 2 9 4
v 4 v 4 4 8 4 6 2 7 8 2
data1.txt 5 data3.txt 5 0 5 5 8 4 7 7 6
6 6 5 1 4 8 3 5 9 5
7 data4.txt <--- 7 3 7 2 5 0 9 6 1
8 8 9 4 1 3 4 3 6 4
9 9 3 1 7 7 3 1 0 3
縦一列・横一行の相互変換
まずは、このうちのC形式からB形式への変換を行ってみましょう。1行n列の横一行のデータからm行1列の縦一列のデータへの変換です(mとnが同じケース)。変換するためにrpnではユーティリティーパッケージにある変換用のrpnプログラムを使います。以下に例を示します。
1
2
3
4
5
6
7
8
9
"fold'"が横一行から縦一行への変換プログラムです。Cの形式だったdata3.txtがBの形式に変わっていることが分かると思います。詳しく見てみましょう。
① ②③ ④ ⑤
①はrpn標準版そのものです。⑤が今回計算する数値が入っているファイル名です。③はrpnプログラムを読み込むことを示しています。④がそのrpnプログラムですね。②は④のプログラムに指定する数値です。fold'プログラムにデータの数値を1個ずつで折り返すように指定しています。
別の例で試してみましょう。今度は3で折り返してみます。
1 2 3
4 5 6
7 8 9
3個のデータごとに折り返されていることが分かりますね。
逆にBの形式からCの形式にするにはどうすればいいでしょうか。答えは、同じくユーティリティーパッケージのfoldプログラムです。気付いたかもしれませんが、'(ダッシュ)が付いているプログラムはCの形式に対応したプログラムです。以下にfoldプログラムを実行した結果を示します。
1 2 3 4 5 6 7 8 9
Cの形式に変わっていますね。ちなみにfoldへの数値指定を3にすると以下のようになります。
1 4 7
2 5 8
3 6 9
黒点数の推移を調べる
実践的な話題で、データの折り返しを使ってみましょう。最近、太陽の黒点数が減少しており、気候変動の可能性が指摘されていますが、ここに太陽の黒点数を調べたデータがあります。ファイル名をdata.txtとします。
127
102
109
127
106
112
93
99
86
95
83
ある年の1月から12月までの平均黒点数を記録したものですが、グラフにすると黒点数は下降気味です。といっても、100以上あるので太陽が活発な時期の計測です。
>xyp -x,12 -y,150 -s3,50 -m <tmp
^y 150
|
| * *
| * *
- * * *
| * * *
| * *
|
|
-
|
|
|
| x
|o 12
+--------|---------|---------|--------->
rpn式の「rpn @x 1 + #x @x x」はdata.txtのデータに1から始まる行番号を付けています。tmpファイルには以下のようなデータが格納されます。
2 127
:
(中略)
:
11 95
12 83
rpn式の動作を理解したい方は、rpn基礎のプログラムで計算しようとデータを転がして計算しようをご覧ください。rpnの動作について分かりやすく説明してあります。より詳しくrpnについて知りたい方は、rpn入門も参考にしてください。
行番号を付加したデータをxypに読み込ませて、x軸が最大12、y軸が最大150のグラフを描かせています。xypを使って描いたグラフは、文字を使ったグラフなので多少歪んで見えます。頭の中のイメージでグラフの傾向を読み取ってみてください。
xypは文字でグラフ表示するrpnの姉妹ソフトウェアです。xypの簡単な説明は姉妹ソフトウェアにありますので、興味のある方は参照ください。
季節ごとの黒点数を計算
さて、データを1月から3月、4月から6月、7月から9月、10月から12月の3ヶ月ごとの期間に分けて合計と平均を出したいとします。こんなときにfoldが役に立ちます。まず、縦一列のデータを横一行のデータに変更します。
111 127 102 109 127 106 112 93 99 86 95 83
次にfold'を使って3ヶ月ごとにデータを折り返します。先ほどのrpn式にfoldを繋げます。
111 127 102
109 127 106
112 93 99
86 95 83
これで、データは一行で3ヶ月ごとに区切られました。横方向に合計を計算したいので、3つのデータを足し合わせます。rpnの計算式を最後に繋げます。
340
342
304
264
3ヶ月ごとの合計値が計算できましたね。3で割ってあげると平均が計算されます。
113.333
114
101.333
88
3ヶ月平均でも微減傾向です。黒点数が偶然に少なくなっているというよりは、減少傾向にあると考えるのが妥当ですね。
ちなみに、これらの計算はカンタン分析パッケージを使うともっと楽に答えが出ます。
fold'は150個の数値、foldは1000個の数値程度を目安に使用してください。
本講座で使用したプログラムは、ユーティリティーパッケージとして購入することができます。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。