Pythonの辞書の値を集計する方法!Counter・groupbyの基本を解説
生徒
「Pythonの辞書って、いろんな値が入っているけど、その値の数を数えることってできますか?」
先生
「はい、辞書の値を集計するには便利な方法があります。たとえば、Counterというものや、groupbyというテクニックです。これらを使うと簡単に数えられますよ。」
生徒
「それぞれどうやって使うんですか?できれば簡単に教えてください!」
先生
「では、ひとつずつ基本からわかりやすく説明しますね。」
1. Pythonの辞書とは?
まず、辞書とは「キー」と「値」のペアでデータを管理するものです。例えば、果物の名前をキーにして、その数を値にしたりできます。
fruits = {"りんご": 3, "バナナ": 5, "みかん": 2}
print(fruits["りんご"]) # 3が表示される
このように、辞書は特定のキーに対応する値を簡単に取り出せる便利なデータ構造です。
2. 辞書の値を集計したい理由
例えば、あるアンケート結果が辞書に入っていて、値が「好きな色」だったとします。これらの値がどれだけあるか数えたいことがありますよね。
辞書の値を数える作業は「集計」と言います。Pythonには集計を簡単にするためのツールが用意されています。
3. Counter(カウンター)で値を数える
CounterはPythonの標準ライブラリcollectionsにある便利なクラスです。リストや辞書の値を数えてくれます。
使い方はとても簡単で、値だけを取り出してCounterに渡すだけです。
from collections import Counter
data = {"Aさん": "赤", "Bさん": "青", "Cさん": "赤", "Dさん": "緑", "Eさん": "青"}
# 辞書の値だけ取り出す
values = data.values()
# Counterで値を数える
counted = Counter(values)
print(counted)
このコードを実行すると、結果は以下のようになります。
Counter({'赤': 2, '青': 2, '緑': 1})
つまり、「赤」が2回、「青」が2回、「緑」が1回あることがわかります。
4. groupby(グループバイ)で値を集計する方法
groupbyはPythonの標準ライブラリitertoolsにある関数で、データをグループに分けて処理するときに使います。
辞書の値をまとめたいときにも使えますが、ポイントは「データがソートされていること」です。
以下はgroupbyを使った例です。
from itertools import groupby
data = {"Aさん": "赤", "Bさん": "青", "Cさん": "赤", "Dさん": "緑", "Eさん": "青"}
# 値だけ取り出してリストにする
values = list(data.values())
# 値をアルファベット順にソート(groupbyはソート済みが必要)
values.sort()
# groupbyでグループごとに集計
for key, group in groupby(values):
count = len(list(group))
print(f"{key} の数は {count} です。")
実行結果は以下の通りです。
青 の数は 2 です。
赤 の数は 2 です。
緑 の数は 1 です。
このように、同じ値をまとめて数えることができます。
5. Counterとgroupbyの違いと使い分け
Counterは値を数えるだけなら非常に簡単で使いやすいです。コードも短くて済みます。
groupbyは値ごとに何か特別な処理をしたいときに向いていますが、データを事前に並べ替える必要があります。
なので、単純に値の数を知りたいだけならCounterを使うのがおすすめです。
6. 最後に重要なポイント
・Pythonの辞書は「キー」と「値」のペアでデータを管理します。
・辞書の値を集計するときは、値だけを取り出すことが基本です。
・集計に便利なのがcollections.Counterとitertools.groupbyです。
・Counterは簡単に値の出現回数を数えるのに適しています。
・groupbyは同じ値をまとめて何かしたいときに使いますが、データをソートする必要があります。
・まずはCounterを使いこなせるようになると、辞書の値の集計がスムーズになります。
まとめ
この記事では、Pythonの辞書に含まれる値を集計する方法について、初心者でも理解しやすいように段階的に解説してきました。 辞書は「キー」と「値」をペアで管理できる便利なデータ構造ですが、実際のプログラムでは「どの値が何回使われているか」「同じ値がどれくらいあるか」を知りたい場面が多くあります。 そのようなときに役立つのが、Counterやgroupbyといった集計テクニックです。
まず押さえておきたいのは、辞書の集計ではキーではなく値に注目するという点です。
辞書そのものをそのまま数えるのではなく、values()を使って値だけを取り出し、その値の出現回数を調べることが基本になります。
この考え方を理解しておくと、Pythonの辞書を使ったデータ処理やデータ分析の幅が一気に広がります。
Counterを使った値の集計の振り返り
collections.Counterは、Python標準ライブラリに含まれている非常に便利なクラスです。
辞書の値をそのまま渡すだけで、それぞれの値が何回出現したかを自動でカウントしてくれます。
コードが短く、直感的に書けるため、辞書の値を集計する最初の一歩として最適です。
from collections import Counter
data = {
"Aさん": "赤",
"Bさん": "青",
"Cさん": "赤",
"Dさん": "緑",
"Eさん": "青"
}
result = Counter(data.values())
print(result)
このように、Counterを使えば「赤が何回」「青が何回」といった集計結果をすぐに確認できます。 アンケート結果の集計、ログデータの分類、カテゴリ別の件数カウントなど、さまざまな場面で活用できます。
groupbyを使った集計の考え方
itertools.groupbyは、値をグループごとにまとめて処理したいときに使う方法です。
Counterと違い、事前にデータをソートする必要があるという特徴がありますが、
グループごとに複雑な処理をしたい場合には非常に強力です。
from itertools import groupby
values = list(data.values())
values.sort()
for key, group in groupby(values):
print(key, len(list(group)))
この方法では、「数える」だけでなく、「同じ値ごとに処理を分ける」といった柔軟な使い方ができます。 ただし、初心者のうちはCounterを中心に使い、必要になったらgroupbyを学ぶ流れがおすすめです。
辞書の値を集計するメリット
辞書の値を集計できるようになると、Pythonでのデータ処理が一段階レベルアップします。 例えば、ユーザーの回答傾向を分析したり、エラーの種類ごとの発生回数を調べたり、売上データを分類したりと、 実務や学習のさまざまな場面で役立つスキルになります。
また、辞書・Counter・groupbyといった考え方は、Pythonだけでなくデータ分析全般に共通する考え方でもあります。 「集計する」「分類する」「数を把握する」という視点を持つことが、プログラミング上達への近道です。
生徒:「辞書の値って、そのままじゃ数えにくいと思っていたんですが、values()を使えばいいんですね。」
先生:「その通りです。まずは値だけを取り出す、という発想がとても大切ですよ。」
生徒:「Counterを使うと、一行で集計できるのが便利でした。アンケート結果にも使えそうです。」
先生:「いいところに気づきましたね。Counterは実務でもよく使われるので、覚えておくと役立ちます。」
生徒:「groupbyは少し難しそうですが、同じ値ごとに処理を分けたいときに使えるんですね。」
先生:「そうです。最初はCounter、慣れてきたらgroupby、という順番で覚えると無理がありません。」
生徒:「辞書の集計ができるようになると、Pythonでできることが一気に増えた気がします!」
先生:「その感覚はとても大事です。ぜひ実際のデータで何度も試して、使いこなせるようになってくださいね。」