Python statistics.median()とは?中央値を求める方法

Pythonのstatistics.median()は、データを小さい順に並べたときの真ん中の値(中央値)を求める関数です。

平均と違って外れ値の影響をほとんど受けないため、偏りのあるデータの実態をつかむのに向いています。


statistics.median()の基本的な使い方

import statistics

print(statistics.median([1, 3, 5]))
print(statistics.median([1, 3, 5, 7]))

実行結果:

3
4.0
  • 奇数個:真ん中の値をそのまま返す
  • 偶数個:真ん中2つの平均を返す

2つ目は(3 + 5) / 2 = 4.0です。


並べ替えは自動で行われる

import statistics

print(statistics.median([5, 1, 3]))
print(statistics.median([1, 3, 5]))

実行結果:

3
3

事前にsort()する必要はありません。また、元のリストは変更されません。


偶数個だと元データにない値が返る

見落としやすい点です。

import statistics

print(statistics.median([1, 2, 3, 10]))

実行結果:

2.5

2.5というデータは元のリストに存在しません。「実在する代表値」が欲しい場面では困ります。

そのときはmedian_low()とmedian_high()を使います。

import statistics

data = [1, 2, 3, 10]

print("low   :", statistics.median_low(data))
print("high  :", statistics.median_high(data))
print("median:", statistics.median(data))

実行結果:

low   : 2
high  : 3
median: 2.5
関数 偶数個のとき 奇数個のとき
median() 真ん中2つの平均 真ん中の値
median_low() 小さいほうを返す 真ん中の値
median_high() 大きいほうを返す 真ん中の値

数値以外にも使える|median_low()

import statistics

print(statistics.median_low(["a", "b", "c", "d"]))

実行結果:

b

文字列でも大小比較ができれば動きます。一方、median()は平均を取ろうとするためエラーになります。

statistics.median(["a", "b", "c", "d"])

実行結果:

TypeError: unsupported operand type(s) for /: 'str' and 'int'

順序はあるが平均が意味をなさないデータ——評価ランク、サイズ、日付などではmedian_low()が使えます。


空のデータはエラー

statistics.median([])

実行結果:

StatisticsError: no median for empty data

中央値が平均より優れている場面

import statistics

salaries = [300, 320, 310, 330, 10000]

print("平均  :", statistics.mean(salaries))
print("中央値:", statistics.median(salaries))

実行結果:

平均  : 2252
中央値: 320

5人中4人が300台なのに、平均は2252です。「平均年収」が実感と合わない理由がこれです。

次のようなデータでは、中央値を併記してください。

  • 年収・世帯資産:上位が極端に大きい
  • ページ滞在時間:タブを開きっぱなしの記録が混ざる
  • レスポンスタイム:まれに数十秒かかる
  • 売上:一部の大口顧客が全体を歪める

逆に、身長やテストの点数のように極端な値が出にくいデータでは、平均のほうが情報量があります。平均はすべての値を反映しますが、中央値は順番しか見ないためです。


平均と中央値の比較

項目 mean() median()
計算方法 全部足して割る 並べて真ん中を取る
外れ値 大きく影響される ほとんど影響されない
すべての値を反映 する しない
向くデータ 左右対称な分布 偏った分布

平均については「Python statistics.mean()とは?平均値を求める方法」で解説しています。


statistics.median()のまとめ

  • median()は並べたときの真ん中の値を返す
  • 偶数個のときは真ん中2つの平均(元データにない値になる)
  • 並べ替えは自動。元のリストは変わらない
  • 実在する値が欲しいならmedian_low()・median_high()
  • 文字列など数値以外はmedian_low()を使う
  • 外れ値に強い。偏ったデータでは平均より実態に近い

あわせて読みたい

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら