統計学とプログラミング:平均と分散
平均と分散、さらに代表値の例と標準偏差について書きます。
データ
テストの得点を想定して、numpyで0~100までの乱数を用意します。
個の値をとおきます。
# 乱数初期化 np.random.seed(0) # scoresに0~100までの整数100個を格納 scores = np.random.randint(0, 101, 100)
中身を確認します。
scores
# 出力 array([ 44, 47, 64, 67, 67, 9, 83, 21, 36, 87, 70, 88, 88, 12, 58, 65, 39, 87, 46, 88, 81, 37, 25, 77, 72, 9, 20, 80, 69, 79, 47, 64, 82, 99, 88, 49, 29, 19, 19, 14, 39, 32, 65, 9, 57, 32, 31, 74, 23, 35, 75, 55, 28, 34, 0, 0, 36, 53, 5, 38, 17, 79, 4, 42, 58, 31, 1, 65, 41, 57, 35, 11, 46, 82, 91, 0, 14, 99, 53, 12, 42, 84, 75, 68, 6, 68, 47, 3, 76, 100, 52, 78, 15, 20, 99, 58, 23, 79, 13, 85])
平均
算術平均 (mean)
よくと書かれます。
C言語
配列の中を全て足し、個数で割り算します。
// count: 要素の個数 // array: 得点の配列 double mean(int count, int* array){ double sum = 0; // 各値について for(int i = 0; i < count; i++){ // sumに足し算する sum += (double)array[i]; } // 個数で割り算する return sum / (double)count; }
中央値 (median)
中央値は平均値と違い、外れ値(集団と大きく離れた値)の影響を受けにくいです。
例えば、年収の分布であれば、大金持ちが少数含まれていることが想定できる場合、平均値だけでなく中央値も確認したいところです。
np.median(scores)
# 出力 47.0
分散 (variance)
よくと表される分散は、次の式で求められます。
C言語
各値に対し、平均との差分を2乗して合計し、個数で割り算します。
// count: 要素の個数 // array: 得点の配列 double variance(int count, int* array){ // 平均を求める double x_mean = mean(count, array); double sum = 0; // 各値についてsumに足し算していく for(int i = 0; i < count; i++){ // 平均との差分を求める double x_diff = (double)array[i] - x_mean; // 2乗する sum += x_diff * x_diff; } // 個数で割り算する return sum / (double)count; }
標準偏差
C言語
// count: 要素の個数 // array: 得点の配列 double standardDeviation(int count, int* array){ // 分散の平方根を計算 return sqrt(variance(count, array)); }
偏差値得点
平均を50とするもので、よく学力試験でよく見られるものですが、今まで求めた平均と標準偏差を用いて、偏差値得点を
とします。標準偏差が約28.7だったので、平均48.75から28.7離れると、偏差値得点が10変わることになります。
10 * (scores - scores.mean()) / scores.std() + 50
# 出力 array([48.34472415, 49.39016153, 55.31430666, 56.35974404, 56.35974404, 36.14795476, 61.93541005, 40.32970427, 45.55689115, 63.32932655, 57.40518142, 63.67780568, 63.67780568, 37.19339214, 53.22343191, 55.66278579, 46.60232853, 63.32932655, 49.0416824 , 63.67780568, 61.2384518 , 45.90537027, 41.72362077, 59.8445353 , 58.10213967, 36.14795476, 39.98122514, 60.88997267, 57.05670229, 60.54149355, 49.39016153, 55.31430666, 61.58693092, 67.51107606, 63.67780568, 50.08711978, 43.11753727, 39.63274602, 39.63274602, 37.89035039, 46.60232853, 44.16297465, 55.66278579, 36.14795476, 52.87495279, 44.16297465, 43.81449552, 58.79909792, 41.02666252, 45.20841202, 59.14757705, 52.17799453, 42.76905814, 44.8599329 , 33.01164263, 33.01164263, 45.55689115, 51.48103628, 34.75403826, 46.2538494 , 38.93578776, 60.54149355, 34.40555913, 47.6477659 , 53.22343191, 43.81449552, 33.36012176, 55.66278579, 47.29928678, 52.87495279, 45.20841202, 36.84491301, 49.0416824 , 61.58693092, 64.72324305, 33.01164263, 37.89035039, 67.51107606, 51.48103628, 37.19339214, 47.6477659 , 62.28388918, 59.14757705, 56.70822317, 35.10251738, 56.70822317, 49.39016153, 34.05708001, 59.49605617, 67.85955518, 51.13255716, 60.19301442, 38.23882951, 39.98122514, 67.51107606, 53.22343191, 41.02666252, 60.54149355, 37.54187126, 62.6323683 ])