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.

12 KiB

Visualisera distributioner

 Sketchnote av (@sketchthedocs)
Visualisera distributioner - Sketchnote av @nitya

I den föregående lektionen lärde du dig några intressanta fakta om en dataset om fåglar i Minnesota. Du hittade felaktiga data genom att visualisera avvikare och tittade på skillnaderna mellan fågelkategorier baserat på deras maximala längd.

Quiz före föreläsningen

Utforska datasetet om fåglar

Ett annat sätt att gräva i data är att titta på dess distribution, eller hur datan är organiserad längs en axel. Kanske vill du till exempel lära dig om den generella distributionen, för detta dataset, av den maximala vingbredden eller den maximala kroppsmassan för fåglarna i Minnesota.

Låt oss upptäcka några fakta om distributionerna av data i detta dataset. I din R-konsol, importera ggplot2 och databasen. Ta bort avvikare från databasen precis som i det föregående ämnet.

library(ggplot2)

birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")

birds_filtered <- subset(birds, MaxWingspan < 500)
head(birds_filtered)
Namn VetenskapligtNamn Kategori Ordning Familj Släkte Bevarandestatus MinLängd MaxLängd MinKroppsmassa MaxKroppsmassa MinVingbredd MaxVingbredd
0 Svartbukig visselanka Dendrocygna autumnalis Änder/Gäss/Vattenfåglar Anseriformes Anatidae Dendrocygna LC 47 56 652 1020 76 94
1 Rödbrun visselanka Dendrocygna bicolor Änder/Gäss/Vattenfåglar Anseriformes Anatidae Dendrocygna LC 45 53 712 1050 85 93
2 Snögås Anser caerulescens Änder/Gäss/Vattenfåglar Anseriformes Anatidae Anser LC 64 79 2050 4050 135 165
3 Ross' gås Anser rossii Änder/Gäss/Vattenfåglar Anseriformes Anatidae Anser LC 57.3 64 1066 1567 113 116
4 Större vitkindad gås Anser albifrons Änder/Gäss/Vattenfåglar Anseriformes Anatidae Anser LC 64 81 1930 3310 130 165

Generellt kan du snabbt se hur data är fördelad genom att använda ett spridningsdiagram, som vi gjorde i den föregående lektionen:

ggplot(data=birds_filtered, aes(x=Order, y=MaxLength,group=1)) +
  geom_point() +
  ggtitle("Max Length per order") + coord_flip()

max längd per ordning

Detta ger en översikt över den generella fördelningen av kroppslängd per fågelordning, men det är inte det optimala sättet att visa verkliga fördelningar. Den uppgiften hanteras vanligtvis genom att skapa ett histogram.

Arbeta med histogram

ggplot2 erbjuder mycket bra sätt att visualisera datafördelning med hjälp av histogram. Denna typ av diagram liknar ett stapeldiagram där fördelningen kan ses via en uppgång och nedgång av staplarna. För att bygga ett histogram behöver du numerisk data. För att skapa ett histogram kan du plotta ett diagram och definiera typen som 'hist' för histogram. Detta diagram visar fördelningen av MaxKroppsmassa för hela datasetets numeriska data. Genom att dela upp datamängden i mindre fack kan det visa fördelningen av datavärdena:

ggplot(data = birds_filtered, aes(x = MaxBodyMass)) + 
  geom_histogram(bins=10)+ylab('Frequency')

fördelning över hela datasetet

Som du kan se, faller de flesta av de 400+ fåglarna i detta dataset inom intervallet under 2000 för deras Max Kroppsmassa. Få mer insikt i datan genom att ändra bins-parametern till ett högre nummer, något som 30:

ggplot(data = birds_filtered, aes(x = MaxBodyMass)) + geom_histogram(bins=30)+ylab('Frequency')

fördelning-30bins

Detta diagram visar fördelningen på ett lite mer detaljerat sätt. Ett diagram som är mindre snedvridet åt vänster kan skapas genom att säkerställa att du endast väljer data inom ett visst intervall:

Filtrera din data för att få endast de fåglar vars kroppsmassa är under 60, och visa 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')

filtrerat histogram

Prova några andra filter och datapunkter. För att se den fullständiga fördelningen av datan, ta bort ['MaxBodyMass']-filtret för att visa märkta fördelningar.

Histogrammet erbjuder också några trevliga färg- och märkningsförbättringar att prova:

Skapa ett 2D-histogram för att jämföra relationen mellan två fördelningar. Låt oss jämföra MaxBodyMass vs. MaxLength. ggplot2 erbjuder ett inbyggt sätt att visa konvergens med hjälp av ljusare färger:

ggplot(data=birds_filtered_1, aes(x=MaxBodyMass, y=MaxLength) ) +
  geom_bin2d() +scale_fill_continuous(type = "viridis")

Det verkar finnas en förväntad korrelation mellan dessa två element längs en förväntad axel, med en särskilt stark konvergenspunkt:

2d diagram

Histogram fungerar bra som standard för numerisk data. Vad händer om du behöver se fördelningar enligt textdata?

Utforska datasetet för fördelningar med hjälp av textdata

Detta dataset innehåller också bra information om fågelkategorin och dess släkte, art och familj samt dess bevarandestatus. Låt oss gräva i denna bevarandestatusinformation. Hur ser fördelningen ut för fåglarna enligt deras bevarandestatus?

I datasetet används flera akronymer för att beskriva bevarandestatus. Dessa akronymer kommer från IUCN Red List Categories, en organisation som katalogiserar arters status.

  • CR: Kritiskt hotad
  • EN: Hotad
  • EX: Utdöd
  • LC: Minst bekymrad
  • NT: Nära hotad
  • VU: Sårbar

Dessa är textbaserade värden så du behöver göra en transformering för att skapa ett histogram. Använd den filtreradeBirds-databasen och visa dess bevarandestatus tillsammans med dess Minsta Vingbredd. Vad ser du?

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"))

vingbredd och bevarande

Det verkar inte finnas någon bra korrelation mellan minsta vingbredd och bevarandestatus. Testa andra element i datasetet med denna metod. Du kan prova olika filter också. Hittar du någon korrelation?

Täthetsdiagram

Du kanske har märkt att histogrammen vi har tittat på hittills är "stegade" och inte flödar smidigt i en båge. För att visa ett smidigare täthetsdiagram kan du prova ett täthetsdiagram.

Låt oss arbeta med täthetsdiagram nu!

ggplot(data = birds_filtered_1, aes(x = MinWingspan)) + 
  geom_density()

täthetsdiagram

Du kan se hur diagrammet speglar det tidigare för Minsta Vingbredd-data; det är bara lite smidigare. Om du ville återbesöka den hackiga MaxKroppsmassa-linjen i det andra diagrammet du byggde, kunde du jämna ut den mycket väl genom att återskapa den med denna metod:

ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) + 
  geom_density()

kroppsmassa täthet

Om du ville ha en smidig, men inte alltför smidig linje, redigera adjust-parametern:

ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) + 
  geom_density(adjust = 1/5)

mindre smidig kroppsmassa

Läs om de parametrar som finns tillgängliga för denna typ av diagram och experimentera!

Denna typ av diagram erbjuder vackert förklarande visualiseringar. Med några få rader kod kan du till exempel visa max kroppsmassa täthet per fågelordning:

ggplot(data=birds_filtered_1,aes(x = MaxBodyMass, fill = Order)) +
  geom_density(alpha=0.5)

kroppsmassa per ordning

🚀 Utmaning

Histogram är en mer sofistikerad typ av diagram än grundläggande spridningsdiagram, stapeldiagram eller linjediagram. Gör en sökning på internet för att hitta bra exempel på användningen av histogram. Hur används de, vad visar de, och inom vilka områden eller forskningsfält tenderar de att användas?

Quiz efter föreläsningen

Granskning & Självstudier

I denna lektion använde du ggplot2 och började arbeta med att visa mer sofistikerade diagram. Gör lite forskning om geom_density_2d() en "kontinuerlig sannolikhetstäthetskurva i en eller flera dimensioner". Läs igenom dokumentationen för att förstå hur det fungerar.

Uppgift

Använd dina färdigheter


Ansvarsfriskrivning:
Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, bör du vara medveten om att automatiserade översättningar kan innehålla fel eller inexaktheter. Det ursprungliga dokumentet på dess originalspråk bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som uppstår vid användning av denna översättning.