विकिपीडिया के अनुसार, हिस्टोग्राम संख्यात्मक डेटा के वितरण का एक सटीक ग्राफ़िकल निरूपण है। यह किसी सतत चर (मात्रात्मक चर) के प्रायिकता वितरण का एक आकलन है और इसे सबसे पहले Karl Pearson ने प्रस्तुत किया था। यह बार ग्राफ़ का एक प्रकार है। हिस्टोग्राम बनाने के लिए, पहला चरण मानों के दायरे को “बिन” करना है — यानी पूरे दायरे को कई अंतरालों में बाँटना — और फिर यह गिनना कि प्रत्येक अंतराल में कितने मान आते हैं। प्रायः बिन किसी चर के क्रमागत, एक-दूसरे से न ओवरलैप करने वाले अंतराल के रूप में निर्दिष्ट किए जाते हैं। बिन (अंतराल) एक-दूसरे से सटे होने चाहिए और अक्सर (पर आवश्यक नहीं) समान आकार के होते हैं।
संख्यात्मक डेटा के अलावा, हिस्टोग्राम का उपयोग छवियों के वितरण को दर्शाने के लिए भी किया जा सकता है, क्योंकि छवियाँ 0 से 255 तक के चित्र तत्त्वों (पिक्सेल) का संयोजन भर होती हैं। हिस्टोग्राम का x-अक्ष बिनों की संख्या को दर्शाता है जबकि y-अक्ष किसी विशेष बिन की आवृत्ति को दर्शाता है। बिनों की संख्या एक पैरामीटर है, जिसे आप अपने डेटा के वितरण को कैसे देखना चाहते हैं, उसके अनुसार बदला जा सकता है।
उदाहरण के लिए: मान लीजिए, आप 0 से 255 तक पिक्सेल मानों वाली एक RGB छवि का हिस्टोग्राम प्लॉट करना चाहते हैं। इस छवि में अधिकतम 255 बिन हो सकते हैं। यदि आप x_axis (बिनों की संख्या) को 255 रखते हैं, तो y_axis उस छवि में प्रत्येक पिक्सेल की आवृत्ति को दिखाएगा।
हिस्टोग्राम भावना में bar ग्राफ़ के समान होते हैं, आइए हिस्टोग्राम का एक चित्रात्मक उदाहरण देखें:
हिस्टोग्राम संख्यात्मक डेटा या छवि डेटा के प्रायिकतामूलक वितरण को दृश्य रूप में समझने का उत्कृष्ट साधन है, जिसे लगभग हर कोई सहज रूप से समझ सकता है। Python में हिस्टोग्राम बनाने और प्लॉट करने के कई विकल्प हैं। Python में ग्राफ़ बनाने के लिए कुछ इन-बिल्ट लाइब्रेरीज़ हैं, और ऐसी ही एक लाइब्रेरी है matplotlib।
आज के ट्यूटोरियल में, आप मुख्यतः matplotlib का उपयोग विभिन्न प्रकार के डेटा सेट्स पर हिस्टोग्राम बनाने और उन्हें विज़ुअलाइज़ करने के लिए करेंगे।
तो बिना देर किए, शुरू करते हैं।
NumPy और Matplotlib का उपयोग करके हिस्टोग्राम प्लॉट करना
इसी प्रकार, ऊपर दिया गया bin_edges आउटपुट बताता है कि बिन 0 अंतराल [0,1) में है, बिन 1 [1,2) में, बिन 2 [2,3) में, बिन 3 [3,4) में।
केवल Matplotlib का उपयोग करके हिस्टोग्राम प्लॉट करना
matplotlib का उपयोग करके हिस्टोग्राम प्लॉट करना बहुत सरल है। आपको बस matplotlib के plt.hist() फ़ंक्शन का उपयोग करना है और डेटा के साथ बिनों की संख्या तथा कुछ वैकल्पिक पैरामीटर पास करने हैं।
plt.hist() में, bins='auto' पास करने से आपको “आदर्श” बिनों की संख्या मिलती है। विचार यह है कि ऐसा बिन चौड़ाई चुनी जाए जो आपके डेटा का सबसे विश्वसनीय निरूपण दे।
बस इतना ही। अब, numpy से बनाए गए normal_distribution का हिस्टोग्राम प्लॉट करते हैं।
plt.figure(figsize=[10,8])
n, bins, patches = plt.hist(x=np_hist, bins=8, color='#0504aa',alpha=0.7, rwidth=0.85)
plt.grid(axis='y', alpha=0.75)
plt.xlabel('Value',fontsize=15)
plt.ylabel('Frequency',fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.ylabel('Frequency',fontsize=15)
plt.title('Normal Distribution Histogram',fontsize=15)
plt.show()संचालित द्वारा
दो हिस्टोग्राम एक साथ प्लॉट करना
plt.figure(figsize=[10,8])
x =0.3*np.random.randn(1000)
y =0.3*np.random.randn(1000)
n, bins, patches = plt.hist([x, y])संचालित द्वारा
Pandas का उपयोग करके Iris डेटा का हिस्टोग्राम प्लॉट करना
आप sklearn का उपयोग iris नामक डेटा सेट को लोड करने के लिए करेंगे। sklearn में datasets नामक एक लाइब्रेरी है जिसमें Iris डेटा सेट मौजूद है, जिसे आप तुरंत लोड कर सकते हैं। तो, आइए iris डेटा सेट को जल्दी से लोड करें।
from sklearn.datasets import load_iris
import pandas as pd
संचालित द्वारा
अंत में, आप pandas के इन-बिल्ट फ़ंक्शन .hist() का उपयोग करेंगे, जो डेटा सेट में मौजूद सभी फीचर्स के लिए हिस्टोग्राम प्लॉट कर देगा।
क्या यह शानदार नहीं है?
fig = plt.figure(figsize =(8,8))
ax = fig.gca()
dataset.hist(ax=ax)
plt.show()संचालित द्वारा
petal-length, petal-width, और sepal-length एक एकचोटी (unimodal) वितरण दिखाते हैं, वहीं sepal-width एक Gaussian वक्र को प्रतिबिंबित करता है। ये सभी उपयोगी विश्लेषण हैं क्योंकि तब आप ऐसे एल्गोरिद्म के बारे में सोच सकते हैं जो इस तरह के वितरण के साथ अच्छा काम करते हैं।
Matplotlib के साथ हिस्टोग्राम प्लॉट करें
plt.figure(figsize=[10,10])
f,a = plt.subplots(2,2)
a = a.ravel()for idx,ax inenumerate(a):
ax.hist(dataset.iloc[:,idx], bins='auto', color='#0504aa',alpha=0.7, rwidth=0.85)
ax.set_title(dataset.columns[idx])
plt.tight_layout()संचालित द्वारा
ट्यूटोरियल के अंतिम भाग में, आप दो अलग-अलग डोमेन की छवियों का विज़ुअलाइज़ेशन करेंगे: बाइनरी (दस्तावेज़) और प्राकृतिक छवियाँ। बाइनरी छवियाँ वे होती हैं जिनके पिक्सेल मान अधिकतर 0 या 255 होते हैं, जबकि किसी रंग चैनल वाली छवि में पिक्सेल मान 0 से 255 के बीच कहीं भी हो सकते हैं।
किसी छवि के तीव्रता मानों का हिस्टोग्राम प्लॉट करके पिक्सेल वितरण का विश्लेषण करना किसी दी गई छवि के प्रत्येक पिक्सेल की आवृत्ति को मापने का सही तरीका है। 8-बिट ग्रेस्केल छवि के लिए 256 संभावित तीव्रता मान होते हैं। अतः पिक्सेल वितरण डोमेन में दस्तावेज़ और प्राकृतिक छवियों के बीच अंतर का अध्ययन करने के लिए, आप दस्तावेज़ और प्राकृतिक छवि के लिए क्रमशः दो हिस्टोग्राम प्लॉट करेंगे। यह मानते हुए कि पठनीय दस्तावेज़ों में विरलता होती है, इन दस्तावेज़ छवियों में पिक्सेलों का वितरण अधिकांशतः तिरछा होना चाहिए।
आप opencv मॉड्यूल का उपयोग करके दोनों छवियाँ लोड करेंगे, उन्हें पढ़ते समय पैरामीटर 0 पास करके ग्रेस्केल में बदलेंगे, और अंत में उन्हें समान आकार में रिसाइज़ करेंगे।
टिप्पणी: आप bins को 255 के बराबर उपयोग करेंगे, क्योंकि किसी छवि में कुल 255 पिक्सेल नहीं बल्कि 256 संभावित मान होते हैं, और आप 0 से 255 तक छवि के प्रत्येक पिक्सेल मान की आवृत्ति को विज़ुअलाइज़ करना चाहते हैं।
hist, edges = np.histogram(binary_gray,bins=range(255))संचालित द्वारा
ऊपर दिए गए चित्रों से आप देख सकते हैं कि natural image सभी 256 तीव्रताओं में फैली हुई है और उसका वितरण random है, जबकि दस्तावेज़ छवि unimodal वितरण दिखाती है और उसका अधिकांश भाग 0 से 255 के पिक्सेल मानों के बीच तिरछा है।
निष्कर्ष
ट्यूटोरियल पूरा करने के लिए बधाई।
यह ट्यूटोरियल numpy और pandas की मदद से matplotlib का उपयोग करके हिस्टोग्राम बनाने का एक अच्छा शुरुआती बिंदु था।
आपने यह भी सीखा कि कैसे हिस्टोग्राम की शक्ति का उपयोग करके दो अलग-अलग छवि डोमेनों — दस्तावेज़ और प्राकृतिक छवि — में अंतर किया जा सकता है।
यदि आप डेटा विज़ुअलाइज़ेशन तकनीकों के बारे में और सीखना चाहते हैं, तो DataCamp का Data Visualization with Matplotlib कोर्स करने पर विचार करें।
कृपया नीचे टिप्पणी अनुभाग में इस ट्यूटोरियल से संबंधित कोई भी प्रश्न निःसंकोच पूछें।
परिचय
विकिपीडिया के अनुसार, हिस्टोग्राम संख्यात्मक डेटा के वितरण का एक सटीक ग्राफ़िकल निरूपण है। यह किसी सतत चर (मात्रात्मक चर) के प्रायिकता वितरण का एक आकलन है और इसे सबसे पहले Karl Pearson ने प्रस्तुत किया था। यह बार ग्राफ़ का एक प्रकार है। हिस्टोग्राम बनाने के लिए, पहला चरण मानों के दायरे को “बिन” करना है — यानी पूरे दायरे को कई अंतरालों में बाँटना — और फिर यह गिनना कि प्रत्येक अंतराल में कितने मान आते हैं। प्रायः बिन किसी चर के क्रमागत, एक-दूसरे से न ओवरलैप करने वाले अंतराल के रूप में निर्दिष्ट किए जाते हैं। बिन (अंतराल) एक-दूसरे से सटे होने चाहिए और अक्सर (पर आवश्यक नहीं) समान आकार के होते हैं।
संख्यात्मक डेटा के अलावा, हिस्टोग्राम का उपयोग छवियों के वितरण को दर्शाने के लिए भी किया जा सकता है, क्योंकि छवियाँ 0 से 255 तक के चित्र तत्त्वों (पिक्सेल) का संयोजन भर होती हैं। हिस्टोग्राम का x-अक्ष बिनों की संख्या को दर्शाता है जबकि y-अक्ष किसी विशेष बिन की आवृत्ति को दर्शाता है। बिनों की संख्या एक पैरामीटर है, जिसे आप अपने डेटा के वितरण को कैसे देखना चाहते हैं, उसके अनुसार बदला जा सकता है।
उदाहरण के लिए: मान लीजिए, आप 0 से 255 तक पिक्सेल मानों वाली एक RGB छवि का हिस्टोग्राम प्लॉट करना चाहते हैं। इस छवि में अधिकतम 255 बिन हो सकते हैं। यदि आप x_axis (बिनों की संख्या) को 255 रखते हैं, तो y_axis उस छवि में प्रत्येक पिक्सेल की आवृत्ति को दिखाएगा।
हिस्टोग्राम भावना में
barग्राफ़ के समान होते हैं, आइए हिस्टोग्राम का एक चित्रात्मक उदाहरण देखें:हिस्टोग्राम संख्यात्मक डेटा या छवि डेटा के प्रायिकतामूलक वितरण को दृश्य रूप में समझने का उत्कृष्ट साधन है, जिसे लगभग हर कोई सहज रूप से समझ सकता है। Python में हिस्टोग्राम बनाने और प्लॉट करने के कई विकल्प हैं। Python में ग्राफ़ बनाने के लिए कुछ इन-बिल्ट लाइब्रेरीज़ हैं, और ऐसी ही एक लाइब्रेरी है
matplotlib।आज के ट्यूटोरियल में, आप मुख्यतः
matplotlibका उपयोग विभिन्न प्रकार के डेटा सेट्स पर हिस्टोग्राम बनाने और उन्हें विज़ुअलाइज़ करने के लिए करेंगे।तो बिना देर किए, शुरू करते हैं।
NumPy और Matplotlib का उपयोग करके हिस्टोग्राम प्लॉट करना
पुनरुत्पादकता के लिए, आप numPy के
seedफ़ंक्शन का उपयोग करेंगे, जो हर बार निष्पादन पर समान आउटपुट देगा।आप
gaussian (normal) distributionका हिस्टोग्राम प्लॉट करेंगे, जिसका माध्य 0 और मानक विचलन 1 होगा।आइए ऊपर दिए गए वितरण का माध्य और मानक विचलन सत्यापित करें।
अगले चरण में, आप numPy का
histogramफ़ंक्शन उपयोग करेंगे, जोhistऔरbin_edgesलौटाएगा।अब, matplotlib के
plt.barफ़ंक्शन का उपयोग करके हिस्टोग्राम प्लॉट करते हैं, जहाँ x-अक्ष और y-अक्ष क्रमशःbin_edgesऔरhistहोंगे।आइए
bin_edgesको पूर्णांक में राउंड कर दें।अब ग्राफ़ काफ़ी बेहतर दिख रहा है, है ना?
histऔरbin_edgesको समझने के लिए, एक उदाहरण देखते हैं:आप मनमाने मानों वाली एक array परिभाषित करेंगे और बिनों को 5 की रेंज के साथ परिभाषित करेंगे।
ऊपर के आउटपुट में,
histदर्शाता है कि बिन 0 में 0 आइटम हैं, बिन 1 में 2, बिन 3 में 4, बिन 4 में 1।इसी प्रकार, ऊपर दिया गया
bin_edgesआउटपुट बताता है कि बिन 0 अंतराल [0,1) में है, बिन 1 [1,2) में, बिन 2 [2,3) में, बिन 3 [3,4) में।केवल Matplotlib का उपयोग करके हिस्टोग्राम प्लॉट करना
matplotlibका उपयोग करके हिस्टोग्राम प्लॉट करना बहुत सरल है। आपको बस matplotlib केplt.hist()फ़ंक्शन का उपयोग करना है और डेटा के साथ बिनों की संख्या तथा कुछ वैकल्पिक पैरामीटर पास करने हैं।plt.hist()में, bins='auto' पास करने से आपको “आदर्श” बिनों की संख्या मिलती है। विचार यह है कि ऐसा बिन चौड़ाई चुनी जाए जो आपके डेटा का सबसे विश्वसनीय निरूपण दे।बस इतना ही। अब,
numpyसे बनाए गएnormal_distributionका हिस्टोग्राम प्लॉट करते हैं।दो हिस्टोग्राम एक साथ प्लॉट करना
Pandas का उपयोग करके Iris डेटा का हिस्टोग्राम प्लॉट करना
आप
sklearnका उपयोगirisनामक डेटा सेट को लोड करने के लिए करेंगे। sklearn में datasets नामक एक लाइब्रेरी है जिसमें Iris डेटा सेट मौजूद है, जिसे आप तुरंत लोड कर सकते हैं। तो, आइए iris डेटा सेट को जल्दी से लोड करें।अगले चरण में, आप
irisडेटा सेट का डेटा फ्रेम बनाएंगे।अंत में, आप
pandasके इन-बिल्ट फ़ंक्शन.hist()का उपयोग करेंगे, जो डेटा सेट में मौजूद सभी फीचर्स के लिए हिस्टोग्राम प्लॉट कर देगा।क्या यह शानदार नहीं है?
petal-length, petal-width, और sepal-length एक एकचोटी (unimodal) वितरण दिखाते हैं, वहीं sepal-width एक Gaussian वक्र को प्रतिबिंबित करता है। ये सभी उपयोगी विश्लेषण हैं क्योंकि तब आप ऐसे एल्गोरिद्म के बारे में सोच सकते हैं जो इस तरह के वितरण के साथ अच्छा काम करते हैं।
Matplotlib के साथ हिस्टोग्राम प्लॉट करें
बाइनरी और RGB छवियों का हिस्टोग्राम प्लॉट करना
ट्यूटोरियल के अंतिम भाग में, आप दो अलग-अलग डोमेन की छवियों का विज़ुअलाइज़ेशन करेंगे: बाइनरी (दस्तावेज़) और प्राकृतिक छवियाँ। बाइनरी छवियाँ वे होती हैं जिनके पिक्सेल मान अधिकतर 0 या 255 होते हैं, जबकि किसी रंग चैनल वाली छवि में पिक्सेल मान 0 से 255 के बीच कहीं भी हो सकते हैं।
किसी छवि के तीव्रता मानों का हिस्टोग्राम प्लॉट करके पिक्सेल वितरण का विश्लेषण करना किसी दी गई छवि के प्रत्येक पिक्सेल की आवृत्ति को मापने का सही तरीका है। 8-बिट ग्रेस्केल छवि के लिए 256 संभावित तीव्रता मान होते हैं। अतः पिक्सेल वितरण डोमेन में दस्तावेज़ और प्राकृतिक छवियों के बीच अंतर का अध्ययन करने के लिए, आप दस्तावेज़ और प्राकृतिक छवि के लिए क्रमशः दो हिस्टोग्राम प्लॉट करेंगे। यह मानते हुए कि पठनीय दस्तावेज़ों में विरलता होती है, इन दस्तावेज़ छवियों में पिक्सेलों का वितरण अधिकांशतः तिरछा होना चाहिए।
आप
opencvमॉड्यूल का उपयोग करके दोनों छवियाँ लोड करेंगे, उन्हें पढ़ते समय पैरामीटर 0 पास करके ग्रेस्केल में बदलेंगे, और अंत में उन्हें समान आकार में रिसाइज़ करेंगे।आइए प्राकृतिक और दस्तावेज़ दोनों छवियों को विज़ुअलाइज़ करें।
टिप्पणी: आप
binsको 255 के बराबर उपयोग करेंगे, क्योंकि किसी छवि में कुल 255 पिक्सेल नहीं बल्कि 256 संभावित मान होते हैं, और आप 0 से 255 तक छवि के प्रत्येक पिक्सेल मान की आवृत्ति को विज़ुअलाइज़ करना चाहते हैं।ऊपर दिए गए चित्रों से आप देख सकते हैं कि
natural imageसभी 256 तीव्रताओं में फैली हुई है और उसका वितरणrandomहै, जबकि दस्तावेज़ छविunimodalवितरण दिखाती है और उसका अधिकांश भाग 0 से 255 के पिक्सेल मानों के बीच तिरछा है।निष्कर्ष
ट्यूटोरियल पूरा करने के लिए बधाई।
यह ट्यूटोरियल numpy और pandas की मदद से matplotlib का उपयोग करके हिस्टोग्राम बनाने का एक अच्छा शुरुआती बिंदु था।
आपने यह भी सीखा कि कैसे हिस्टोग्राम की शक्ति का उपयोग करके दो अलग-अलग छवि डोमेनों — दस्तावेज़ और प्राकृतिक छवि — में अंतर किया जा सकता है।
यदि आप डेटा विज़ुअलाइज़ेशन तकनीकों के बारे में और सीखना चाहते हैं, तो DataCamp का Data Visualization with Matplotlib कोर्स करने पर विचार करें।
कृपया नीचे टिप्पणी अनुभाग में इस ट्यूटोरियल से संबंधित कोई भी प्रश्न निःसंकोच पूछें।