統計処理1

統計処理
統計とは:集団の個々の構成要素の分布を調べ、その集団の属性を数量的に把握すること。
また、その結果を数値や図表で表現したもの。(大辞泉より)
ここでは,基本的な統計処理を取り扱う。
1.基本統計量
分布の中心に関する指標
平均値:データの合計÷データの個数。分布の重心でもある。
中央値(メジアン)
:データを降順(あるいは昇順)にならべたとき,真ん中に位
置するデータの値。
最頻値(モード)
:頻度のもっとも多いデータの値。
分布の広がりに関する指標
範囲:データの最大値と最小値の差。
分散:
(データ - 平均)2 の平均
または,
データ 2 の平均 - 平均 2
(この 2 つの量は同じもの。プリント最後尾参照)
標準偏差:分散の平方根。データと同じ単位を持った量になる。
2.例
toukei_kiso.c
1 //経営システム学科2年A組99番 金沢太郎
2 #include <stdio.h>
3 #include <math.h>
4 void main() {
5
double sintyo, taiju;
6
double s_sum = 0, s_var = 0, s_ave, s_max=0, s_min=300;
7
int cnt = 0;
8
FILE *fp;
9
10
printf("
身長 体重\n");
11
fp = fopen("toukei_data.csv", "r");
12
while (fscanf(fp, "%lf,%lf\n", &sintyo, &taiju) != EOF) {
13
printf("
%6.1f %6.1f\n", sintyo, taiju);
14
cnt++;
15
s_sum += sintyo;
16
s_var += sintyo*sintyo;
17
if (sintyo > s_max) s_max = sintyo;
18
if (sintyo < s_min) s_min = sintyo;
19
}
1
20
21
22
23
24
25
26
27
28
29
30
31 }
fclose(fp);
s_ave = s_sum/cnt;
s_var = s_var/cnt - s_ave*s_ave;
printf("-----------------------------\n");
printf("最大
%6.1f\n", s_max);
printf("最小
%6.1f\n", s_min);
printf("平均
%6.1f\n", s_ave);
printf("分散
%6.1f\n", s_var);
printf("標準偏差%6.1f\n", sqrt(s_var));
printf("範囲
%6.1f\n", s_max - s_min);
3 行目:sqrt(平方根の計算する関数)を使用するときに必要
6 行目:身長の最大値の初期値(0)最小値の初期値(300)を設定
8 行目:ファイル構造体 fp の宣言
11 行目:ファイル(toukei.csv)を読み込みモード(r)で開く
12-19 行目:toukei.csv から身長と体重のデータを読み込みで処理するプロセス
12 行目:データを読みきるまで繰り返す。(EOF は End Of File の略)
%lf,%lf\n ⇒ 実数データ,実数データ改行
の書式のデータを想定
14 行目:データ数のカウント
15 行目:身長の足し上げ (s_sum = s_sum + sintyo; と同じ)
16 行目:身長 2 の足し上げ
(s_var = s_var + sintyo*sintyo; と同じ)
17 行目:身長の最大値の計算
18 行目:身長の最小値の計算
21 行目:身長の平均値の計算
22 行目:身長の分散の計算
※分散の計算について
データ x の平均を<x>と書く。
分散=<(x-<x>)2>
=<x2-2x<x>+<x>2>
=<x2>-2<x>2+<x>2
=<x2>-<x>2
2