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は、要素の出現回数をカウントしてくれるため、単語の出現回数のカウントやアンケートの集計など、様々な場面で活用することができます。