「物理システム工学基礎実験I」データ処理法

「物理システム工学基礎実験I」の「誤差の統計的性質」の測定データ処理の 手順について示します。

1. 作成用ディレクトリの作成

データ処理作業に関連するファイルがいろいろな場所に 散乱しないよう、この作業用のディレクトリを作成する。

$ cd <---- ホームディレクトリに移動
$ mkdir gosa <---- "gosa"というディレクトリを作成(名前は 何でもよい)
$ cd gosa <---- "gosa"に移動

2. データ処理用ソフトのソースファイル作成

「テキストエディット」などで、データ処理ソフトのソースファイルを作成す る。内容は、n個(例えば5個)のデータをキーボードから入力しその平均を画面 に出力する。「for」を用いた繰り返しと、「printf」「scanf」を用いた入出 力関数を用いるとよいでしょう。

なお、基礎実験の教科書にあるように、平均をとる個数としてはn=5, 10, 15, 20, 30, 40, 60 80, 100の10通りなので、プログラムのソース中で、一カ 所だけ書き換えれば個数を代えられるように工夫をしておきましょう(2個所 以上書き換える必要がある場合、どこかを書き換え忘れる可能性が必ず生じま す。)

作成したファイ ルは''gosa''ディレクトリに保存すること。また、ファイルは「標準テキス ト」のフォーマットで作成し(「リッチテキスト」にしないこと)、日本語エ ンコーディングは「Unicode (UTF-8)」にすること(「日本語(Mac OS)」にしな い)。 ファイル名は日本語を用いずにアルファベットのみにしておくほうが便利であ る。また、C言語のソースファイルとして、拡張子は「.c」を用いる。 例えば、「data-proc5.c」など。

3. ソースのコンパイル

ソースをコンパイルして、実行ファイル(バイナリファイル)を作成する。 手順は、「Cのソースのコンパイル法」3-6を参照。

4. 実行ファイルの動作確認

作成した実行ファイルが動くか確認する。

$ ./a.out

「データ入力+リターン」を5回繰り返し、平均値が出力されればOK。

5. データファイルの作成

以前エクセルで作成した誤差の実験データをエクセルで開く。次に、テキスト エディットを起動する。エクセルに戻って、入力した誤差のデータ(最も左側 の列のはず。)を、マウスでドラッグして選択し、その後右クリックのメニュー からコピーを選択する。テキストエディットに移り、右クリックメニューから ペーストを選択して張り付ける。テキストエディットから「別名で保存」から 適切なファイル名(「error.tmp」など。日本語は避ける。)で保存する。保存 後はエクセルおよびテキストエディットは終了してよい。「error.tmp」を保存 したディレクトリに移動し、改行コードを変更する、以下の命令を実行する。

cat error.tmp | tr '^M' '\n' 1> data
上の命令の'^M'の部分は、キーボードの'^'と'M'を入力したものではなく、コ ントロールキーを押したまま、続けて'v'と'm'を押すと入力される、特種記号 である。

ちゃんと600個のデータが入力されたかは、「cat -n」(いろいろなコマンド一覧の「その他tips」参照)を 利用するとわかる。

cat -n data

6. 作成した「平均値」プログラムでデータファイルを処理してみる

4. で作成した「平均値」プログラムを用いて今作成したデータファイルを処 理してみる。キーボードから入力する代りにファイルからプログラムに入力す るためには、リダイレクトその2(「データ処 理で用いるTips」)を利用すればよい。
$ ./a.out < data

結果として、データファイルの先頭から5個目までのデータの平均値が出力さ れればOK。逆にいえば、この手順では6個目以降のデータは処理されない。

7. データファイルの小分け

6. の手順では最初の5個のデータだけが処理される。全てのデータを処理した い場合には、元のデータファイルを、「5個のデータのみを含む小さなファイ ル」に小分けすればよいことがわかる。そこで、ファイルを分割するプログラ ム「「split」(「データ処理で用いる tips」-大きなデータの分割-)をもちいる。
(1) 小分けしたデータが散らばらないように、小分けデータをおくディレクト リをつくる。
$ mkdir detanumber5
(2) そのディレクトリに移動
$ cd detanumber5
(3) データを分割
$ split -l 5 ../data data5

こうすると、「data5aa」、「data5ab」、「data5ac」・・・の様に小分けし たファイルに分割される。上で、「../data」は、データファイルである 「data」は、カレントディレクトリの「gosa/datanumber5」にあるのではなく、 「datanumber5」ディレクトリを含む「親ディレクトリ(../)」に置いてある ためである。

小分けしたファイルができているか、「ls」や「more」で確認せよ。

8. 小分けしたデータの処理

小分けしたデータ各々について、処理プログラムを実行させれば5個毎の平均 値を求められる。

$ ../a.out < data5aa
$ ../a.out < data5ab
$ ../a.out < data5ac
$ ../a.out < data5ad


さっき作成した実行ファイル「a.out」は親ディレクトリにあることに注意 (なので、「../a.out」としないと、「No such file or directory」となる。) 上の様に実行すると、結果は画面に出力される。

画面に出力された結果をいちいち記録するのが面倒くさければ、適当な名前の ファイル(「kekka5」など)に(リダイレク トすればよい。「データ処理で用いるTips」)

$ ../a.out < data5aa 1>> kekka5
$ ../a.out < data5ab 1>> kekka5
$ ../a.out < data5ac 1>> kekka5
$ ../a.out < data5ad 1>> kekka5


できた結果ファイル「kekka5」の中身をmore等で確認してみよ。

9. データ処理の自動化

8. の処理をやってみるとわかるが、同じような処理を延々と繰り返しているだけで非常 に面倒くさい。こんな単純作業はコンピュータにやらせよう。データ処理で用いるTips「たくさんのデータに一 挙に処理をしたいとき」に示した方法で処理を自動化する。

(注: 8. でつくったファイル「kekka5」を前もって削除しておくこと(rm kekka)。そうしないと、以下では、8. で書き込んだ結果の後ろに処理結果が 追記されることとなる。)

$ for name in data5*
> do
> ../a.out < $name 1>> kekka5
> done

できたファイル「kekka5」の中身を「more」または「less」で確認してノート に記録しよう。

10. 様々な個数に対するのデータ処理

平均をとる「個数」を変えて処理を行う。「2. データ処理ソフトのソースファ イル作成」に戻り、平均をとる「個数」を変更してコンパイルする。

以後、n=10, 15, 20, 30, 40, 60 80, 100について、「7-9」の処理を行う。