Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでシーケンス内で最も頻繁に発生するアイテムを識別する方法は?


問題

シーケンス内で最も頻繁に発生するアイテムを特定する必要があります。

解決策

カウンターを使用して、アイテムを順番に追跡できます。

カウンターとは何ですか?

「カウンター」は、各キーの整数カウントを保持するマッピングです。既存のキーを更新すると、その数が増えます。このオブジェクトは、ハッシュ可能なオブジェクトのインスタンスをカウントするため、またはマルチセットとして使用されます。

「カウンター」は、データ分析を実行するときの親友の1人です。

このオブジェクトはPythonにかなり前から存在しているので、多くの人にとって、これは簡単なレビューになります。コレクションからCounterをインポートすることから始めます。

from collections import Counter

従来の辞書にキーがない場合、キーエラーが発生します。キーが見つからない場合、Pythonの辞書はキーエラーで応答します。

# An empty dictionary
dict = {}

# check for a key in an empty dict
dict['mystring']

# Error message
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-12-1e03564507c6> in <module>
3
4 # check for a key in an empty dict
----> 5 dict['mystring']
6
7 # Error message
KeyError: 'mystring'

この状況でキーエラーの例外を回避するにはどうすればよいですか?

Counterは辞書のサブクラスであり、辞書のような動作をしますが、キーエラーを発生させるのではなく、欠落しているキーを検索すると、ゼロが返されます。

# define the counter
c = Counter()


# check for the unavailable key
print(f"Output\n{c['mystring']}")

出力

0
c['mystring'] += 1
print(f"Output\n{c}")

出力

Counter({'mystring': 1})

print(f"Output\n{type(c)}")

出力

<class 'collections.Counter'>

シーケンス内で最も頻繁に発生するアイテム

カウンターのその他の優れた点の1つは、オブジェクトのリストを作成できることです。これにより、オブジェクトがカウントされます。これにより、カウンターを構築するためにループを構築する必要がなくなります。

Counter
('Peas porridge hot peas porridge cold peas porridge in the pot nine days old'.split())

出力

Counter({'Peas': 1,
'porridge': 3,
'hot': 1,
'peas': 2,
'cold': 1,
'in': 1,
'the': 1,
'pot': 1,
'nine': 1,
'days': 1,
'old': 1})

分割は、文字列を取得して単語のリストに分割します。空白で分割されます。

「Counter」はそのリストをループしてすべての単語をカウントし、出力に表示されるカウントを提供します。

さらに、フレーズの中で最も一般的な単語を数えることもできます。

most_common()メソッドは、頻繁に発生するアイテムを提供します。

count = Counter('Peas porridge hot peas porridge cold peas porridge in the pot nine days old'.split())
print(f"Output\n{count.most_common(1)}")

出力

[('porridge', 3)]

print(f"Output\n{count.most_common(2)}")

出力

[('porridge', 3), ('peas', 2)]

print(f"Output\n{count.most_common(3)}")

出力

[('porridge', 3), ('peas', 2), ('Peas', 1)]

タプルのリストが返されたことに注意してください。タプルの最初の部分は単語で、2番目の部分はその数です。

Counterインスタンスのあまり知られていない機能は、さまざまな数学演算を使用して簡単に組み合わせることができることです。

string = 'Peas porridge hot peas porridge cold peas porridge in the pot nine days old'
another_string =
'Peas peas hot peas peas peas cold peas'

a = Counter(string.split())
b = Counter(another_string.split())


# Add counts
add = a + b
print(f"Output\n{add}")

出力

Counter({'peas': 7, 'porridge': 3, 'Peas': 2, 'hot': 2, 'cold': 2, 'in': 1, 'the': 1, 'pot': 1, 'nine': 1, 'days': 1, 'old': 1})
# Subtract counts
sub = a - b
print(f"Output\n{sub}")

出力

Counter({'porridge': 3, 'in': 1, 'the': 1, 'pot': 1, 'nine': 1, 'days': 1, 'old': 1})

最後に、Counterは、データをコンテナーに格納する方法が非常に優れています。

上記のように、保存時に単語をグループ化して、一般にマルチセットと呼ばれる単語をまとめることができます。

要素を使用して、一度に1つずつ単語を引き出すことができます。順序は覚えていませんが、すべての単語を1つのフレーズにまとめています。

print(f"Output\n{list(a.elements())}")

出力

['Peas', 'porridge', 'porridge', 'porridge', 'hot', 'peas', 'peas', 'cold', 'in', 'the', 'pot', 'nine', 'days', 'old']

print(f"Output\n{list(a.values())}")

出力

[1, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1]

print(f"Output\n{list(a.items())}")

出力

[('Peas', 1), ('porridge', 3), ('hot', 1), ('peas', 2), ('cold', 1), ('in', 1), ('the', 1), ('pot', 1), ('nine', 1), ('days', 1), ('old', 1)]

  1. PythonでAPIの結果を視覚化する方法

    はじめに.. APIを作成する最大の利点の1つは、現在/ライブのデータを抽出することです。データが急速に変化している場合でも、APIは常に最新のデータを取得します。 APIプログラムは、非常に具体的なURLを使用して、特定の情報を要求します。 SpotifyまたはYoutubeMusicで2020年に最も再生された100曲をToppします。リクエストされたデータは、JSONやCSVなどの簡単に処理できる形式で返されます。 Pythonを使用すると、ユーザーは考えられるほぼすべてのURLにAPI呼び出しを記述できます。この例では、GitHubからAPIの結果を抽出して視覚化する方法を示します

  2. Pythonで最も水が多いコンテナ

    n個の非負の整数a1、a2、...、anのセットがあり、各値は座標(i、a [i])の点を表しているとします。 n本の垂直線は、線iの2つの端点が(i、a [i])と(i、a [0])にあるように存在します。 x軸と一緒に1つのコンテナを形成する2つの線を見つける必要があるため、水量が最大になる2つの列を見つけることが目標です。したがって、配列が[1,8,6,2,5,4,8,3,7]の場合、次のようになります 影付きの部分では、高さが7で、セクションが7つあるため、合計面積は実際には7 * 7=49です。これが出力です。 これを解決するために、次の手順に従います 低:=0、高:=a