第30章 超簡単統計プログラムを作ろう  


今回は、統計の基礎の基礎とも言うべき合計、平均、 分散を求めるプログラムを考えてみます。 その前に、平均とは合計を個数で割ったものです。 分散は、それぞれの値から平均を引いたものを2乗した 合計です。

わかりにくい!もっと簡単に説明しろ!

はい。

平均 AV = (X1+X2+....+Xn)/n 分散 sg = ((X1-AV)2+(X2-AV)2+....+(Xn-AV)2)/n = (X12+X22+....+Xn2)/n - AV2

分散が、どうして下のように変形できるかは、統計の本などを見てください。 筆者は昔はわかっていたが、今はわかりません。なお、分散の平方根を取ると 標準偏差になります。

では、どのようにプログラムを作るか考えてみましょう。 データの個数は何個あるかはわかりません。データを入力していき 全部入れ終わったら「E」を入力することにします。 入力を求めて、合計を求めるところは無限ループにして、 「E」入力が来たら、ループ脱出。 一応、データは文字列として入力しあとから数値に変換しましょう。 合計は、sum += data; の形で求めましょう。2乗はpow()関数を 使います。平方根は、sqrt()関数を使います。 これで、何となくプログラムができますね。

#include <stdio.h> #include <math.h> #include <string.h> int main(void) { int n; double sum, xsum, av, sg, sd; char data[64]; n = 1; sum = 0.0; xsum = 0.0; while(1) { printf("data[%3d]=", n++); scanf("%s", data); if (strcmp(data, "E") == 0) break; sum += atof(data); xsum += pow(atof(data), 2.0); } n -= 2; av = sum / n; sg = xsum / n - pow(av, 2.0); sd = sqrt(sg); printf("\nデータの個数=%d\n", n); printf("合計 =%f\n", sum); printf("平均 =%f\n", av); printf("平方和 =%f\n", xsum); printf("分散 =%f\n", sg); printf("標準偏差 =%f\n", sd); return 0; }

これを実行してみましょう。

このプログラムは、1度結果を表示してしまうとそれで 終了します。最後に「もう一度計算しますか」と表示して yを入力したら、もう一度データ入力に戻るようにしてください。 また、データ入力が終了したとき、「E」を入力するのではなく リターンキーを押すだけでよいように作り替えてください。 また、データを打ち間違えたときリターンキーを押してしまうと データの修正ができません。あとからデータの修正ができるように プログラムを作り直してください。

以上のことがすらすらできたら、超初心者の中では「中の下」くらい には、入れるでしょう。初心者になる道のりはまだ、遠く険しいのです。


[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Nov/23/1996 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。