Pythonには、リストやタプル、辞書などのデータ構造がありますが、collectionsモジュールには、Counterというデータ構造があります。Counterは、要素の出現回数をカウントしてくれる便利なクラスです。
collections.Counterとは
collections.Counterは、辞書型(dict)を継承したクラスで、要素の出現回数をカウントするためのクラスです。以下のようにして、Counterを作成することができます。
from collections import Counter
c = Counter([1, 2, 2, 3, 3, 3])
print(c)
# Counter({3: 3, 2: 2, 1: 1})
上記の例では、リスト[1, 2, 2, 3, 3, 3]の各要素の出現回数をカウントして、Counterオブジェクトを作成しています。
collections.CounterでCSVへの出力方法
CounterオブジェクトをCSVファイルに出力する場合は、以下のようにして書き出すことができます。
import csv
from collections import Counter
c = Counter(['apple', 'orange', 'apple', 'banana', 'apple'])
with open('fruits.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(c.items())
print('CSVファイルに書き込みました。')
上記の例では、Counterオブジェクトの各要素をCSVファイルに書き込んでいます。出力されるCSVファイルの内容は以下のようになります。
| 要素 | 出現回数 |
|---|---|
| apple | 3 |
| orange | 1 |
| banana | 1 |
collections.Counterで最大値を取得する方法
Counterオブジェクトから最大値を取得するには、most_commonメソッドを使います。most_commonメソッドは、出現回数の多い順に要素とその出現回数のタプルを返します。以下のようにして、最大値を取得することができます。
from collections import Counter c = Counter([1, 2, 2, 3, 3, 3]) print(c.most_common(1)) # [(3, 3)]
上記の例では、most_common(1)で最大値の要素とその出現回数のタプルを取得しています。
collections.Counterで要素の値を増やす(increment)方法
Counterオブジェクトの要素の値を増やすには、+=演算子を使います。以下のようにして、要素の値を増やすことができます。
from collections import Counter
c = Counter([1, 2, 2, 3, 3, 3])
c[2] += 1
print(c)
# Counter({2: 3, 3: 3, 1: 1})
上記の例では、要素2の出現回数を1増やしています。
collections.Counterの応用例
Counterは、様々な場面で活用することができます。以下に、Counterの応用例をいくつか紹介します。
単語の出現回数をカウントする
テキストファイルから単語の出現回数をカウントする場合は、以下のようにしてCounterを使うことができます。
import re
from collections import Counter
with open('sample.txt') as f:
text = f.read().lower()
words = re.findall('\w+', text)
c = Counter(words)
print(c.most_common(10))
# [('the', 6), ('a', 4), ('to', 3), ('in', 3), ('of', 3), ('is', 2), ('and', 2), ('it', 2), ('at', 2), ('for', 2)]
上記の例では、テキストファイルから単語を抽出して、Counterで単語の出現回数をカウントしています。
アンケートの集計をする
アンケートの回答を集計する場合は、以下のようにしてCounterを使うことができます。
from collections import Counter
answers = ['A', 'B', 'A', 'C', 'B', 'A', 'A', 'B', 'C', 'B']
c = Counter(answers)
print(c.most_common())
# [('A', 4), ('B', 4), ('C', 2)]
上記の例では、アンケートの回答をCounterで集計しています。
まとめ
Pythonのcollectionsモジュールには、Counterという便利なクラスがあります。Counterは、要素の出現回数をカウントしてくれるため、単語の出現回数のカウントやアンケートの集計など、様々な場面で活用することができます。
![Pandasで空のDataFrameを新規作成、判定する[Python]](https://machine-learning-skill-up.com/knowledge/wp-content/uploads/2023/10/1-38.jpg)


![Pandasで特定の文字列を含むデータを抽出、置換する[Python]](https://machine-learning-skill-up.com/knowledge/wp-content/uploads/2023/10/1-35.jpg)

![[Python]CSVデータをリアルタイムでグラフ(散布図、折れ線)表示](https://machine-learning-skill-up.com/knowledge/wp-content/uploads/2023/11/1-294.jpg)