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 平均値の計算例

Example 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 に格納している。

Tip

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

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

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

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

Example 8.2 my_mean() という関数を定義し、data というリストを引数として受け取り、そのデータの平均値 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
Tip

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 練習問題

Exercise 8.1 データが以下のように与えられたとする。このとき、平均点、中央値、最頻値をそれぞれ python で計算せよ。

import statistics

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

Exercise 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)

# ここにコードを書く

Exercise 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. モードは最頻値のほかに、流行、様式、状態などの意味もある。↩︎