समस्या
आपको एक अनुक्रम में सबसे अधिक बार आने वाले आइटम की पहचान करने की आवश्यकता है।
समाधान
हम अनुक्रम में आइटम को ट्रैक करने के लिए Counter का उपयोग कर सकते हैं।
Counter क्या है?
"Counter" एक मैपिंग है जो प्रत्येक कुंजी के लिए एक पूर्णांक गिनती रखता है। मौजूदा कुंजी को अपडेट करने से उसकी गिनती बढ़ जाती है। इस ऑब्जेक्ट का उपयोग हैश करने योग्य ऑब्जेक्ट के उदाहरणों को गिनने या मल्टीसेट के रूप में किया जाता है।
"Counter" डेटा विश्लेषण करते समय आपके सबसे अच्छे दोस्तों में से एक है। यह ऑब्जेक्ट Python में काफी समय से मौजूद है, और इसलिए आप में से कई के लिए यह एक त्वरित समीक्षा होगी। हम collections से Counter आयात करके शुरू करेंगे।
from collections import Counter
एक पारंपरिक डिक्शनरी, यदि इसमें एक लापता कुंजी है, तो एक KeyError उठाएगी। Python की डिक्शनरी कुंजी नहीं मिलने पर KeyError के साथ जवाब देगी।
# एक खाली डिक्शनरी
d = {}
# खाली डिक्शनरी में एक कुंजी की जांच करें
d['mystring']
# Error message
KeyError: 'mystring'
इस स्थिति में KeyError अपवाद से कैसे बचें?
Counter डिक्शनरी का एक सब-क्लास है और इसमें बहुत डिक्शनरी जैसा व्यवहार है, हालांकि, यदि आप एक लापता कुंजी को देखते हैं तो KeyError उठाने के बजाय, यह बस शून्य लौटाता है।
# Counter परिभाषित करें
c = Counter()
# अनुपलब्ध कुंजी की जांच करें
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'>
एक अनुक्रम में सबसे अधिक बार आने वाले आइटम
Counter के बारे में दूसरी अच्छी बात यह है कि आप इसे ऑब्जेक्ट की एक सूची दे सकते हैं और यह आपके लिए उन्हें गिन लेगा। यह हमें अपना Counter बनाने के लिए एक लूप बनाने से बचाता है।
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})
split स्ट्रिंग को लेकर उसे शब्दों की सूची में विभाजित कर देगा। यह व्हाइटस्पेस पर विभाजित होता है।
"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)]
ध्यान दें कि इसने टपल की एक सूची लौटाई। टपल का पहला भाग शब्द है, और दूसरा भाग उसकी गिनती है।
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 = 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})
# काउंट घटाएं
sub = a - b
print(f"Output\n{sub}")
Counter({'porridge': 3, 'in': 1, 'the': 1, 'pot': 1, 'nine': 1, 'days': 1, 'old': 1})
अंत में, Counter इस बात में बहुत स्मार्ट है कि यह डेटा को कंटेनर में कैसे स्टोर करता है।
जैसा कि आप ऊपर देख सकते हैं, यह शब्दों को स्टोर करते समय एक साथ समूहित करता है जिससे हम उन्हें एक साथ ले सकते हैं जिसे आमतौर पर मल्टीसेट कहा जाता है।
हम elements का उपयोग करके शब्दों को एक-एक करके निकाल सकते हैं। यह क्रम को याद नहीं रखता लेकिन वाक्यांश के सभी शब्दों को एक साथ रखता है।
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)]