Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでリスト内の最頻値(最も頻度の高い要素)を取得する方法

統計データ分析では、与えられた値のリストの中から最も多く出現する値(最頻値)を特定する場面がよくあります。Pythonには、このような要素を簡単に求めるための方法が複数用意されています。本記事では、代表的な2つのアプローチ——collections.Counterstatistics.mode——を、サンプルコード付きで解説します。

方法1:collections.Counterを使う

collectionsモジュールのCounterクラスには、リスト内で最も出現回数の多い要素を直接取得できるmost_common()メソッドが用意されています。引数に1を渡せば最頻出の要素1つだけを、2を渡せば上位2つの要素を取得できます。戻り値は「(要素, 出現回数)」というタプルのリスト形式になる点に注意してください。

サンプルコード

from collections import Counter

# 対象のリスト
listA = ['Mon', 'Tue', 'Mon', 9, 3, 3]

print("元のリスト : ", listA)

# 最頻出の要素を1つ取得 / 上位2つを取得
Newlist1 = Counter(listA).most_common(1)
Newlist2 = Counter(listA).most_common(2)

# 結果の出力
print("最頻出要素(1件) : ", Newlist1)
print("最頻出要素(2件) : ", Newlist2)

実行結果

元のリスト : ['Mon', 'Tue', 'Mon', 9, 3, 3]
最頻出要素(1件) : [('Mon', 2)]
最頻出要素(2件) : [('Mon', 2), (3, 2)]

この例では、「Mon」と数値の「3」がそれぞれ2回出現しています。most_common(2)を使うことで、同率の要素もまとめて確認できて便利です。

方法2:statistics.modeを使う

statisticsモジュールのmode()関数は、統計学における「最頻値」を返す標準的な関数です。リストの中で最も出現頻度の高い要素をそのまま返します。最大頻度の要素が複数存在する場合は、リスト内で最初に出現した要素が採用されるという特徴があります。

サンプルコード

from statistics import mode

# 要素の並び順が異なる2つのリスト
listA = ['Mon', 'Tue', 'Mon', 9, 3, 3]
listB = [3, 3, 'Mon', 'Tue', 'Mon', 9]

print("元のリストA : ", listA)
print("元のリストB : ", listB)

# 最頻値を取得
Newlist1 = mode(listA)
Newlist2 = mode(listB)

# 結果の出力
print("リストAの最頻値 : ", Newlist1)
print("リストBの最頻値 : ", Newlist2)

実行結果

元のリストA : ['Mon', 'Tue', 'Mon', 9, 3, 3]
元のリストB : [3, 3, 'Mon', 'Tue', 'Mon', 9]
リストAの最頻値 : Mon
リストBの最頻値 : 3

どちらのリストも「Mon」と「3」は2回ずつ出現していますが、mode()は最初に出現した方を返すため、listAでは「Mon」、listBでは「3」という結果になります。

使い分けのポイント

  • Counter.most_common():出現回数も一緒に知りたい場合や、上位N件をまとめて取得したい場合に適しています。
  • statistics.mode():最頻値そのものだけが必要な場合にシンプルに使えます。ただし、同率の要素があるときは最初に出現した要素が選ばれる点に留意しましょう。

用途に応じてこれらの方法を使い分けることで、頻度分析を効率的に行うことができます。

  1. 【Python入門】リスト内の各要素を繰り返し複製する3つの方法

    Pythonでプログラミングをしていると、リスト内の各要素を繰り返し(複製して)新しいリストを作成したい場面があります。例えば、データの水増しやテスト用データの生成などがその一例です。本記事では、リストの要素をそれぞれ2回ずつ繰り返した新しいリストを作成する方法を、3つのアプローチに分けてわかりやすく解説します。方法1:ネストしたforループ(リスト内包表記)を使う最もシンプルで直感的な方法は、リスト内包表記にforループを組み合わせるやり方です。各要素に対して内側のループで2回出力することで、元の要素とその複製を順番に並べた新しいリストを生成できます。サンプルコード# 元のリスト listA

  2. Pythonで指定した範囲の数値リストを生成する3つの方法

    Pythonは、豊富なライブラリと多彩なメソッドによって、データ操作に関するあらゆる要件に柔軟に対応できる言語です。たとえば「ある2つの数値の間に存在するすべての数値を生成したい」といった場面では、Pythonの組み込み関数や標準・外部ライブラリを活用することで簡単に実現できます。本記事では、指定範囲内の数値リストを作成する代表的な3つの手法を、サンプルコードとともにわかりやすく解説します。方法1:range()関数を使うrange()関数は、デフォルトでは0から始まり、1ずつ増加しながら指定した数値の手前までの数値シーケンスを返します。開始値・終了値・増加ステップ(間隔)はすべて自由に指定で