Python で 1 次元配列内のアイテムの出現をカウントする方法
配列の操作中に、開発者が直面する可能性のある主要な問題の 1つは、アイテムの発生数を数えることです。e コマースサイトで 10 日間に販売された商品の数が多い場合、100 を超える商品が販売された日数を知りたいとします。
sales = [0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]
解決する最も簡単な方法は、配列内で 100 が発生する回数を数えることです。
Python で collections
を使用して配列内の出現数を求める
collections
は、データのコレクションを格納するコンテナのように機能します。collections
モジュールを簡単にインポートして、Counter
関数を使用できます。
コード:
import collections
sales=[0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]
print(collections.Counter(sales))
結果の出力は辞書です。配列内の各項目が発生した回数がリストされます。
ただし、sales
配列で 100 が発生した回数を出力する場合は、辞書からフェッチできます。
>>>print(collections.Counter(sales)[100])
4
Collection
モジュールは 10 進数と文字列でも動作します。
floatarr=[0.7, 10.0, 10.1, .8, .7, .8, .2, .1, 10.0,
10.0, .8, .8, .7, .7, .8]
print(collections.Counter(floatarr))
#Counter({0.8: 5, 0.7: 4, 10.0: 3, 10.1: 1, 0.2: 1, 0.1: 1})
stringarr=["george","mark","george","steve","george"]
print(collections.Counter(stringarr))
#Counter({'george': 3, 'mark': 1, 'steve': 1})
NumPy
ライブラリを使用して Python の配列内の出現数を求める
ただし、Python で定義されたライブラリである NumPy を使用して、大きな配列を処理し、多数の数学関数を含めることもできます。
NumPy で定義された関数を使用して、配列のアイテム数を返す方法はいくつかあります。
NumPy で unique
関数を使用する
Count とともに unique
関数は、各アイテムの数の辞書を返します。また、10 進数と文字列でも機能します。
import collections, numpy
aUnique = numpy.array([0, 100, 100, 80, 70, 80, 20, 10, 100,
100, 80, 70, 10, 30, 40])
unique, counts = numpy.unique(aUnique, return_counts=True)
print(dict(zip(unique, counts)))
NumPy で count_nonzero
関数を使用する
count_nonzero
を使用すると、検索しているアイテムの数が返されます。読みやすいインターフェイスと少ないコード行を提供します。
>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10,
100, 100, 80, 70, 10, 30, 40,"abc"])
>>>print(numpy.count_nonzero(aCountZero == "abc"))
1
count_nonzero
は 10 進数と文字列でも機能します。
>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10,
100, 100, 80, 70, 10, 30, 40])
>>>print(numpy.count_nonzero(aCountZero == 100.1))
1
NumPy で bincount
関数を使用する-整数の配列のみ
ただし、整数のみの配列がある場合は、NumPy の bincount
関数を使用できます。最良の部分は、結果を配列として返すことです。
>>>abit = numpy.array([0, 6, 0, 10, 0, 1, 1, 0, 10, 9, 0, 1])
>>>print(numpy.bincount(abit))
[5 3 0 0 0 0 1 0 0 1 2]
配列内の数値の場合、結果には項目数が昇順で表示されます。たとえば、配列 abit
の 0 は 5 回発生し、10 は配列の最初と最後の項目で示されるように 2 回発生します。