|
4 weeks ago | |
---|---|---|
.. | ||
README.md | 4 weeks ago | |
assignment.md | 4 weeks ago |
README.md
Visualisering af mængder
![]() |
---|
Visualisering af mængder - Sketchnote af @nitya |
I denne lektion vil du udforske, hvordan du kan bruge nogle af de mange tilgængelige R-pakker til at lære at skabe interessante visualiseringer omkring begrebet mængde. Ved at bruge et renset datasæt om fuglene i Minnesota kan du lære mange interessante fakta om det lokale dyreliv.
Quiz før lektionen
Observer vingefang med ggplot2
Et fremragende bibliotek til at skabe både simple og avancerede diagrammer og grafer af forskellige slags er ggplot2. Generelt indebærer processen med at plotte data ved hjælp af disse biblioteker at identificere de dele af din dataframe, du vil fokusere på, udføre nødvendige transformationer på dataene, tildele værdier til x- og y-aksen, beslutte hvilken type diagram der skal vises, og derefter vise diagrammet.
ggplot2
er et system til deklarativt at skabe grafik baseret på "The Grammar of Graphics". Grammar of Graphics er en generel tilgang til datavisualisering, der opdeler grafer i semantiske komponenter som skalaer og lag. Med andre ord gør enkeltheden i at skabe grafer og diagrammer for univariat eller multivariat data med lidt kode ggplot2
til den mest populære pakke til visualiseringer i R. Brugeren fortæller ggplot2
, hvordan variabler skal mappes til æstetik, hvilke grafiske elementer der skal bruges, og ggplot2
tager sig af resten.
✅ Diagram = Data + Æstetik + Geometri
- Data refererer til datasættet
- Æstetik angiver de variabler, der skal undersøges (x- og y-variabler)
- Geometri refererer til typen af diagram (linjediagram, søjlediagram osv.)
Vælg den bedste geometri (diagramtype) i forhold til dine data og den historie, du vil fortælle gennem diagrammet.
- For at analysere tendenser: linje, søjle
- For at sammenligne værdier: søjle, cirkel, punktdiagram
- For at vise, hvordan dele relaterer sig til helheden: cirkeldiagram
- For at vise fordelingen af data: punktdiagram, søjle
- For at vise relationer mellem værdier: linje, punktdiagram, boblediagram
✅ Du kan også tjekke dette beskrivende cheatsheet for ggplot2.
Byg et linjediagram over fuglenes vingefang
Åbn R-konsollen og importer datasættet.
Bemærk: Datasættet er gemt i roden af dette repo i
/data
-mappen.
Lad os importere datasættet og observere de første fem rækker af dataene.
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
head(birds)
De første rækker af dataene indeholder en blanding af tekst og tal:
Navn | VidenskabeligtNavn | Kategori | Orden | Familie | Slægt | Bevaringsstatus | MinLængde | MaxLængde | MinKropsvægt | MaxKropsvægt | MinVingefang | MaxVingefang | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Sortbuget fløjlsand | Dendrocygna autumnalis | Ænder/Gæs/Vandfugle | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
1 | Fløjlsand | Dendrocygna bicolor | Ænder/Gæs/Vandfugle | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
2 | Snegås | Anser caerulescens | Ænder/Gæs/Vandfugle | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
3 | Ross' gås | Anser rossii | Ænder/Gæs/Vandfugle | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
4 | Stor hvidkindet gås | Anser albifrons | Ænder/Gæs/Vandfugle | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
Lad os starte med at plotte nogle af de numeriske data ved hjælp af et grundlæggende linjediagram. Antag, at du vil have et overblik over det maksimale vingefang for disse interessante fugle.
install.packages("ggplot2")
library("ggplot2")
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line()
Her installerer du ggplot2
-pakken og importerer den derefter til arbejdsområdet ved hjælp af kommandoen library("ggplot2")
. For at plotte et diagram i ggplot bruges funktionen ggplot()
, hvor du angiver datasættet samt x- og y-variabler som attributter. I dette tilfælde bruger vi funktionen geom_line()
, da vi ønsker at plotte et linjediagram.
Hvad bemærker du med det samme? Der ser ud til at være mindst én outlier – det er et ret stort vingefang! Et vingefang på over 2000 centimeter svarer til mere end 20 meter – er der pterodaktyler i Minnesota? Lad os undersøge det nærmere.
Selvom du hurtigt kunne sortere i Excel for at finde disse outliers, som sandsynligvis er tastefejl, fortsæt visualiseringsprocessen ved at arbejde direkte fra diagrammet.
Tilføj labels til x-aksen for at vise, hvilke fugle der er tale om:
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line() +
theme(axis.text.x = element_text(angle = 45, hjust=1))+
xlab("Birds") +
ylab("Wingspan (CM)") +
ggtitle("Max Wingspan in Centimeters")
Vi angiver vinklen i theme
og specificerer labels for x- og y-aksen i henholdsvis xlab()
og ylab()
. ggtitle()
giver diagrammet en titel.
Selv med rotationen af labels sat til 45 grader er der for mange til at læse. Lad os prøve en anden strategi: kun at label outliers og placere labels inden for diagrammet. Du kan bruge et punktdiagram for at skabe mere plads til labeling:
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_point() +
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank())
ylab("Wingspan (CM)") +
ggtitle("Max Wingspan in Centimeters") +
Hvad sker der her? Du brugte funktionen geom_point()
til at plotte punkter. Med dette tilføjede du labels for fugle med MaxWingspan > 500
og skjulte også labels på x-aksen for at rydde op i diagrammet.
Hvad opdager du?
Filtrer dine data
Både den skaldede ørn og præriefalken, som sandsynligvis er meget store fugle, ser ud til at være fejlmærkede med et ekstra 0 tilføjet til deres maksimale vingefang. Det er usandsynligt, at du møder en skaldet ørn med et vingefang på 25 meter, men hvis du gør, så lad os det vide! Lad os oprette en ny dataframe uden disse to outliers:
birds_filtered <- subset(birds, MaxWingspan < 500)
ggplot(data=birds_filtered, aes(x=Name, y=MaxWingspan,group=1)) +
geom_point() +
ylab("Wingspan (CM)") +
xlab("Birds") +
ggtitle("Max Wingspan in Centimeters") +
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
theme(axis.text.x=element_blank(), axis.ticks.x=element_blank())
Vi oprettede en ny dataframe birds_filtered
og plottede derefter et punktdiagram. Ved at filtrere outliers ud er dine data nu mere sammenhængende og forståelige.
Nu hvor vi har et renere datasæt, i det mindste hvad angår vingefang, lad os opdage mere om disse fugle.
Mens linje- og punktdiagrammer kan vise information om dataværdier og deres fordeling, vil vi tænke over de værdier, der er iboende i dette datasæt. Du kunne skabe visualiseringer for at besvare følgende spørgsmål om mængde:
Hvor mange kategorier af fugle er der, og hvad er deres antal?
Hvor mange fugle er uddøde, truede, sjældne eller almindelige?
Hvor mange er der af de forskellige slægter og ordener i Linnaeus' terminologi?
Udforsk søjlediagrammer
Søjlediagrammer er praktiske, når du skal vise grupperinger af data. Lad os udforske kategorierne af fugle, der findes i dette datasæt, for at se, hvilken der er mest almindelig i antal.
Lad os oprette et søjlediagram baseret på de filtrerede data.
install.packages("dplyr")
install.packages("tidyverse")
library(lubridate)
library(scales)
library(dplyr)
library(ggplot2)
library(tidyverse)
birds_filtered %>% group_by(Category) %>%
summarise(n=n(),
MinLength = mean(MinLength),
MaxLength = mean(MaxLength),
MinBodyMass = mean(MinBodyMass),
MaxBodyMass = mean(MaxBodyMass),
MinWingspan=mean(MinWingspan),
MaxWingspan=mean(MaxWingspan)) %>%
gather("key", "value", - c(Category, n)) %>%
ggplot(aes(x = Category, y = value, group = key, fill = key)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("#D62728", "#FF7F0E", "#8C564B","#2CA02C", "#1F77B4", "#9467BD")) +
xlab("Category")+ggtitle("Birds of Minnesota")
I det følgende snippet installerer vi pakkerne dplyr og lubridate for at hjælpe med at manipulere og gruppere data for at plotte et stablet søjlediagram. Først grupperer du dataene efter fuglenes Category
og opsummerer kolonnerne MinLength
, MaxLength
, MinBodyMass
, MaxBodyMass
, MinWingspan
, MaxWingspan
. Derefter plottes søjlediagrammet ved hjælp af ggplot2
-pakken, hvor du specificerer farverne for de forskellige kategorier og labels.
Dette søjlediagram er dog ulæseligt, fordi der er for mange ikke-grupperede data. Du skal vælge kun de data, du vil plotte, så lad os se på længden af fugle baseret på deres kategori.
Filtrer dine data til kun at inkludere fuglenes kategori.
Da der er mange kategorier, kan du vise dette diagram lodret og justere højden for at tage højde for alle dataene:
birds_count<-dplyr::count(birds_filtered, Category, sort = TRUE)
birds_count$Category <- factor(birds_count$Category, levels = birds_count$Category)
ggplot(birds_count,aes(Category,n))+geom_bar(stat="identity")+coord_flip()
Du tæller først unikke værdier i kolonnen Category
og sorterer dem derefter i en ny dataframe birds_count
. Disse sorterede data faktoreres derefter på samme niveau, så de plottes i den sorterede rækkefølge. Ved hjælp af ggplot2
plottes dataene derefter i et søjlediagram. coord_flip()
plottes som vandrette søjler.
Dette søjlediagram giver et godt overblik over antallet af fugle i hver kategori. Med et øjeblik ser du, at det største antal fugle i denne region tilhører kategorien Ænder/Gæs/Vandfugle. Minnesota er trods alt "de 10.000 søers land", så det er ikke overraskende!
✅ Prøv nogle andre optællinger på dette datasæt. Er der noget, der overrasker dig?
Sammenligning af data
Du kan prøve forskellige sammenligninger af grupperede data ved at oprette nye akser. Prøv en sammenligning af fuglenes MaxLength baseret på deres kategori:
birds_grouped <- birds_filtered %>%
group_by(Category) %>%
summarise(
MaxLength = max(MaxLength, na.rm = T),
MinLength = max(MinLength, na.rm = T)
) %>%
arrange(Category)
ggplot(birds_grouped,aes(Category,MaxLength))+geom_bar(stat="identity")+coord_flip()
Vi grupperer dataene birds_filtered
efter Category
og plottede derefter et søjlediagram.
Intet er overraskende her: kolibrier har den mindste MaxLength sammenlignet med pelikaner eller gæs. Det er godt, når data giver logisk mening!
Du kan skabe mere interessante visualiseringer af søjlediagrammer ved at overlejre data. Lad os overlejre Minimum og Maksimum Længde på en given fuglekategori:
ggplot(data=birds_grouped, aes(x=Category)) +
geom_bar(aes(y=MaxLength), stat="identity", position ="identity", fill='blue') +
geom_bar(aes(y=MinLength), stat="identity", position="identity", fill='orange')+
coord_flip()
🚀 Udfordring
Dette fugledatasæt tilbyder en rigdom af information om forskellige typer fugle inden for et bestemt økosystem. Søg på internettet og se, om du kan finde andre datasæt om fugle. Øv dig i at bygge diagrammer og grafer omkring disse fugle for at opdage fakta, du ikke kendte.
Quiz efter lektionen
Gennemgang & Selvstudie
Denne første lektion har givet dig noget information om, hvordan du bruger ggplot2
til at visualisere mængder. Lav noget research om andre måder at arbejde med datasæt til visualisering. Undersøg og kig efter datasæt, som du kunne visualisere ved hjælp af andre pakker som Lattice og Plotly.
Opgave
Ansvarsfraskrivelse:
Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Selvom vi bestræber os på nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse.