見出し画像

23/10/14 平均・分散・標準偏差を求めるプログラム【1var.c】

こんにちは、とある現役高専生です。
最後のブログ更新が今年の6月ということでしばらく空いてしましました。
また、プログラミング関連に関してはかなりの期間が空いてしまい申し訳ございません。
今回は高専生、確率統計を学ぶ方、プログラミングに興味のある方向けにブログを作成しています。
それでは本題に行きます。

高専では3年生になると、「新確率統計」という教科書を使った科目が始まります。
日常生活には欠かすことのできない確率統計学を学ぶための科目です。
しかし、確率単体ならまだしも統計やデータ分析の分野になるととてつもなく多大な量の数値やデータを必要とします。
また、それらのデータから「平均」「分散」「標準偏差」を求めたりするわけですが、特に分散の計算がとてつもなく大変です。
このような学生たちが計算で時間を奪われるのを防ぐため、今回は1次元データを簡単に処理するプログラムを書いたので紹介していきます。
(2次元のデータは次回のブログで紹介します。)

教科書「新確率統計 改訂版」P.28 ~ の内容です。

図1 使用する教科書


1. プログラム(コード)のダウンロードと注意事項

まず今回のプログラムはC言語で作成しています。
ダウンロードは以下のリンクからどうぞ!
https://drive.google.com/drive/folders/1-5HhVhC1TDfC22Gav0cmP6rZuWV4FmI9

【注意事項】
こちらはC言語で作成しており、Linux環境でのコンパイルが必要となります。 コンパイルの際、末尾に「-lm」と記載することをお願いします。
(理由 : math.h を使用しているため)

例 :

 $ gcc 1var.c -o 1var.out -lm

一応ここでもプログラムを記載しておきます。

#include<stdio.h>
#include<math.h>
#define MAX 1000
int main(){
    int i=0, j; //sum1:平均 , sum2:分散, sum3:標準偏差
    double a[MAX], sum1=0, sum2=0, sum3=0;
    printf("分散 / 標準偏差 を求めます.\n 0を入れると計算開始します.\n");
    for(i=0; i<MAX; i++){
        printf("a[%d]を入力 : ", i);
        scanf("%lf", &a[i]);
        if(a[i]==0){
            j = i;
            break;
        }
    }
    //平均
    for(i=0; i<j; i++){
        sum1 = sum1 + a[i];
    }
    sum1 = sum1 / i;
    printf("平均 : %lf\n", sum1);

    //分散
    for(i=0; i<j; i++){
        sum2 = sum2 + pow(a[i]-sum1, 2);
    }
    sum2 = sum2 / j;
    printf("分散 : %lf\n", sum2);

    //標準偏差
    sum3=sqrt(sum2);
    printf("標準偏差 : %lf\n", sum3);
    return 0;
}

2. プログラムコードの紹介

今回のプログラムでは1次元データの「平均」「分散」「標準偏差」を求めるように作っています。
それぞれの計算の仕方を見ていきましょう!

//平均
    for(i=0; i<j; i++){
        sum1 = sum1 + a[i];
    }
    sum1 = sum1 / i;
    printf("平均 : %lf\n", sum1);
//分散
    for(i=0; i<j; i++){
        sum2 = sum2 + pow(a[i]-sum1, 2);
    }
    sum2 = sum2 / j;
    printf("分散 : %lf\n", sum2);
//標準偏差
    sum3=sqrt(sum2);
    printf("標準偏差 : %lf\n", sum3);

公式などについては詳しく説明しませんが、平均が一番シンプルで「合計÷個数」ですね!
for文で入力された値の合計をし、最後にそれらの個数で割ります。
分散は教科書やネットで調べてもらうと分かるのですが、少し式が複雑です。
最後に標準偏差は分散の√をすれば出ます!
ただこれらの公式に当てはまる計算の仕方をしているだけです。

3. 実行してみた!

最後に実際に動かしているところを見てみましょう!
コンパイルして、実行すると~…

図2 実行結果_1

このような文字が出てきます!
ここで数値を入力していきます。
例えば、データ[10, 30, 50, 70]というものがあったとします。
今回はこれの平均・分散・標準偏差を求めます。
このデータの場合入力は図3のようになります。

図3 実行結果_2

a[0]から順に[10, 30, 50, 70]を入力していくのですが、ここでこのプログラムの注意点として、入力し終わったら最後に「0」と入力してください。
この「0」が入力されたら、それより前に入力された値(今回だと10, 30, 50, 70)の平均・分散・標準偏差を計算してくれます。

そして図3にもあるように計算結果が出ます。
無事に平均・分散・標準偏差を求めることができました!
不安な方は一度計算機を片手に検算してみてください。
※標準偏差は四捨五入されます。

次回は「2次元のデータ」に対応したプログラムを紹介します。
要するに「x , y」のデータですね!

ということで今回はここまでです。
最後まで読んで頂きありがとうございました!

この記事が気に入ったらサポートをしてみませんか?