16 KiB
تجسم توزیعها
![]() |
---|
تجسم توزیعها - طرح دستی توسط @nitya |
در درس قبلی، شما برخی حقایق جالب درباره یک مجموعه داده مربوط به پرندگان مینهسوتا یاد گرفتید. شما با تجسم دادههای پرت، برخی دادههای اشتباه را پیدا کردید و تفاوتهای بین دستههای پرندگان را بر اساس طول حداکثر آنها بررسی کردید.
آزمون پیش از درس
بررسی مجموعه داده پرندگان
یکی دیگر از روشهای بررسی دادهها، نگاه کردن به توزیع آنها است، یا اینکه دادهها چگونه در طول یک محور سازماندهی شدهاند. شاید، برای مثال، بخواهید درباره توزیع کلی طول بال حداکثر یا جرم بدن حداکثر پرندگان مینهسوتا در این مجموعه داده اطلاعات کسب کنید.
بیایید برخی حقایق درباره توزیعهای داده در این مجموعه داده را کشف کنیم. در کنسول R خود، ggplot2
و پایگاه داده را وارد کنید. دادههای پرت را از پایگاه داده حذف کنید، همانطور که در موضوع قبلی انجام دادید.
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 |
به طور کلی، میتوانید به سرعت نحوه توزیع دادهها را با استفاده از نمودار پراکندگی مشاهده کنید، همانطور که در درس قبلی انجام دادید:
ggplot(data=birds_filtered, aes(x=Order, y=MaxLength,group=1)) +
geom_point() +
ggtitle("Max Length per order") + coord_flip()
این نمودار نمای کلی از توزیع طول بدن بر اساس راسته پرندگان ارائه میدهد، اما بهترین روش برای نمایش توزیعهای واقعی نیست. این کار معمولاً با ایجاد یک هیستوگرام انجام میشود.
کار با هیستوگرامها
ggplot2
روشهای بسیار خوبی برای تجسم توزیع دادهها با استفاده از هیستوگرامها ارائه میدهد. این نوع نمودار شبیه نمودار میلهای است که توزیع را میتوان از طریق افزایش و کاهش میلهها مشاهده کرد. برای ساخت یک هیستوگرام، به دادههای عددی نیاز دارید. برای ساخت هیستوگرام، میتوانید نموداری با نوع 'hist' برای هیستوگرام رسم کنید. این نمودار توزیع جرم بدن حداکثر برای کل محدوده دادههای عددی مجموعه داده را نشان میدهد. با تقسیم آرایه دادهها به بخشهای کوچکتر، میتواند توزیع مقادیر دادهها را نمایش دهد:
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) +
geom_histogram(bins=10)+ylab('Frequency')
همانطور که مشاهده میکنید، بیشتر از 400 پرنده در این مجموعه داده در محدوده زیر 2000 برای جرم بدن حداکثر قرار دارند. با تغییر پارامتر bins
به عددی بالاتر، مانند 30، اطلاعات بیشتری کسب کنید:
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) + geom_histogram(bins=30)+ylab('Frequency')
این نمودار توزیع را به صورت کمی دقیقتر نشان میدهد. میتوان نموداری کمتر متمایل به سمت چپ ایجاد کرد، با اطمینان از اینکه فقط دادههای در یک محدوده خاص انتخاب شدهاند:
دادههای خود را فیلتر کنید تا فقط پرندگانی که جرم بدن آنها زیر 60 است دریافت کنید و 30 bins
نمایش دهید:
birds_filtered_1 <- subset(birds_filtered, MaxBodyMass > 1 & MaxBodyMass < 60)
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_histogram(bins=30)+ylab('Frequency')
✅ برخی فیلترها و نقاط داده دیگر را امتحان کنید. برای مشاهده توزیع کامل دادهها، فیلتر ['MaxBodyMass']
را حذف کنید تا توزیعهای برچسبگذاری شده نمایش داده شوند.
هیستوگرام همچنین برخی بهبودهای رنگ و برچسبگذاری جذاب برای امتحان کردن ارائه میدهد:
یک هیستوگرام دوبعدی ایجاد کنید تا رابطه بین دو توزیع را مقایسه کنید. بیایید MaxBodyMass
را با MaxLength
مقایسه کنیم. ggplot2
یک روش داخلی برای نمایش همگرایی با استفاده از رنگهای روشنتر ارائه میدهد:
ggplot(data=birds_filtered_1, aes(x=MaxBodyMass, y=MaxLength) ) +
geom_bin2d() +scale_fill_continuous(type = "viridis")
به نظر میرسد یک همبستگی مورد انتظار بین این دو عنصر در طول یک محور مورد انتظار وجود دارد، با یک نقطه همگرایی بسیار قوی:
هیستوگرامها به طور پیشفرض برای دادههای عددی خوب کار میکنند. اگر نیاز داشته باشید توزیعها را بر اساس دادههای متنی مشاهده کنید چه باید کرد؟
بررسی مجموعه داده برای توزیعها با استفاده از دادههای متنی
این مجموعه داده همچنین اطلاعات خوبی درباره دستهبندی پرندگان و جنس، گونه، و خانواده آنها و همچنین وضعیت حفاظتی آنها ارائه میدهد. بیایید این اطلاعات حفاظتی را بررسی کنیم. توزیع پرندگان بر اساس وضعیت حفاظتی آنها چگونه است؟
✅ در مجموعه داده، چندین مخفف برای توصیف وضعیت حفاظتی استفاده شده است. این مخففها از دستهبندیهای فهرست قرمز IUCN گرفته شدهاند، سازمانی که وضعیت گونهها را فهرستبندی میکند.
- CR: در معرض خطر بحرانی
- EN: در معرض خطر
- EX: منقرض شده
- LC: کمترین نگرانی
- NT: نزدیک به تهدید
- VU: آسیبپذیر
این مقادیر متنی هستند، بنابراین باید یک تبدیل انجام دهید تا یک هیستوگرام ایجاد کنید. با استفاده از dataframe فیلتر شده پرندگان، وضعیت حفاظتی آنها را همراه با طول بال حداقل نمایش دهید. چه چیزی مشاهده میکنید؟
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"))
به نظر نمیرسد که همبستگی خوبی بین طول بال حداقل و وضعیت حفاظتی وجود داشته باشد. سایر عناصر مجموعه داده را با استفاده از این روش آزمایش کنید. میتوانید فیلترهای مختلفی را نیز امتحان کنید. آیا همبستگیای پیدا میکنید؟
نمودارهای چگالی
ممکن است متوجه شده باشید که هیستوگرامهایی که تاکنون مشاهده کردهایم 'پلهای' هستند و به صورت یک قوس روان جریان ندارند. برای نمایش یک نمودار چگالی روانتر، میتوانید یک نمودار چگالی امتحان کنید.
بیایید اکنون با نمودارهای چگالی کار کنیم!
ggplot(data = birds_filtered_1, aes(x = MinWingspan)) +
geom_density()
میتوانید ببینید که نمودار دادههای طول بال حداقل قبلی را بازتاب میدهد؛ فقط کمی روانتر است. اگر بخواهید آن خط پلهای جرم بدن حداکثر در نمودار دوم که ساختید را بازبینی کنید، میتوانید آن را با استفاده از این روش بسیار خوب روان کنید:
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density()
اگر بخواهید یک خط روان، اما نه خیلی روان داشته باشید، پارامتر adjust
را ویرایش کنید:
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density(adjust = 1/5)
✅ درباره پارامترهای موجود برای این نوع نمودار بخوانید و آزمایش کنید!
این نوع نمودار تجسمهای توضیحی زیبایی ارائه میدهد. برای مثال، با چند خط کد میتوانید چگالی جرم بدن حداکثر بر اساس راسته پرندگان را نمایش دهید:
ggplot(data=birds_filtered_1,aes(x = MaxBodyMass, fill = Order)) +
geom_density(alpha=0.5)
🚀 چالش
هیستوگرامها نوعی نمودار پیچیدهتر نسبت به نمودارهای پراکندگی ساده، نمودارهای میلهای یا نمودارهای خطی هستند. در اینترنت جستجو کنید تا نمونههای خوبی از استفاده از هیستوگرامها پیدا کنید. آنها چگونه استفاده میشوند، چه چیزی را نشان میدهند، و در چه زمینهها یا حوزههای تحقیقاتی تمایل به استفاده دارند؟
آزمون پس از درس
مرور و مطالعه شخصی
در این درس، شما از ggplot2
استفاده کردید و شروع به نمایش نمودارهای پیچیدهتر کردید. درباره geom_density_2d()
که یک "منحنی چگالی احتمال پیوسته در یک یا چند بعد" است تحقیق کنید. مستندات را بخوانید تا بفهمید چگونه کار میکند.
تکلیف
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه میشود از ترجمه انسانی حرفهای استفاده کنید. ما هیچ مسئولیتی در قبال سوء تفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.