クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

平均と標準偏差の求め方

このレッスンのあとで: データの中心とばらつきを、平均と標準偏差で表すことができる。

50分のレッスンコマンド2件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

ふつうの日は何台か

平均、中央値、標準偏差は、たくさんの数を少ない数字で言い表す道具です。これを使うと、データを全部読まなくても、「ふつう」と「ばらつき」を人に伝えられます。

貸し自転車の店は、1年で365日分の貸出台数を持っています。店長が知りたいのは、ふつうの日が何台か、日によってどれだけ違うかです。

このレッスンのゴール

メモ

データの中心とばらつきを、平均と標準偏差で表すことができる。

キーワード

ことばいみれい
平均全部を足して、個数で割った値
中央値小さい順に並べたときの、真ん中の値
最頻値いちばん多く出てくる値
範囲最大の値から最小の値を引いたもの
分散平均との差を2乗して、その平均を取った値
標準偏差分散の平方根。元のデータと同じ単位で読む分散 16 なら 4

学生が入力するセルは、このプレビューでは空白です。

中心を表す3つの値

データの「中心」は、1つの値で言い表します。平均は全部を足して個数で割ります。中央値は小さい順に並べた真ん中、最頻値はいちばん多い値です。

外れた日が1日あると、3つはどう変わるでしょうか。次の表で確かめます。

例: 5日間の貸出台数

求めるもの計算結果
データ120、150、180、150、4005日分
平均合計 1000 ÷ 5200
中央値並べる: 120 150 150 180 400150
最頻値150 が2回150

学生が入力するセルは、このプレビューでは空白です。

平均と中央値を計算する

コード: python
# 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-39
8-11
900
1011
1239
合計020
分散20 ÷ 54
標準偏差4 の平方根2

学生が入力するセルは、このプレビューでは空白です。

分散を関数で計算する

コード: python
# 平均はどちらも 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))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

さらに挑戦: 週末と平日

ノートブックで、週末と平日に分けて、貸出台数の平均と標準偏差をそれぞれ求めてください。

週末の平均は平日より高いはずです。ばらつきは同じくらいでしょうか。見つけたことを、一文で書きましょう。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。