Python statistics.medianの使い方

この記事のポイント

Pythonでデータを分析する際、平均値と並んで重要な「中央値」を簡単に計算できるのがstatistics.medianです。

この記事を読むと、次のようなことが身に付きます。

  • statistics.medianを使って中央値を計算する基本がわかる
  • データの個数が奇数や偶数のときの違いを理解できる
  • 実際のデータ分析で中央値をどう活用するか実例を知る

この記事を通して、データの特徴をより正確に把握するためのテクニックを身につけましょう。

目次

statistics.medianとは?

statistics.medianは、データの集まりから中央値を計算するための関数です。

中央値とは、数値を小さい順に並べたときに、ちょうど真ん中にくる値のことをいいます。たとえば、5人の身長を低い順に並べたとき、3番目の人の身長が中央値になります。データの数が偶数の場合は、真ん中にある2つの数値の平均が中央値となります。

平均値は極端に大きな数値や小さな数値(外れ値)が含まれていると、その影響を受けて結果が偏ってしまうことがあります。

しかし、中央値はその影響を受けにくいため、よりデータの実態に近い値を把握したいときに役立ちます。リストやタプルなどのデータから簡単に算出できるため、データ分析の現場で重宝されています。

statistics.medianの特徴

  • Pythonの標準ライブラリであるstatisticsモジュールに含まれる関数である
  • データを自動的に整列して真ん中の値を算出する
  • データの個数が偶数のときは中央の2つの値の平均を返す
  • リストやタプルなど複数のデータ形式に対応している
  • 平均値に比べて外れ値の影響を受けにくい性質がある

【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング

基本構文

statistics.medianの使い方はとてもシンプルです。statisticsモジュールをインポートして、数値が格納されたリストを関数に渡すだけで中央値を算出できます。

import statistics data = [1, 3, 5, 7, 9] result = statistics.median(data) print(result)

出力結果

5

この例では、1から9までの奇数が並んだリストから中央値を求めています。データの個数が5個と奇数なので、データの真ん中に位置する「5」がそのまま結果として出力されます。

statistics.medianを使うと、データが整列されていなくても自動的に処理されますが、ここでは分かりやすく最初から整列したデータを使用しました。

次に、データの個数が偶数の場合を見てみましょう。このときは中央にある2つの数値の平均値が計算されます。

import statistics data = [2, 4, 6, 8] result = statistics.median(data) print(result)

出力結果

5.0

この例では、2から8までの偶数が並んだリストを扱っています。データの個数が4個と偶数なので、中央にある「4」と「6」を足して2で割った「5.0」が結果となります。整数同士の計算であっても、割り算が発生するため結果は浮動小数点数になります。

実用例

ここからは、statistics.medianを使ったコード例を紹介します。実際のデータ分析で遭遇する可能性が高い場面を想定し、基本的な処理から少し複雑な条件付きの使い方まで解説します。

ペットの体重データから中央値を求める

動物病院で収集したイヌの体重データから、中央値を算出するコード例です。

import statistics dog_weights = [5.2, 12.8, 8.7, 15.3, 22.1, 7.9, 18.5] median_weight = statistics.median(dog_weights) print(f"イヌの体重の中央値: {median_weight}kg")

出力結果

イヌの体重の中央値: 12.8kg

この例では、7匹のイヌの体重データから中央値を求めています。statistics.median関数は内部でデータを小さい順に並べ替えてから計算を行うため、リストの並び順を気にする必要はありません。データ数が7個の奇数なので、並べ替えたあとにちょうど真ん中の4番目にくる「12.8」が中央値として選ばれています。

テストの点数データの中央値計算

クラスの生徒たちのテスト点数から中央値を算出し、成績の傾向を把握するコード例です。

import statistics test_scores = [85, 92, 78, 95, 88, 15, 91, 87, 82, 90] median_score = statistics.median(test_scores) average_score = sum(test_scores) / len(test_scores) print(f"中央値: {median_score}点") print(f"平均値: {average_score}点")

出力結果

中央値: 87.5点
平均値: 80.3点

この例では、10人分のテストの点数を分析しています。データ数が偶数なので、並べ替えたときの5番目と6番目の点数の平均が中央値となります。

ここでは中央値と同時に平均値も計算して表示しました。両方の値を比べることで、極端に点数が高い、あるいは低い生徒が全体の数値にどう影響しているかといった成績分布の偏りを推測しやすくなります。

ネコの年齢データでの中央値分析

動物保護施設にいるネコの年齢データから、年齢の中央値を求めるコード例です。

import statistics cat_ages = [1, 3, 2, 8, 5, 12, 4, 6, 9, 7, 2, 11] median_age = statistics.median(cat_ages) sorted_ages = sorted(cat_ages) print(f"ネコの年齢中央値: {median_age}歳") print(f"年齢分布: {sorted_ages}")

出力結果

ネコの年齢中央値: 5.5歳
年齢分布: [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12]

この例では、12匹のネコの年齢データを扱っています。データ数が偶数であるため、ソート後の6番目(5歳)と7番目(6歳)の平均値である「5.5歳」が中央値となります。コード内ではsorted関数を使ってデータを並べ替えて表示しており、実際にどの値が中央にきているかを視覚的に確認できるようにしています。

気温データの月別中央値計算

ある都市の日別最高気温から、月の気温の中央値を求めるコード例です。

import statistics daily_temperatures = [28.5, 32.1, 30.8, 29.3, 31.7, 33.2, 27.9, 35.4, 30.1] temp_median = statistics.median(daily_temperatures) temp_range = max(daily_temperatures) - min(daily_temperatures) print(f"気温の中央値: {temp_median}℃") print(f"気温の範囲: {temp_range}℃")

出力結果

気温の中央値: 30.8℃
気温の範囲: 7.5℃

この例では、9日間の気温データから中央値を計算し、あわせて気温の変動幅(レンジ)も求めています。中央値は極端な暑さや寒さといった異常値の影響を受けにくいため、その時期の一般的な気温を知るのに役立ちます。

max関数min関数を使って最大値と最小値の差を出し、気温がどれくらい変動したかも分かるようにしています。

売上データの中央値による業績分析

店舗の日別売上データから中央値を求めて、業績の傾向を分析するコード例です。

import statistics daily_sales = [45000, 52000, 38000, 67000, 41000, 55000, 49000, 43000] sales_median = statistics.median(daily_sales) high_sales_days = [s for s in daily_sales if s > sales_median] print(f"売上中央値: {sales_median:,}円") print(f"中央値超えの日数: {len(high_sales_days)}日")

出力結果

売上中央値: 47,000.0円
中央値超えの日数: 4日

この例では、8日間の売上データの中央値を算出し、さらにその数値を基準にして業績が良かった日数を数えています。リスト内包表記を使って「中央値より大きい売上」だけを抜き出し、その個数をlen関数で取得しました。

セールなどで突発的に売上が伸びた日があっても、中央値を使えば普段の実力に近い売上規模を把握できます。

複数データセットでの中央値比較

異なるグループのデータを比較するために、それぞれの中央値を求めるコード例です。

import statistics group_a_scores = [78, 85, 92, 88, 79, 91, 86] group_b_scores = [82, 76, 89, 93, 87, 84, 90] median_a = statistics.median(group_a_scores) median_b = statistics.median(group_b_scores) print(f"グループA中央値: {median_a}点") print(f"グループB中央値: {median_b}点") print(f"差分: {abs(median_a - median_b)}点")

出力結果

グループA中央値: 86点
グループB中央値: 87点
差分: 1点

この例では、グループAとグループBという2つの異なるデータセットを比較しています。それぞれの中央値を計算したあと、abs関数を使ってその差を求めました。

2つのグループの実力がどの程度離れているか、あるいは似ているかを確認したい場合、平均値だけでなく中央値を比べることで、より多角的な視点を持つことができます。

時系列データでの移動中央値計算

連続するデータから、一定期間ごとの中央値を求めて傾向を把握するコード例です。

import statistics monthly_data = [120, 135, 128, 142, 156, 149, 163, 158, 171, 165] window_size = 3 moving_medians = [] for i in range(len(monthly_data) - window_size + 1): window_data = monthly_data[i:i + window_size] moving_medians.append(statistics.median(window_data)) print(f"移動中央値: {moving_medians}")

出力結果

移動中央値: [128, 135, 142, 149, 156, 158, 163, 165]

この例では、時系列データに対して移動中央値という手法を使っています。forループの中でリストのスライス機能を使い、データを3つずつずらしながら取り出して中央値を計算しました。これを繰り返すことで、データの一時的なブレを取り除き、全体がどのように変化しているかという大きな流れをつかみやすくしています。

まとめ

Pythonのstatistics.medianは、データ分析で頻繁に使う中央値を手軽に求められる便利な関数です。基本的な使い方から応用まで、幅広く活用できます。

statistics.medianが活躍する場面

  • 極端な値の影響を避けて、データの一般的な傾向を知りたいとき
  • テストの点数や売上など、複数のグループの実力を比較したいとき
  • 日々の変動が激しいデータから、長期的な傾向をつかみたいとき

statistics.medianを使う上で、押さえておきたいポイントを覚えておきましょう。

重要なポイント

  • データ数が奇数なら中央の値、偶数なら中央2つの平均を返す
  • リストやタプルなど、さまざまなデータ形式を引数に指定できる
  • 平均値とあわせて確認することで、データの偏りを正しく把握できる

まずは身近なデータを使って、実際に中央値を計算してみてください。平均値だけでは気づけなかった新しい発見があるはずです。

ぜひstatistics.medianを使いこなして、データ分析のスキルを一段階アップさせましょう。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. Pythonのリファレンス記事一覧
  4. Python statistics.medianの使い方