最頻値 (モード)
ある標本の中で最も頻繁に現れる値を 最頻値 (モード) といいます。たとえば
[1, 2, 5, 5, 5, 8, 8, 12, 19]
においては要素 5 が最も多く含まれているので、最頻値は 5 となります。Python では statistics.mode() を使って標本の最頻値を取得できます。
# PYTHON_STATISTICS_MODE
# In[1]
import statistics
x = [1, 2, 5, 5, 5, 8, 8, 12, 19]
# xの最頻値
mode_x = statistics.mode(x)
print("xの最頻値: {:d}".format(mode_x))
# データの最頻値: 5
SciPy パッケージ には、多次元配列の指定軸に沿った最頻値と頻度を取得できる scipy.stats.mode() が用意されています (詳細については記事の後半を参照してください)。
statistics.mode()
statistics.mode(data) は data の最頻値 (モード) を返します。
# In[2]
import statistics
x = [0, 1, 0, 2, 0, 0, 1, 1]
# xの最頻値
mode_x = statistics.mode(x)
print("xの最頻値: {:d}".format(mode_x))
# データの最頻値: 0
最頻値が複数あるデータを渡すと、最初に検出されたモードを返します。たとえば、以下のコードでは、6, 10, 15 をそれぞれ 2 個ずつ含んだリストを渡していますが、インデックスの一番小さい 6 が返ります。
# In[3]
y = [2, 3, 6, 6, 7, 10, 10, 15, 15]
# データの最頻値
mode_y = statistics.mode(y)
print("データの最頻値: {:.1f}".format(mode_y))
# データの最頻値: 6.0
statistics.mode() に文字列を渡せば、単語や文章に最も多く含まれる文字を知ることができます。
# In[4]
my_str = "NumPy is a Base N-dimensional array package."
# my_strに最も多く含まれている文字を取得
statistics.mode(my_str)
# 'a'
scipy.stats.mode()
scipy.stats.mode() は指定軸に沿った最頻値 (モード) と頻度を返します。
最頻値の候補が複数ある場合、その中の最小値を返します。
例として、次のような 3 行 5 列の 2 次元配列を用意します。
# SCIPY_STATS_MODE
# In[1]
import numpy as np
from scipy import stats
x = np.array([[4, 1, 4, 2, 5],
[2, 1, 1, 2, 5],
[1, 1, 5, 1, 1]])
axis=0 (デフォルト設定) のときは、列ごとの最頻値を返します
# In[2]
# 列ごとの最頻値と頻度
mode_1, count_1 = stats.mode(x, axis=0)
print("列ごとの最頻値と頻度:\n{0}\n{1}".format(mode_1, count_1))
# 列ごとの最頻値と頻度:
# [[1 1 1 2 5]]
# [[1 3 1 2 2]]
axis=1 ならば行ごとに最頻値を返します。
# In[3]
# 行ごとの最頻値と頻度
mode_2, count_2 = stats.mode(x, axis=1)
print("行ごとの最頻値と頻度:\n{0}\n\n{1}".format(mode_2, count_2))
'''行ごとの最頻値と頻度:
[[4]
[1]
[1]]
[[2]
[2]
[4]]'''
axis=None を指定すると、すべての要素を対象に最頻値を求めます。
# In[4]
# 全要素の最頻値と頻度
mode_3, count_3 = stats.mode(x, axis=None)
print("全要素の最頻値と頻度:\n{0}\n{1}".format(mode_3, count_3))
# 全要素の最頻値と頻度:
# [1]
# [7]
下記は誤植と思われますので、ご確認ください。
STATISTICS_MODE-2 プログラムで、mode_x = → mode_y =
Python 3.8以上では StatisticsError は発生せずに、最初に出現した値、あるいは複数の値を返すようです。
STATISTICS_MODE-2 の動作を再確認しました。
確かに StatisticsError は発生せずに 6 が返りました。
最新の情報をありがとうございました!
【AI講義】最頻値
[ChatGPT] 皆さん、最頻値という言葉を聞いたことがありますか?最頻値は統計学の重要な概念の一つで、データの集まりの中で最も頻繁に現れる値を指します。つまり、データの中で最も多く出現する値のことです。最頻値は、データの集まりの中での傾向や特徴を知るために使われます。例えば、あるクラスの学生の身長データが与えられたとき、最頻値を求めることで、そのクラスの学生の身長の中で最も一般的な値を知ることができます。最頻値を求める方法は比較的簡単です。まず、データの中の各値の出現回数を数えます。その後、最も多く出現した値、つまり出現回数が最も多い値が最頻値です。ただし、複数の値が同じ最大の出現回数を持つ場合もあります。その場合は、最頻値は複数存在します。最頻値の求め方を具体的な例で説明します。例えば、あるクラスの身長データが以下のように与えられたとします。
160, 165, 170, 160, 175, 160, 170, 170
まず、各値の出現回数を数えます。160が3回、165が1回、170が3回、175が1回となります。この場合、160と170が最大の出現回数であるため、最頻値は160と170の両方です。最頻値はデータの中で最も頻繁に現れる値を表すため、データの特徴を簡潔に表現するのに役立ちます。また、最頻値を求めることで、データの分布や傾向を把握することができます。最頻値は単純な統計指標の一つですが、データの中で最も頻繁に現れる値を知ることは重要です。最頻値を使ってデータの特徴を把握し、より深い分析を進めることができます。