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()を使う - 外れ値に強い。偏ったデータでは平均より実態に近い



