You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

184 lines
22 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "ea67c0c40808fd723594de6896c37ccf",
"translation_date": "2025-08-27T10:23:42+00:00",
"source_file": "3-Data-Visualization/R/10-visualization-distributions/README.md",
"language_code": "bn"
}
-->
# ডিস্ট্রিবিউশন ভিজুয়ালাইজেশন
|![ স্কেচনোট [(@sketchthedocs)](https://sketchthedocs.dev) দ্বারা ](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/10-Visualizing-Distributions.png)|
|:---:|
| ডিস্ট্রিবিউশন ভিজুয়ালাইজেশন - _স্কেচনোট [@nitya](https://twitter.com/nitya) দ্বারা_ |
পূর্ববর্তী পাঠে, আপনি মিনেসোটা রাজ্যের পাখিদের একটি ডেটাসেট সম্পর্কে কিছু আকর্ষণীয় তথ্য শিখেছেন। আপনি আউটলায়ার ভিজুয়ালাইজ করে কিছু ভুল ডেটা খুঁজে পেয়েছেন এবং পাখির ক্যাটাগরিগুলোর মধ্যে তাদের সর্বোচ্চ দৈর্ঘ্যের পার্থক্য দেখেছেন।
## [পূর্ব-পাঠ কুইজ](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/18)
## পাখিদের ডেটাসেট অন্বেষণ করুন
ডেটা বিশ্লেষণের আরেকটি উপায় হলো এর ডিস্ট্রিবিউশন দেখা, অর্থাৎ ডেটা কীভাবে একটি অক্ষ বরাবর সংগঠিত হয়েছে। উদাহরণস্বরূপ, আপনি হয়তো জানতে চাইবেন মিনেসোটা রাজ্যের পাখিদের সর্বোচ্চ উইংসপ্যান বা সর্বোচ্চ শরীরের ভরের সাধারণ ডিস্ট্রিবিউশন সম্পর্কে।
এই ডেটাসেটের ডিস্ট্রিবিউশন সম্পর্কে কিছু তথ্য আবিষ্কার করি। আপনার R কনসোলে `ggplot2` এবং ডেটাবেস আমদানি করুন। পূর্ববর্তী বিষয়ে যেমনটি করেছেন, ডেটাবেস থেকে আউটলায়ার সরিয়ে ফেলুন।
```r
library(ggplot2)
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
birds_filtered <- subset(birds, MaxWingspan < 500)
head(birds_filtered)
```
| | নাম | বৈজ্ঞানিক নাম | ক্যাটাগরি | অর্ডার | পরিবার | গণ | সংরক্ষণ অবস্থা | সর্বনিম্ন দৈর্ঘ্য | সর্বোচ্চ দৈর্ঘ্য | সর্বনিম্ন শরীরের ভর | সর্বোচ্চ শরীরের ভর | সর্বনিম্ন উইংসপ্যান | সর্বোচ্চ উইংসপ্যান |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 0 | ব্ল্যাক-বেলিড হুইসলিং ডাক | Dendrocygna autumnalis | হাঁস/গিজ/জলপাখি | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | ফুলভাস হুইসলিং ডাক | Dendrocygna bicolor | হাঁস/গিজ/জলপাখি | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | স্নো গিজ | Anser caerulescens | হাঁস/গিজ/জলপাখি | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | রসের গিজ | Anser rossii | হাঁস/গিজ/জলপাখি | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | গ্রেটার হোয়াইট-ফ্রন্টেড গিজ | Anser albifrons | হাঁস/গিজ/জলপাখি | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
সাধারণভাবে, আপনি দ্রুত ডেটা কীভাবে বিতরণ করা হয়েছে তা দেখতে পারেন একটি স্ক্যাটার প্লট ব্যবহার করে, যেমনটি আমরা পূর্ববর্তী পাঠে করেছি:
```r
ggplot(data=birds_filtered, aes(x=Order, y=MaxLength,group=1)) +
geom_point() +
ggtitle("Max Length per order") + coord_flip()
```
![অর্ডার অনুযায়ী সর্বোচ্চ দৈর্ঘ্য](../../../../../translated_images/max-length-per-order.e5b283d952c78c12b091307c5d3cf67132dad6fefe80a073353b9dc5c2bd3eb8.bn.png)
এটি পাখির অর্ডার অনুযায়ী শরীরের দৈর্ঘ্যের সাধারণ ডিস্ট্রিবিউশন সম্পর্কে একটি ওভারভিউ দেয়, তবে এটি প্রকৃত ডিস্ট্রিবিউশন প্রদর্শনের জন্য সর্বোত্তম উপায় নয়। এই কাজটি সাধারণত একটি হিস্টোগ্রাম তৈরি করে করা হয়।
## হিস্টোগ্রামের সাথে কাজ করা
`ggplot2` ডিস্ট্রিবিউশন ভিজুয়ালাইজ করার জন্য খুব ভালো উপায় প্রদান করে হিস্টোগ্রাম ব্যবহার করে। এই ধরনের চার্ট একটি বার চার্টের মতো যেখানে ডিস্ট্রিবিউশন বারগুলোর উত্থান-পতনের মাধ্যমে দেখা যায়। একটি হিস্টোগ্রাম তৈরি করতে, আপনার প্রয়োজন সংখ্যাসূচক ডেটা। হিস্টোগ্রাম তৈরি করতে, আপনি একটি চার্ট প্লট করতে পারেন যার ধরণ 'hist' হিস্টোগ্রামের জন্য। এই চার্টটি পুরো ডেটাসেটের সংখ্যাসূচক ডেটার পরিসরের জন্য MaxBodyMass এর ডিস্ট্রিবিউশন দেখায়। ডেটার অ্যারের ছোট ছোট অংশে বিভক্ত করে এটি ডেটার মানের ডিস্ট্রিবিউশন প্রদর্শন করতে পারে:
```r
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) +
geom_histogram(bins=10)+ylab('Frequency')
```
![পুরো ডেটাসেটের উপর ডিস্ট্রিবিউশন](../../../../../translated_images/distribution-over-the-entire-dataset.d22afd3fa96be854e4c82213fedec9e3703cba753d07fad4606aadf58cf7e78e.bn.png)
যেমনটি আপনি দেখতে পাচ্ছেন, এই ডেটাসেটের + পাখির বেশিরভাগই তাদের Max Body Mass এর ক্ষেত্রে ২০০০ এর নিচে পড়ে। ডেটা সম্পর্কে আরও অন্তর্দৃষ্টি অর্জন করতে `bins` প্যারামিটারটি একটি বড় সংখ্যায় পরিবর্তন করুন, যেমন ৩০:
```r
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) + geom_histogram(bins=30)+ylab('Frequency')
```
![ডিস্ট্রিবিউশন-৩bins](../../../../../translated_images/distribution-30bins.6a3921ea7a421bf71f06bf5231009e43d1146f1b8da8dc254e99b5779a4983e5.bn.png)
এই চার্টটি আরও বিস্তারিতভাবে ডিস্ট্রিবিউশন দেখায়। একটি কম বাঁ দিকে ঝুঁকানো চার্ট তৈরি করা যেতে পারে নিশ্চিত করে যে আপনি শুধুমাত্র একটি নির্দিষ্ট পরিসরের মধ্যে ডেটা নির্বাচন করেছেন:
আপনার ডেটা ফিল্টার করুন শুধুমাত্র সেই পাখিদের পেতে যাদের শরীরের ভর ৬০ এর নিচে এবং ৩০ `bins` দেখান:
```r
birds_filtered_1 <- subset(birds_filtered, MaxBodyMass > 1 & MaxBodyMass < 60)
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_histogram(bins=30)+ylab('Frequency')
```
![ফিল্টার করা হিস্টোগ্রাম](../../../../../translated_images/filtered-histogram.6bf5d2bfd82533220e1bd4bc4f7d14308f43746ed66721d9ec8f460732be6674.bn.png)
✅ কিছু অন্যান্য ফিল্টার এবং ডেটা পয়েন্ট চেষ্টা করুন। ডেটার সম্পূর্ণ ডিস্ট্রিবিউশন দেখতে, `['MaxBodyMass']` ফিল্টার সরিয়ে লেবেলযুক্ত ডিস্ট্রিবিউশন দেখান।
হিস্টোগ্রাম কিছু সুন্দর রঙ এবং লেবেলিং উন্নতি করার সুযোগও দেয়:
দুইটি ডিস্ট্রিবিউশনের মধ্যে সম্পর্ক তুলনা করতে একটি 2D হিস্টোগ্রাম তৈরি করুন। আসুন `MaxBodyMass` বনাম `MaxLength` তুলনা করি। `ggplot2` একটি বিল্ট-ইন উপায় প্রদান করে উজ্জ্বল রঙ ব্যবহার করে কনভারজেন্স দেখানোর জন্য:
```r
ggplot(data=birds_filtered_1, aes(x=MaxBodyMass, y=MaxLength) ) +
geom_bin2d() +scale_fill_continuous(type = "viridis")
```
এখানে একটি প্রত্যাশিত অক্ষ বরাবর এই দুটি উপাদানের মধ্যে একটি প্রত্যাশিত সম্পর্ক দেখা যাচ্ছে, একটি বিশেষভাবে শক্তিশালী কনভারজেন্স পয়েন্ট সহ:
![2d প্লট](../../../../../translated_images/2d-plot.c504786f439bd7ebceebf2465c70ca3b124103e06c7ff7214bf24e26f7aec21e.bn.png)
হিস্টোগ্রাম ডিফল্টভাবে সংখ্যাসূচক ডেটার জন্য ভালো কাজ করে। যদি আপনি টেক্সট ডেটা অনুযায়ী ডিস্ট্রিবিউশন দেখতে চান তাহলে কী করবেন?
## টেক্সট ডেটা ব্যবহার করে ডেটাসেটের ডিস্ট্রিবিউশন অন্বেষণ করুন
এই ডেটাসেটে পাখির ক্যাটাগরি, গণ, প্রজাতি, পরিবার এবং সংরক্ষণ অবস্থার পাশাপাশি ভালো তথ্য অন্তর্ভুক্ত রয়েছে। আসুন এই সংরক্ষণ তথ্যটি অন্বেষণ করি। পাখিদের সংরক্ষণ অবস্থার অনুযায়ী ডিস্ট্রিবিউশন কী?
> ✅ ডেটাসেটে সংরক্ষণ অবস্থার বর্ণনা করতে কয়েকটি সংক্ষিপ্ত রূপ ব্যবহার করা হয়েছে। এই সংক্ষিপ্ত রূপগুলো [IUCN Red List Categories](https://www.iucnredlist.org/) থেকে এসেছে, একটি সংস্থা যা প্রজাতির অবস্থার তালিকা করে।
>
> - CR: অত্যন্ত বিপন্ন
> - EN: বিপন্ন
> - EX: বিলুপ্ত
> - LC: কম উদ্বেগ
> - NT: প্রায় বিপন্ন
> - VU: ঝুঁকিপূর্ণ
এগুলো টেক্সট-ভিত্তিক মান, তাই একটি হিস্টোগ্রাম তৈরি করতে আপনাকে একটি রূপান্তর করতে হবে। ফিল্টার করা পাখিদের ডেটাফ্রেম ব্যবহার করে এর সংরক্ষণ অবস্থার সাথে এর সর্বনিম্ন উইংসপ্যান প্রদর্শন করুন। আপনি কী দেখতে পাচ্ছেন?
```r
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'EX'] <- 'x1'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'CR'] <- 'x2'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'EN'] <- 'x3'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'NT'] <- 'x4'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'VU'] <- 'x5'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'LC'] <- 'x6'
ggplot(data=birds_filtered_1, aes(x = MinWingspan, fill = ConservationStatus)) +
geom_histogram(position = "identity", alpha = 0.4, bins = 20) +
scale_fill_manual(name="Conservation Status",values=c("red","green","blue","pink"),labels=c("Endangered","Near Threathened","Vulnerable","Least Concern"))
```
![উইংসপ্যান এবং সংরক্ষণ সংকলন](../../../../../translated_images/wingspan-conservation-collation.4024e9aa6910866aa82f0c6cb6a6b4b925bd10079e6b0ef8f92eefa5a6792f76.bn.png)
সর্বনিম্ন উইংসপ্যান এবং সংরক্ষণ অবস্থার মধ্যে ভালো সম্পর্ক দেখা যাচ্ছে না। এই পদ্ধতি ব্যবহার করে ডেটাসেটের অন্যান্য উপাদান পরীক্ষা করুন। আপনি বিভিন্ন ফিল্টারও চেষ্টা করতে পারেন। কোনো সম্পর্ক খুঁজে পাচ্ছেন কি?
## ডেনসিটি প্লট
আপনি হয়তো লক্ষ্য করেছেন যে আমরা এখন পর্যন্ত যে হিস্টোগ্রামগুলো দেখেছি সেগুলো 'স্টেপড' এবং একটি মসৃণ আর্কে প্রবাহিত হয় না। একটি মসৃণ ডেনসিটি চার্ট দেখানোর জন্য, আপনি একটি ডেনসিটি প্লট চেষ্টা করতে পারেন।
এখন আসুন ডেনসিটি প্লট নিয়ে কাজ করি!
```r
ggplot(data = birds_filtered_1, aes(x = MinWingspan)) +
geom_density()
```
![ডেনসিটি প্লট](../../../../../translated_images/density-plot.675ccf865b76c690487fb7f69420a8444a3515f03bad5482886232d4330f5c85.bn.png)
আপনি দেখতে পাচ্ছেন যে প্লটটি পূর্বের সর্বনিম্ন উইংসপ্যান ডেটার মতোই প্রতিধ্বনিত করছে; এটি শুধু একটু মসৃণ। যদি আপনি দ্বিতীয় চার্টে তৈরি করা সেই খাঁজযুক্ত MaxBodyMass লাইনটি পুনরায় দেখতে চান, আপনি এটি এই পদ্ধতি ব্যবহার করে খুব ভালোভাবে মসৃণ করতে পারেন:
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density()
```
![শরীরের ভরের ডেনসিটি](../../../../../translated_images/bodymass-smooth.d31ce526d82b0a1f19a073815dea28ecfbe58145ec5337e4ef7e8cdac81120b3.bn.png)
যদি আপনি একটি মসৃণ, তবে খুব বেশি মসৃণ না হওয়া লাইন চান, তাহলে `adjust` প্যারামিটার সম্পাদনা করুন:
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density(adjust = 1/5)
```
![কম মসৃণ শরীরের ভর](../../../../../translated_images/less-smooth-bodymass.10f4db8b683cc17d17b2d33f22405413142004467a1493d416608dafecfdee23.bn.png)
✅ এই ধরনের প্লটের জন্য উপলব্ধ প্যারামিটার সম্পর্কে পড়ুন এবং পরীক্ষা করুন!
এই ধরনের চার্ট সুন্দরভাবে ব্যাখ্যামূলক ভিজুয়ালাইজেশন প্রদান করে। উদাহরণস্বরূপ, কয়েকটি কোডের মাধ্যমে আপনি পাখির অর্ডার অনুযায়ী সর্বোচ্চ শরীরের ভরের ডেনসিটি দেখাতে পারেন:
```r
ggplot(data=birds_filtered_1,aes(x = MaxBodyMass, fill = Order)) +
geom_density(alpha=0.5)
```
![অর্ডার অনুযায়ী শরীরের ভর](../../../../../translated_images/bodymass-per-order.9d2b065dd931b928c839d8cdbee63067ab1ae52218a1b90717f4bc744354f485.bn.png)
## 🚀 চ্যালেঞ্জ
হিস্টোগ্রাম একটি সাধারণ স্ক্যাটারপ্লট, বার চার্ট বা লাইন চার্টের চেয়ে বেশি উন্নত ধরনের চার্ট। ইন্টারনেটে অনুসন্ধান করুন এবং হিস্টোগ্রামের ব্যবহারের ভালো উদাহরণ খুঁজুন। সেগুলো কীভাবে ব্যবহার করা হয়, কী প্রদর্শন করে এবং কোন ক্ষেত্র বা অনুসন্ধানের এলাকায় সেগুলো ব্যবহৃত হয় তা দেখুন।
## [পোস্ট-পাঠ কুইজ](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/19)
## পর্যালোচনা ও স্ব-অধ্যয়ন
এই পাঠে, আপনি `ggplot2` ব্যবহার করেছেন এবং আরও উন্নত চার্ট দেখানোর কাজ শুরু করেছেন। `geom_density_2d()` সম্পর্কে গবেষণা করুন, যা "এক বা একাধিক মাত্রায় একটি ধারাবাহিক সম্ভাব্যতা ডেনসিটি কার্ভ"। [ডকুমেন্টেশন](https://ggplot2.tidyverse.org/reference/geom_density_2d.html) পড়ুন এবং এটি কীভাবে কাজ করে তা বুঝুন।
## অ্যাসাইনমেন্ট
[আপনার দক্ষতা প্রয়োগ করুন](assignment.md)
---
**অস্বীকৃতি**:
এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। নথিটির মূল ভাষায় থাকা সংস্করণটিকেই প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ ব্যবহার করার পরামর্শ দেওয়া হয়। এই অনুবাদ ব্যবহারের ফলে সৃষ্ট কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই।