12 KiB
Vizualizuojant pasiskirstymus
![]() |
---|
Vizualizuojant pasiskirstymus - Sketchnote by @nitya |
Ankstesnėje pamokoje sužinojote įdomių faktų apie Minesotos paukščių duomenų rinkinį. Aptikote klaidingus duomenis vizualizuodami išskirtis ir išnagrinėjote skirtumus tarp paukščių kategorijų pagal jų maksimalų ilgį.
Prieš paskaitą vykdomas testas
Tyrinėkite paukščių duomenų rinkinį
Kitas būdas gilintis į duomenis yra pažvelgti į jų pasiskirstymą arba kaip duomenys yra organizuoti pagal ašį. Pavyzdžiui, galbūt norėtumėte sužinoti apie bendrą maksimalios sparnų amplitudės ar maksimalios kūno masės pasiskirstymą Minesotos paukščių duomenų rinkinyje.
Atraskime keletą faktų apie šio duomenų rinkinio pasiskirstymus. Savo R konsolėje importuokite ggplot2
ir duomenų bazę. Pašalinkite išskirtis iš duomenų bazės, kaip tai darėte ankstesnėje temoje.
library(ggplot2)
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
birds_filtered <- subset(birds, MaxWingspan < 500)
head(birds_filtered)
Pavadinimas | MokslinisPavadinimas | Kategorija | Būrys | Šeima | Gentis | ApsaugosStatusas | MinIlgis | MaxIlgis | MinKūnoMasa | MaxKūnoMasa | MinSparnųAmplitudė | MaxSparnųAmplitudė | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Juodapilvė švilpiko antis | Dendrocygna autumnalis | Antys/Žąsys/Vandensf. | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
1 | Rudapilvė švilpiko antis | Dendrocygna bicolor | Antys/Žąsys/Vandensf. | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
2 | Snieginė žąsis | Anser caerulescens | Antys/Žąsys/Vandensf. | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
3 | Rosso žąsis | Anser rossii | Antys/Žąsys/Vandensf. | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
4 | Didžioji baltakaktė žąsis | Anser albifrons | Antys/Žąsys/Vandensf. | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
Apskritai, galite greitai pažvelgti į tai, kaip duomenys pasiskirstę, naudodami sklaidos diagramą, kaip tai darėme ankstesnėje pamokoje:
ggplot(data=birds_filtered, aes(x=Order, y=MaxLength,group=1)) +
geom_point() +
ggtitle("Max Length per order") + coord_flip()
Tai suteikia bendrą paukščių kūno ilgio pasiskirstymo pagal būrį apžvalgą, tačiau tai nėra optimalus būdas tikriems pasiskirstymams parodyti. Šią užduotį paprastai atlieka histograma.
Darbas su histogramomis
ggplot2
siūlo puikius būdus vizualizuoti duomenų pasiskirstymą naudojant histogramas. Šio tipo diagrama yra panaši į stulpelinę diagramą, kur pasiskirstymas matomas per stulpelių kilimą ir kritimą. Norint sukurti histogramą, reikia skaitinių duomenų. Histogramai sukurti galite nurodyti diagramos tipą kaip 'hist'. Ši diagrama rodo MaxBodyMass pasiskirstymą visame duomenų rinkinio skaitinių duomenų diapazone. Padalindama duomenų masyvą į mažesnius intervalus, ji gali parodyti duomenų reikšmių pasiskirstymą:
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) +
geom_histogram(bins=10)+ylab('Frequency')
Kaip matote, dauguma iš 400+ paukščių šiame duomenų rinkinyje patenka į mažesnę nei 2000 Max Kūno Masės ribą. Gaukite daugiau įžvalgų apie duomenis, pakeisdami bins
parametrą į didesnį skaičių, pavyzdžiui, 30:
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) + geom_histogram(bins=30)+ylab('Frequency')
Ši diagrama rodo pasiskirstymą šiek tiek detaliau. Mažiau į kairę pasvirusią diagramą būtų galima sukurti užtikrinant, kad pasirinktumėte tik duomenis tam tikrame diapazone:
Filtruokite savo duomenis, kad gautumėte tik tuos paukščius, kurių kūno masė yra mažesnė nei 60, ir parodykite 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')
✅ Išbandykite kitus filtrus ir duomenų taškus. Norėdami pamatyti visą duomenų pasiskirstymą, pašalinkite ['MaxBodyMass']
filtrą, kad parodytumėte pažymėtus pasiskirstymus.
Histograma taip pat siūlo gražius spalvų ir žymėjimo patobulinimus, kuriuos verta išbandyti:
Sukurkite 2D histogramą, kad palygintumėte dviejų pasiskirstymų santykį. Palyginkime MaxBodyMass
ir MaxLength
. ggplot2
siūlo įmontuotą būdą parodyti susiliejimą naudojant ryškesnes spalvas:
ggplot(data=birds_filtered_1, aes(x=MaxBodyMass, y=MaxLength) ) +
geom_bin2d() +scale_fill_continuous(type = "viridis")
Atrodo, kad tarp šių dviejų elementų yra tikėtinas koreliavimas pagal numatomą ašį, su viena ypač stipria susiliejimo vieta:
Histogramų numatytasis veikimas gerai tinka skaitiniams duomenims. O kas, jei reikia pamatyti pasiskirstymus pagal tekstinius duomenis?
Tyrinėkite duomenų rinkinį pagal tekstinius duomenis
Šiame duomenų rinkinyje taip pat yra geros informacijos apie paukščių kategoriją, jų gentį, rūšį, šeimą bei apsaugos statusą. Panagrinėkime šią apsaugos informaciją. Koks yra paukščių pasiskirstymas pagal jų apsaugos statusą?
✅ Duomenų rinkinyje naudojami keli akronimai, apibūdinantys apsaugos statusą. Šie akronimai yra iš IUCN Raudonojo sąrašo kategorijų, organizacijos, kataloguojančios rūšių būklę.
- CR: Kritiškai nykstantis
- EN: Nykstantis
- EX: Išnykęs
- LC: Mažiausiai susirūpinimą keliantis
- NT: Beveik nykstantis
- VU: Pažeidžiamas
Kadangi tai yra tekstinės reikšmės, reikės atlikti transformaciją, kad sukurtumėte histogramą. Naudodami filteredBirds
duomenų rėmelį, parodykite jo apsaugos statusą kartu su minimaliu sparnų amplitudės dydžiu. Ką pastebite?
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"))
Atrodo, kad nėra gero koreliavimo tarp minimalaus sparnų amplitudės dydžio ir apsaugos statuso. Išbandykite kitus duomenų rinkinio elementus naudodami šį metodą. Taip pat galite išbandyti skirtingus filtrus. Ar pastebite kokį nors koreliavimą?
Tankio diagramos
Galbūt pastebėjote, kad iki šiol nagrinėtos histogramos yra „laiptinės“ ir nesudaro sklandžios kreivės. Norėdami parodyti sklandesnę tankio diagramą, galite išbandyti tankio diagramą.
Dabar dirbkime su tankio diagramomis!
ggplot(data = birds_filtered_1, aes(x = MinWingspan)) +
geom_density()
Galite matyti, kaip ši diagrama atspindi ankstesnę minimalaus sparnų amplitudės duomenų diagramą; ji tiesiog šiek tiek sklandesnė. Jei norėtumėte peržiūrėti tą dantytą MaxBodyMass liniją antroje sukurtoje diagramoje, galėtumėte ją labai gerai išlyginti, naudodami šį metodą:
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density()
Jei norėtumėte sklandžios, bet ne per daug sklandžios linijos, redaguokite adjust
parametrą:
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density(adjust = 1/5)
✅ Perskaitykite apie šio tipo diagramos parametrus ir eksperimentuokite!
Šio tipo diagrama siūlo gražiai paaiškinančias vizualizacijas. Pavyzdžiui, su keliomis kodo eilutėmis galite parodyti maksimalios kūno masės tankį pagal paukščių būrį:
ggplot(data=birds_filtered_1,aes(x = MaxBodyMass, fill = Order)) +
geom_density(alpha=0.5)
🚀 Iššūkis
Histogramų naudojimas yra sudėtingesnis nei paprastų sklaidos diagramų, stulpelinių diagramų ar linijinių diagramų. Ieškokite internete gerų histogramų naudojimo pavyzdžių. Kaip jos naudojamos, ką jos parodo ir kokiose srityse ar tyrimų srityse jos dažniausiai naudojamos?
Po paskaitos vykdomas testas
Apžvalga ir savarankiškas mokymasis
Šioje pamokoje naudojote ggplot2
ir pradėjote kurti sudėtingesnes diagramas. Atlikite tyrimą apie geom_density_2d()
, „nepertraukiamą tikimybės tankio kreivę vienoje ar keliose dimensijose“. Perskaitykite dokumentaciją, kad suprastumėte, kaip ji veikia.
Užduotis
Atsakomybės apribojimas:
Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, atkreipiame dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudotis profesionalių vertėjų paslaugomis. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus aiškinimus, kylančius dėl šio vertimo naudojimo.