ふつうの日は何台か
平均、中央値、標準偏差は、たくさんの数を少ない数字で言い表す道具です。これを使うと、データを全部読まなくても、「ふつう」と「ばらつき」を人に伝えられます。
貸し自転車の店は、1年で365日分の貸出台数を持っています。店長が知りたいのは、ふつうの日が何台か、日によってどれだけ違うかです。
このレッスンのゴール
メモ
データの中心とばらつきを、平均と標準偏差で表すことができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 平均 | 全部を足して、個数で割った値 | |
| 中央値 | 小さい順に並べたときの、真ん中の値 | |
| 最頻値 | いちばん多く出てくる値 | |
| 範囲 | 最大の値から最小の値を引いたもの | |
| 分散 | 平均との差を2乗して、その平均を取った値 | |
| 標準偏差 | 分散の平方根。元のデータと同じ単位で読む | 分散 16 なら 4 |
学生が入力するセルは、このプレビューでは空白です。
中心を表す3つの値
データの「中心」は、1つの値で言い表します。平均は全部を足して個数で割ります。中央値は小さい順に並べた真ん中、最頻値はいちばん多い値です。
外れた日が1日あると、3つはどう変わるでしょうか。次の表で確かめます。
例: 5日間の貸出台数
| 求めるもの | 計算 | 結果 |
|---|---|---|
| データ | 120、150、180、150、400 | 5日分 |
| 平均 | 合計 1000 ÷ 5 | 200 |
| 中央値 | 並べる: 120 150 150 180 400 | 150 |
| 最頻値 | 150 が2回 | 150 |
学生が入力するセルは、このプレビューでは空白です。
平均と中央値を計算する
# 5日間の貸出台数です。
days = [120, 150, 180, 150, 400]
mean = sum(days) / len(days)
ordered = sorted(days)
median = ordered[len(ordered) // 2]
print("平均:", mean)
print("中央値:", median)
# 400 を 200 に変えて、もう一度実行してください。
# 変わるのは、平均と中央値のどちらですか。
1年分の中心を調べる
docker exec jupyter python3 -c "import csv, statistics as s; h = [int(r['hires']) for r in csv.DictReader(open('hires.csv'))]; print(len(h), round(s.mean(h), 1), s.median(h))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
多くの人は、平均がいつも「ふつうの日」を表すと考えます。400台の日が混じると、平均はどの日にも近くない数になります。データが偏っているときは、中央値も並べて伝えてください。
ばらつきは平均との差で測る
同じ平均でも、毎日ほぼ同じ店と、日によって大きく違う店があります。範囲は最大から最小を引いた値で、たった2日で決まります。
分散は、平均との差を2乗して、その平均を取ります。標準偏差は分散の平方根で、元と同じ単位で読めます。
例: 気温5日分の分散
| 気温 | 平均 9 との差 | 差の2乗 |
|---|---|---|
| 6 | -3 | 9 |
| 8 | -1 | 1 |
| 9 | 0 | 0 |
| 10 | 1 | 1 |
| 12 | 3 | 9 |
| 合計 | 0 | 20 |
| 分散 | 20 ÷ 5 | 4 |
| 標準偏差 | 4 の平方根 | 2 |
学生が入力するセルは、このプレビューでは空白です。
分散を関数で計算する
# 平均はどちらも 9 で、ばらつきが違う2つのデータです。
a = [6, 8, 9, 10, 12]
b = [3, 7, 9, 11, 15]
def spread(values):
mean = sum(values) / len(values)
total = 0
for v in values:
total = total + (v - mean) ** 2
return total / len(values)
print("a の分散:", spread(a))
print("b の分散:", spread(b))
# b の 15 を 9 に変えて、b の分散を予想してから実行してください。
1年分のばらつきを調べる
docker exec jupyter python3 -c "import csv, statistics as s; h = [int(r['hires']) for r in csv.DictReader(open('hires.csv'))]; print(max(h) - min(h), round(s.pvariance(h)), round(s.pstdev(h), 1))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
さらに挑戦: 週末と平日
ノートブックで、週末と平日に分けて、貸出台数の平均と標準偏差をそれぞれ求めてください。
週末の平均は平日より高いはずです。ばらつきは同じくらいでしょうか。見つけたことを、一文で書きましょう。