8  代表値

データの中心的傾向を表す数値を代表値という 1.平均値,中央値,最頻値などがよく知られている代表値である.代表値はデータの特徴を示す最も基本的な統計量である.

8.1 平均値

データの傾向を示すために最もよく使われる代表値は平均値である.平均値は,データの総和をデータの個数で割った値である.母集団の平均値を母平均,標本の平均値を標本平均という.一般に,\mu は母平均,\bar{x} は標本平均を表す 2

n 個のデータ x_1, x_2, \ldots, x_n があるとする.このとき,標本平均 \bar{x} は以下の式で表される.

\bar{x} = \frac{x_1 + x_2 + \cdots + x_n}{n} = \frac{1}{n} \sum_{i=1}^{n} x_i

8.1.1 平均値の計算例

例 8.1 学生の四人のテストの点数がそれぞれ80点,93点,75点,88点であったとする.

このとき,平均点は以下のように計算される.

\bar{x} = \frac{80 + 93 + 75 + 88}{4} = \frac{336}{4} = 84

Python で計算する場合,以下のようにコードを書くことができる.

scores = [80, 93, 75, 88]
mean_score = sum(scores) / len(scores)
print("平均点:", mean_score)
平均点: 84.0

scores は学生の点数を格納したリストである.sum(scores) はリスト内の全ての点数の合計を計算し,len(scores) はリスト内の要素数(学生の人数)を返す.これらを使って平均点を計算し,mean_score に格納している.

ヒントChatGPT にコードの説明を求める

ソースコードがわからない場合は,それをコピーして ChatGPT に貼り付けて,説明を求めるとよい.例えば,以下のように質問する.

私は python を勉強している初心者です。
このコードは何をしていますか?わかりやすく説明してください。

scores = [80, 93, 75, 88]
mean_score = sum(scores) / len(scores)
print("平均点:", mean_score)

8.1.2 平均値の計算アルゴリズム

例 8.2 data というリストを引数として受け取り,そのデータの平均値 mean を計算して返す関数 my_mean() は,次のように定義できる.

def my_mean(data):
    mean = sum(data) / len(data)
    return mean

data = [80, 93, 75, 88]
print("平均点:", my_mean(data))

8.1.3 statistics モジュールの利用

statistics モジュールの mean 関数を使うと,平均値を簡単に計算できる.以下に例を示す.

import statistics

scores = [80, 93, 75, 88]
mean_score = statistics.mean(scores)
print("平均点:", mean_score)
平均点: 84
ヒントPython のライブラリ

Python はさまざまなライブラリを提供している.これらのライブラリを活用することで,統計量の計算やデータ分析が容易になる.

8.2 中央値

データを大きさの順に並べたとき,中央に位置する値を中央値という.

データの個数が奇数の場合は中央の値が中央値となる.例えば,1, 3, 5 の中央値は 3 である.

データの個数が偶数の場合は,中央に位置する2つの値の平均が中央値となる.例えば,1, 3, 5, 7 の中央値は (3 + 5) / 2 = 4 である.

Python で中央値を計算する場合,statistics モジュールの median 関数を使うとよい.以下に例を示す.

import statistics

data = [1, 3, 5, 7]
median = statistics.median(data)
print("中央値:", median)
中央値: 4.0

8.3 最頻値

データの中で最も頻繁に出現する値を最頻値という.最頻値はモード(mode)とも呼ばれる 3

例えば,1, 2, 2, 3, 4 の最頻値は 2 である.

Python で最頻値を計算する場合,statistics モジュールの mode 関数を使うとよい.以下に例を示す.

import statistics

data = [1, 2, 2, 3, 4]
mode = statistics.mode(data)
print("最頻値:", mode)
最頻値: 2

8.4 練習問題

練習 8.1 データが以下のように与えられたとする.このとき,平均値,中央値,最頻値をそれぞれ Python で計算せよ.

import statistics

data = [4, 5, 5, 6, 7, 8, 9]
# ここにコードを書く

練習 8.2 以下のコードは,アヤメの花データセットを読み込み,「Iris setosa」の花弁の長さ(petal length)の平均値,中央値,最頻値を計算するものである. 50 個の Iris setosa の花弁の長さのデータは petal_length_setosa に格納されている.コードを完成させ,平均値,中央値,最頻値をそれぞれ計算せよ.

from sklearn.datasets import load_iris
import statistics

data = load_iris()
data_setosa = data.data[data.target == 0]  # Iris setosa のデータ
petal_length_setosa = data_setosa[:, 2]  # 花弁の長さ
print("花弁の長さ:", petal_length_setosa)

# ここにコードを書く

練習 8.3 (中央値の計算アルゴリズム) 中央値を計算するアルゴリズムは以下の通りである.

  1. データを昇順にソートする.
  2. データの個数が奇数か偶数かで場合分けする.
    1. 奇数の場合は中央の値を返す.
    2. 偶数の場合は中央の2つの値の平均を返す.

my_median() という関数を定義し,data というリストを引数として受け取り,そのデータの中央値 median を計算して返すようにせよ.なお,data_sorted には data を昇順にソートしたリストが格納されているものとする.

def my_median(data):
    data_sorted = sorted(data)
    # ここにコードを書く
    return median

data_1 = [1, 3, 5, 7]
print("中央値:", my_median(data_1))

data_2 = [1, 3, 5, 7, 9]
print("中央値:", my_median(data_2))

  1. 英語では 「measure of central tendency」 と呼ばれ,直訳すると「中心傾向の尺度」となる.↩︎

  2. ギリシャ文字の \mu は「ミュー」と読み,英語の “mean” の頭文字に由来する.\bar{x} は「エックスバー」と読む.英語では “x-bar” と読む.↩︎

  3. モードは最頻値のほかに,流行,様式,状態などの意味もある.↩︎