【便利】PythonのCounter機能を実例付きで解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年12月)

✔このような方へ向けて書かれた記事となります

「Pythonでカウンターを使いたい」
「カウンターを使ったPythonプログラムの書き方が知りたい」
「Pythonでカウンターを活用した実例が見たい」

✔当記事を通じてお伝えすること

  • Pythonにおけるカウンターの基本
  • カウンターを活用したPythonプログラムの書き方
  • 実用的なカウンターの使用例

当記事では、Pythonでのカウンターの基本概念から、実用的な使い方まで、具体的な例を交えて解説していきます。

ぜひ最後までお読みいただき、Pythonでカウンターを効果的に活用してみてください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Counterの基本概念とcount()との違い

こちらでは、「Counter」の基本的な概念と、リスト型のメソッドである「count()」との違いについて説明します。

  • Counterとは?
  • count()メソッドとの違い

Counterとは?

Counterは、要素の出現回数を辞書の形で保存します。

つまり、キーが要素で、値がその出現回数です。

一見複雑に見えるデータでも、それぞれの要素が何回出現したかを簡単に知れます。

from collections import Counter

c = Counter(['apple', 'banana', 'apple', 'orange', 'banana', 'banana'])
print(c)
# 出力結果: Counter({'banana': 3, 'apple': 2, 'orange': 1})

この例では、各フルーツがリスト内で何回出現したかを表示しています。

count()メソッドとの違い

count()メソッドとCounterの違いは以下のとおりです。

  • count()メソッド: リスト型のメソッドで、特定の要素がリスト内に何回出現したかを返す
  • Counter: すべての要素の出現回数を一度に取得できる点で、大きなデータの分析に適している

Counterはさまざまなデータ型に対応しているため、より多様なケースで利用できます。

Counterの基本的な使い方

ここでは、「Counter」の基本的な使い方について詳しく解説します。

  • ライブラリのimport
  • 基本構文
  • さまざまなデータ型との相性

ライブラリのimport

まずはじめに、Counterを使用するためには、collectionsモジュールからimportする必要があります。

from collections import Counter

基本構文

Counterは、リストや文字列など、イテラブルなオブジェクトを引数として受け取ります。

それを使って、要素の出現回数を辞書の形式で表しましょう。

fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'banana']
counter = Counter(fruits)
print(counter)
# 出力: Counter({'banana': 3, 'apple': 2, 'orange': 1})

さまざまなデータ型との相性

Counterは、リストだけでなく、文字列やタプルなど、さまざまなデータ型とも組み合わせて使用できます。

# 文字列の場合
word = "banana"
counter = Counter(word)
print(counter)
# 出力: Counter({'a': 3, 'n': 2, 'b': 1})

# タプルの場合
colors = ('red', 'blue', 'red', 'green', 'blue', 'blue')
counter = Counter(colors)
print(counter)
# 出力: Counter({'blue': 3, 'red': 2, 'green': 1})

Counterの主要メソッド

次に、Counterで利用できる主要なメソッドについて解説します。

  • keys(), values(), items()メソッドの活用
  • elements()によるイテレータの取得
  • most_common()で出現回数順のリストを取得
  • subtract()とupdate()で要素の増減
  • len()で要素数をカウント

keys(), values(), items()メソッドの活用

Counterオブジェクトは、辞書として扱うことができ、keys(), values(), items()などのメソッドが利用できます。

counter = Counter(['a', 'b', 'c', 'a', 'b', 'b'])

print(counter.keys())
# 出力: dict_keys(['a', 'b', 'c'])

print(counter.values())
# 出力: dict_values([2, 3, 1])

print(counter.items())
# 出力: dict_items([('a', 2), ('b', 3), ('c', 1)])

elements()によるイテレータの取得

elements()メソッドは、Counterオブジェクトの要素をイテレータとして取得します。

このイテレータは、要素が出現する回数だけ繰り返すものです。

counter = Counter({'a': 3, 'b': 2, 'c': 1})
print(list(counter.elements()))
# 出力: ['a', 'a', 'a', 'b', 'b', 'c']

most_common()で出現回数順のリストを取得

most_common()メソッドは、要素の出現回数を降順でソートしたリストを取得します。

引数に整数nを指定すると、最も多いn要素のリストを返せます。

counter = Counter(['apple', 'banana', 'orange', 'apple', 'banana'])
print(counter.most_common())
# 出力: [('apple', 2), ('banana', 2), ('orange', 1)]

print(counter.most_common(2))
# 出力: [('apple', 2), ('banana', 2)]

subtract()とupdate()で要素の増減

subtract()メソッドを使って、Counterオブジェクトの要素を減らせます。

update()メソッドを使って要素を増やすことも可能です。

counter = Counter({'a': 3, 'b': 2, 'c': 1})
counter.subtract({'a': 1, 'c': 2})
print(counter)
# 出力: Counter({'a': 2, 'b': 2, 'c': -1})

counter.update({'a': 1, 'd': 2})
print(counter)
# 出力: Counter({'a': 3, 'b': 2, 'd': 2, 'c': -1})

len()で要素数をカウント

len()関数を使用して、Counterオブジェクト内の異なる要素の数を取得することができます。

counter = Counter(['a', 'b', 'c', 'a', 'b', 'b'])
print(len(counter))
# 出力: 3

文字列や単語の出現回数のカウント

こちらでは、Counterを利用して文字列や単語の出現回数をカウントする方法について解説します。

  • 文字列の文字の出現個数をカウント
  • 文字列の単語の出現個数をカウント

文字列の文字の出現個数をカウント

Counterを使用して、文字列内の各文字の出現回数を簡単にカウントできます。

sentence = "The quick brown fox jumps over the lazy dog"
counter = Counter(sentence)
print(counter)
# 出力: Counter({' ': 9, 'o': 4, 'e': 3, 't': 2, 'h': 2, 'u': 2, 'r': 2, 'T': 1, 'q': 1, 'i': 1, 'c': 1, 'k': 1, 'b': 1, 'w': 1, 'n': 1, 'f': 1, 'x': 1, 'j': 1, 'm': 1, 'p': 1, 's': 1, 'v': 1, 'l': 1, 'a': 1, 'z': 1, 'd': 1, 'g': 1})

上記の出力では、文字列内の各文字が何回出現したかを辞書形式で表示しています。

スペースが最も多く、次に’o’文字が多く出現していることがわかります。

文字列の単語の出現個数をカウント

文字列内の単語の出現回数をカウントするには、まず文字列を単語に分割する必要があります。

これにはsplit()メソッドを使いましょう。

その後、Counterに分割した単語リストを渡すのです。

sentence = "The quick brown fox jumps over the lazy dog and the fox was very quick"
words = sentence.split()
counter = Counter(words)
print(counter)
# 出力: Counter({'The': 1, 'quick': 2, 'brown': 1, 'fox': 2, 'jumps': 1, 'over': 1, 'the': 2, 'lazy': 1, 'dog': 1, 'and': 1, 'was': 1, 'very': 1})

ここでは、文章内の単語が何回出現したかをカウントしています。

‘quick’, ‘fox’, と ‘the’ が2回ずつ出現していることがわかります。

Counterと演算子の活用方法

次に、「Counter」オブジェクトと演算子を組み合わせた活用方法について説明します。

  • 要素の足し算と引き算
  • subtract()と演算子の違い
  • 集合演算(積集合、和集合)

要素の足し算と引き算

Counterオブジェクトは、要素ごとの足し算や引き算が可能

これには+-演算子を使用します。

counter1 = Counter({'a': 3, 'b': 2, 'c': 1})
counter2 = Counter({'a': 1, 'b': 2, 'd': 3})

result = counter1 + counter2
print(result)
#出力: Counter({'a': 4, 'b': 4, 'd': 3, 'c': 1})

引き算の場合も同様に、-演算子を使用します。

result = counter1 - counter2
print(result)
# 出力: Counter({'a': 2, 'c': 1})

ここで注意が必要なのは、Counterオブジェクトの引き算では、結果が0または負の場合、その要素は結果のCounterオブジェクトに含まれません。

subtract()と演算子の違い

前述のsubtract()メソッドと-演算子は似ているように見えますが、挙動に違いがあります。

  • subtract()メソッド: 元のCounterオブジェクトを変更
  • -演算子: 新しいCounterオブジェクトを作成する
codecounter1 = Counter({'a': 3, 'b': 2, 'c': 1})
counter2 = Counter({'a': 1, 'b': 2, 'd': 3})

counter1.subtract(counter2)
print(counter1)
# 出力: Counter({'a': 2, 'b': 0, 'c': 1, 'd': -3})

上記の例では、subtract()メソッドを使用すると、元のcounter1が変更されます。

また、subtract()では負の値も結果に含まれる点が異なります。

集合演算(積集合、和集合)

Counterオブジェクトでは、&|演算子を使用して、積集合と和集合を求められます

codecounter1 = Counter({'a': 3, 'b': 2, 'c': 1})
counter2 = Counter({'a': 1, 'b': 2, 'd': 3})

# 積集合
intersection = counter1 & counter2
print(intersection)
# 出力: Counter({'a': 1, 'b': 2})

# 和集合
union = counter1 | counter2
print(union)
# 出力: Counter({'a': 3, 'b': 2, 'd': 3, 'c': 1})

&演算子は、共通する要素の最小のカウントを取得し、|演算子は最大のカウントを取得します。

これらの方法を活用して、Counterクラスを使いこなし、データ分析や処理において多くの情報を効率的に取り扱えるでしょう。

便利な使い方や処理例

PythonのCounterを使った処理には、さまざまな応用例があります。

ここでは、いくつかの便利な使い方や処理例をご紹介します。

  • 重複しない要素の個数
  • 条件を満たす要素の個数をカウント
  • オブジェクト間の比較

重複しない要素の個数

Counterオブジェクトを使って、リストや文字列などに含まれる重複しない要素の個数を簡単に調べられます。

data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
counter = Counter(data)
unique_elements = len(counter)
print(unique_elements)
# 出力: 4

条件を満たす要素の個数をカウント

特定の条件を満たす要素の個数をカウントする際も、Counterは非常に便利です。

例として、文字列内の小文字のアルファベットの数をカウントしてみましょう。

import string

text = "Hello, World! This is a Sample Text."
counter = Counter(text)

lowercase_count = sum(counter[char] for char in string.ascii_lowercase)
print(lowercase_count)
# 出力: 25

オブジェクト間の比較

Counterオブジェクト同士を比較して、二つのCounterオブジェクトが同じ要素と個数を持っているか確認できます。

counter1 = Counter("aabbc")
counter2 = Counter("abcabc")

print(counter1 == counter2)
# 出力: True

まとめ

最後に、今回学んだCounterの概要と使用法についてまとめます。

PythonのCounterクラスを活用することで、データ内の要素の出現回数を効率的にカウントできます。

これは、データ分析や文字列処理、コレクションの操作において非常に有用です。

CounterはPythonのcollectionsモジュールに含まれるたった一つの機能に過ぎません。

Pythonにはさらに多くの強力な機能があります。

今回学んだ知識を活かして、更なる学習に挑戦してみてください。

データ分析や処理を行う際に、Counterクラスが皆さんの強力なツールとなることを願っています。

タイトルとURLをコピーしました