# विज़ुअलाइज़िंग वितरण

|![ सकेटच्नोते करने वाला [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/10-Visualizing-Distributions.png)|
|:---:|
| विज़ुअलाइज़िंग वितरण - _सकेटच्नोते करने वाला [@nitya](https://twitter.com/nitya)_ |

In the previous lesson, you learned some interesting facts about a dataset about the birds of Minnesota. You found some erroneous data by visualizing outliers and looked at the differences between bird categories by their maximum length.

## [प्री-लेक्चर क्विज](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/18)
## पक्षियों के डेटासेट का अन्वेषण करें

डेटा में खुदाई करने का दूसरा तरीका इसके वितरण को देखना है, या डेटा को एक अक्ष के साथ कैसे व्यवस्थित किया जाता है। शायद, उदाहरण के लिए, आप इस डेटासेट के सामान्य वितरण के बारे में जानना चाहेंगे, मिनेसोटा के पक्षियों के लिए अधिकतम पंख या अधिकतम शरीर द्रव्यमान।

आइए इस डेटासेट में डेटा के वितरण के बारे में कुछ तथ्यों की खोज करें। इस पाठ फ़ोल्डर के मूल में _नोटबुक.आईपीएनबी_ फ़ाइल में, पांडा, मैटप्लोटलिब और अपना डेटा आयात करें:

```python
import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
```

सामान्य तौर पर, आप देख सकते हैं कि स्कैटर प्लॉट का उपयोग करके डेटा कैसे वितरित किया जाता है, जैसा कि हमने पिछले पाठ में किया था:

```python
birds.plot(kind='scatter',x='MaxLength',y='Order',figsize=(12,8))

plt.title('Max Length per Order')
plt.ylabel('Order')
plt.xlabel('Max Length')

plt.show()
```
यह प्रति पक्षी क्रम में शरीर की लंबाई के सामान्य वितरण का एक सिंहावलोकन देता है, लेकिन यह सही वितरण प्रदर्शित करने का सबसे अच्छा तरीका नहीं है। उस कार्य को आमतौर पर हिस्टोग्राम बनाकर नियंत्रित किया जाता है।
## हिस्टोग्राम के साथ काम करना

माटप्लोटलिब हिस्टोग्राम का उपयोग करके डेटा वितरण की कल्पना करने के लिए बहुत अच्छे तरीके प्रदान करता है। इस प्रकार का चार्ट एक बार चार्ट की तरह होता है जहां वितरण को बार के ऊपर और नीचे के माध्यम से देखा जा सकता है। हिस्टोग्राम बनाने के लिए, आपको संख्यात्मक डेटा की आवश्यकता होती है। हिस्टोग्राम बनाने के लिए, आप हिस्टोग्राम के लिए 'इतिहास' के रूप में परिभाषित एक चार्ट तैयार कर सकते हैं। यह चार्ट संख्यात्मक डेटा की संपूर्ण डेटासेट की श्रेणी के लिए MaxBodyMass के वितरण को दर्शाता है। डेटा की सरणी को विभाजित करके इसे छोटे डिब्बे में दिया जाता है, यह डेटा के मूल्यों के वितरण को प्रदर्शित कर सकता है:

```python
birds['MaxBodyMass'].plot(kind = 'hist', bins = 10, figsize = (12,12))
plt.show()
```
![संपूर्ण डेटासेट पर वितरण](images/dist1.png)

जैसा कि आप देख सकते हैं, इस डेटासेट में 400+ पक्षी अपने मैक्स बॉडी मास के लिए 2000 से कम की सीमा में आते हैं। `बिन्स` पैरामीटर को अधिक संख्या में बदलकर डेटा में अधिक जानकारी प्राप्त करें, जैसे कुछ 30:

```python
birds['MaxBodyMass'].plot(kind = 'hist', bins = 30, figsize = (12,12))
plt.show()
```
![बड़े डिब्बे परम के साथ संपूर्ण डेटासेट पर वितरण](images/dist2.png)

यह चार्ट वितरण को कुछ अधिक बारीक तरीके से दिखाता है। यह सुनिश्चित करके कि आप केवल एक दी गई सीमा के भीतर डेटा का चयन करते हैं, बाईं ओर कम तिरछा एक चार्ट बनाया जा सकता है:

केवल उन पक्षियों को प्राप्त करने के लिए अपना डेटा फ़िल्टर करें जिनके शरीर का द्रव्यमान 60 से कम है, और 40 `डिब्बे` दिखाएं:

```python
filteredBirds = birds[(birds['MaxBodyMass'] > 1) & (birds['MaxBodyMass'] < 60)]      
filteredBirds['MaxBodyMass'].plot(kind = 'hist',bins = 40,figsize = (12,12))
plt.show()     
```
![फ़िल्टर्ड हिस्टोग्राम](images/dist3.png)

✅ कुछ अन्य फ़िल्टर और डेटा बिंदु आज़माएं। डेटा का पूरा वितरण देखने के लिए, लेबल किए गए वितरण दिखाने के लिए `['मैक्सबॉडीमास']` फ़िल्टर को हटा दें।

हिस्टोग्राम भी कोशिश करने के लिए कुछ अच्छे रंग और लेबलिंग संवर्द्धन प्रदान करता है:

दो वितरणों के बीच संबंध की तुलना करने के लिए एक 2डी हिस्टोग्राम बनाएं। आइए `मैक्सबॉडीमास` बनाम `अधिकतम लंबाई` की तुलना करें। माटप्लोटलिब चमकीले रंगों का उपयोग करके अभिसरण दिखाने के लिए एक अंतर्निहित तरीका प्रदान करता है:

```python
x = filteredBirds['MaxBodyMass']
y = filteredBirds['MaxLength']

fig, ax = plt.subplots(tight_layout=True)
hist = ax.hist2d(x, y)
```
एक विशेष रूप से मजबूत अभिसरण बिंदु के साथ, एक अपेक्षित अक्ष के साथ इन दो तत्वों के बीच एक अपेक्षित सहसंबंध प्रतीत होता है:

![2डी प्लॉट](images/2D.png)

संख्यात्मक डेटा के लिए हिस्टोग्राम डिफ़ॉल्ट रूप से अच्छी तरह से काम करते हैं। क्या होगा यदि आपको टेक्स्ट डेटा के अनुसार वितरण देखने की आवश्यकता है?
## टेक्स्ट डेटा का उपयोग करके वितरण के लिए डेटासेट का अन्वेषण करें

इस डेटासेट में पक्षी श्रेणी और उसके जीनस, प्रजातियों और परिवार के साथ-साथ इसके संरक्षण की स्थिति के बारे में अच्छी जानकारी भी शामिल है। आइए इस संरक्षण जानकारी में खुदाई करें। पक्षियों का वितरण उनकी संरक्षण स्थिति के अनुसार क्या है?

> ✅ डेटासेट में, संरक्षण की स्थिति का वर्णन करने के लिए कई समरूपों का उपयोग किया जाता है। ये एक्रोनिम्स [IUCN रेड लिस्ट कैटेगरी](https://www.iucnredlist.org/) से आते हैं, जो एक संगठन है जो प्रजातियों की स्थिति को सूचीबद्ध करता है।
> 
> - सीआर: गंभीर रूप से संकटग्रस्त
> - एन: लुप्तप्राय
> - पूर्व: विलुप्त
> - एलसी: कम से कम चिंता
> - एनटी: खतरे के पास
> - वीयू: कमजोर

ये टेक्स्ट-आधारित मान हैं इसलिए आपको हिस्टोग्राम बनाने के लिए एक ट्रांसफ़ॉर्म करना होगा। फ़िल्टर्ड बर्ड्स डेटाफ़्रेम का उपयोग करते हुए, इसके न्यूनतम विंगस्पैन के साथ-साथ इसकी संरक्षण स्थिति प्रदर्शित करें। क्या देखती है?

```python
x1 = filteredBirds.loc[filteredBirds.ConservationStatus=='EX', 'MinWingspan']
x2 = filteredBirds.loc[filteredBirds.ConservationStatus=='CR', 'MinWingspan']
x3 = filteredBirds.loc[filteredBirds.ConservationStatus=='EN', 'MinWingspan']
x4 = filteredBirds.loc[filteredBirds.ConservationStatus=='NT', 'MinWingspan']
x5 = filteredBirds.loc[filteredBirds.ConservationStatus=='VU', 'MinWingspan']
x6 = filteredBirds.loc[filteredBirds.ConservationStatus=='LC', 'MinWingspan']

kwargs = dict(alpha=0.5, bins=20)

plt.hist(x1, **kwargs, color='red', label='Extinct')
plt.hist(x2, **kwargs, color='orange', label='Critically Endangered')
plt.hist(x3, **kwargs, color='yellow', label='Endangered')
plt.hist(x4, **kwargs, color='green', label='Near Threatened')
plt.hist(x5, **kwargs, color='blue', label='Vulnerable')
plt.hist(x6, **kwargs, color='gray', label='Least Concern')

plt.gca().set(title='Conservation Status', ylabel='Max Body Mass')
plt.legend();
```

![विंगस्पैन और संरक्षण संयोजन](images/histogram-conservation.png)

न्यूनतम पंखों की अवधि और संरक्षण की स्थिति के बीच कोई अच्छा संबंध प्रतीत नहीं होता है। इस पद्धति का उपयोग करके डेटासेट के अन्य तत्वों का परीक्षण करें। आप अलग-अलग फ़िल्टर भी आज़मा सकते हैं। क्या आप कोई सहसंबंध पाते हैं?
## घनत्व भूखंड

आपने देखा होगा कि अब तक हमने जिन आयतचित्रों को देखा है वे 'चरणबद्ध' हैं और एक चाप में सुचारू रूप से प्रवाहित नहीं होते हैं। एक आसान घनत्व चार्ट दिखाने के लिए, आप एक घनत्व प्लॉट आज़मा सकते हैं।

घनत्व वाले भूखंडों के साथ काम करने के लिए, अपने आप को एक नई प्लॉटिंग लाइब्रेरी से परिचित कराएं, [सीबॉर्न](https://seaborn.pydata.org/generated/seaborn.kdeplot.html). 

सीबॉर्न लोड हो रहा है, एक बुनियादी घनत्व प्लॉट आज़माएं:

```python
import seaborn as sns
import matplotlib.pyplot as plt
sns.kdeplot(filteredBirds['MinWingspan'])
plt.show()
```
![घनत्व प्लॉट](images/density1.png)

आप देख सकते हैं कि न्यूनतम विंगस्पैन डेटा के लिए प्लॉट पिछले वाले को कैसे गूँजता है; यह थोड़ा चिकना है। सीबॉर्न के दस्तावेज़ीकरण के अनुसार, "हिस्टोग्राम के सापेक्ष, केडीई एक ऐसे प्लॉट का निर्माण कर सकता है जो कम अव्यवस्थित और अधिक व्याख्या योग्य हो, विशेष रूप से कई वितरणों को चित्रित करते समय। लेकिन इसमें विकृतियों को पेश करने की क्षमता होती है यदि अंतर्निहित वितरण बाध्य है या सुचारू नहीं है। जैसे हिस्टोग्राम, प्रतिनिधित्व की गुणवत्ता भी अच्छे चौरसाई मापदंडों के चयन पर निर्भर करती है।" [स्रोत](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) दूसरे शब्दों में, आउटलेयर हमेशा की तरह आपके चार्ट को खराब व्यवहार करेंगे।

यदि आप अपने द्वारा बनाए गए दूसरे चार्ट में उस दांतेदार मैक्सबॉडीमास लाइन को फिर से देखना चाहते हैं, तो आप इस पद्धति का उपयोग करके इसे फिर से बनाकर इसे बहुत अच्छी तरह से सुचारू कर सकते हैं:

```python
sns.kdeplot(filteredBirds['MaxBodyMass'])
plt.show()
```
![चिकनी बॉडीमास लाइन](images/density2.png)

यदि आप एक चिकनी, लेकिन बहुत चिकनी रेखा नहीं चाहते हैं, तो `bw_adjust` पैरामीटर संपादित करें:

```python
sns.kdeplot(filteredBirds['MaxBodyMass'], bw_adjust=.2)
plt.show()
```
![कम चिकनी बॉडीमास लाइन](images/density3.png)

✅ इस प्रकार के प्लॉट और प्रयोग के लिए उपलब्ध मापदंडों के बारे में पढ़ें!

इस प्रकार का चार्ट खूबसूरती से व्याख्यात्मक दृश्य प्रस्तुत करता है। कोड की कुछ पंक्तियों के साथ, उदाहरण के लिए, आप प्रति पक्षी अधिकतम शरीर द्रव्यमान घनत्व दिखा सकते हैं:

```python
sns.kdeplot(
   data=filteredBirds, x="MaxBodyMass", hue="Order",
   fill=True, common_norm=False, palette="crest",
   alpha=.5, linewidth=0,
)
```

![प्रति आदेश बॉडीमास](images/density4.png)

आप एक चार्ट में कई चरों के घनत्व को भी मैप कर सकते हैं। किसी पक्षी की संरक्षण स्थिति की तुलना में उसकी अधिकतम लंबाई और न्यूनतम लंबाई को टेक्स्ट करें:

```python
sns.kdeplot(data=filteredBirds, x="MinLength", y="MaxLength", hue="ConservationStatus")
```

![एकाधिक घनत्व, आरोपित](images/multi.png)

शायद यह शोध करने लायक है कि 'कमजोर' पक्षियों का समूह उनकी लंबाई के अनुसार सार्थक है या नहीं।

## 🚀 चुनौती

हिस्टोग्राम बुनियादी स्कैटरप्लॉट, बार चार्ट या लाइन चार्ट की तुलना में अधिक परिष्कृत प्रकार के चार्ट हैं। हिस्टोग्राम के उपयोग के अच्छे उदाहरण खोजने के लिए इंटरनेट पर खोज करें। उनका उपयोग कैसे किया जाता है, वे क्या प्रदर्शित करते हैं, और किन क्षेत्रों या पूछताछ के क्षेत्रों में उनका उपयोग किया जाता है?

## [व्याख्यान के बाद प्रश्नोत्तरी](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/19)

## समीक्षा और स्व अध्ययन

इस पाठ में, आपने Matplotlib का उपयोग किया और अधिक परिष्कृत चार्ट दिखाने के लिए Seaborn के साथ काम करना शुरू किया। सीबॉर्न में `केडीप्लॉट` पर कुछ शोध करें, "एक या अधिक आयामों में निरंतर संभाव्यता घनत्व वक्र"। यह कैसे काम करता है, यह समझने के लिए [दस्तावेज](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) पढ़ें।

## कार्यभार

[अपने कौशल को लागू करें](assignment.md)
