15 KiB
Vizualizace množství
![]() |
---|
Vizualizace množství - Sketchnote od @nitya |
V této lekci se naučíte, jak používat některé z mnoha dostupných knihoven balíčků R k vytváření zajímavých vizualizací zaměřených na koncept množství. Pomocí vyčištěného datasetu o ptácích z Minnesoty se můžete dozvědět mnoho zajímavých faktů o místní fauně.
Kvíz před přednáškou
Pozorování rozpětí křídel pomocí ggplot2
Vynikající knihovna pro vytváření jednoduchých i sofistikovaných grafů a diagramů různých typů je ggplot2. Obecně proces vytváření grafů pomocí těchto knihoven zahrnuje identifikaci částí vašeho dataframe, které chcete cílit, provedení potřebných transformací dat, přiřazení hodnot os x a y, rozhodnutí o typu grafu a následné zobrazení grafu.
ggplot2
je systém pro deklarativní vytváření grafiky založený na Gramatice grafiky. Gramatika grafiky je obecné schéma pro vizualizaci dat, které rozděluje grafy na sémantické komponenty, jako jsou měřítka a vrstvy. Jinými slovy, snadnost vytváření grafů a diagramů pro jednorozměrná nebo vícerozměrná data s minimálním množstvím kódu činí z ggplot2
nejoblíbenější balíček používaný pro vizualizace v R. Uživatel určuje, jak ggplot2
mapuje proměnné na estetiku, grafické prvky, které se mají použít, a ggplot2
se postará o zbytek.
✅ Graf = Data + Estetika + Geometrie
- Data odkazují na dataset
- Estetika označuje proměnné, které se mají studovat (proměnné x a y)
- Geometrie odkazuje na typ grafu (čárový graf, sloupcový graf, atd.)
Vyberte nejlepší geometrii (typ grafu) podle vašich dat a příběhu, který chcete grafem vyprávět.
- Pro analýzu trendů: čárový, sloupcový
- Pro porovnání hodnot: sloupcový, koláčový, bodový graf
- Pro zobrazení vztahu částí k celku: koláčový
- Pro zobrazení distribuce dat: bodový graf, sloupcový
- Pro zobrazení vztahů mezi hodnotami: čárový, bodový graf, bublinový
✅ Můžete se také podívat na tento popisný cheatsheet pro ggplot2.
Vytvoření čárového grafu hodnot rozpětí křídel ptáků
Otevřete konzoli R a importujte dataset.
Poznámka: Dataset je uložen v kořenovém adresáři tohoto repozitáře ve složce
/data
.
Importujte dataset a podívejte se na jeho hlavičku (prvních 5 řádků dat).
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
head(birds)
Hlavička dat obsahuje směs textu a čísel:
Název | VědeckýNázev | Kategorie | Řád | Čeleď | Rod | StavOchrany | MinDélka | MaxDélka | MinHmotnost | MaxHmotnost | MinRozpětí | MaxRozpětí | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Černobřichá pižmovka | Dendrocygna autumnalis | Kachny/Husy/Vodní ptáci | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
1 | Pižmovka rezavá | Dendrocygna bicolor | Kachny/Husy/Vodní ptáci | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
2 | Sněžná husa | Anser caerulescens | Kachny/Husy/Vodní ptáci | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
3 | Rossova husa | Anser rossii | Kachny/Husy/Vodní ptáci | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
4 | Husa běločelá | Anser albifrons | Kachny/Husy/Vodní ptáci | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
Začněme vykreslením některých číselných dat pomocí základního čárového grafu. Předpokládejme, že chcete zobrazit maximální rozpětí křídel těchto zajímavých ptáků.
install.packages("ggplot2")
library("ggplot2")
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line()
Zde nainstalujete balíček ggplot2
a poté jej importujete do pracovního prostoru pomocí příkazu library("ggplot2")
. Pro vykreslení jakéhokoliv grafu v ggplot se používá funkce ggplot()
a vy specifikujete dataset, proměnné x a y jako atributy. V tomto případě použijeme funkci geom_line()
, protože chceme vykreslit čárový graf.
Co si okamžitě všimnete? Zdá se, že existuje alespoň jeden odlehlý bod - to je docela rozpětí křídel! Rozpětí křídel přesahující 2000 centimetrů odpovídá více než 20 metrům - potulují se v Minnesotě pterodaktylové? Pojďme to prozkoumat.
Zatímco byste mohli rychle seřadit data v Excelu a najít tyto odlehlé body, které jsou pravděpodobně překlepy, pokračujte ve vizualizačním procesu přímo z grafu.
Přidejte popisky na osu x, aby bylo vidět, o jaké ptáky se jedná:
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")
Specifikujeme úhel v theme
a specifikujeme popisky os x a y pomocí xlab()
a ylab()
respektive. Funkce ggtitle()
dává grafu/jednotce název.
I při rotaci popisků na 45 stupňů je jich příliš mnoho na čtení. Zkusme jinou strategii: označme pouze odlehlé body a nastavme popisky přímo v grafu. Můžete použít bodový graf, abyste vytvořili více prostoru pro popisky:
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") +
Co se zde děje? Použili jste funkci geom_point()
k vykreslení bodů. S tím jste přidali popisky pro ptáky, kteří měli MaxRozpětí > 500
, a také skryli popisky na ose x, aby byl graf přehlednější.
Co objevíte?
Filtrování dat
Jak orel bělohlavý, tak sokol prériový, i když pravděpodobně velmi velcí ptáci, se zdají být chybně označeni, s přidanou nulou k jejich maximálnímu rozpětí křídel. Je nepravděpodobné, že byste potkali orla bělohlavého s rozpětím křídel 25 metrů, ale pokud ano, dejte nám vědět! Vytvořme nový dataframe bez těchto dvou odlehlých bodů:
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())
Vytvořili jsme nový dataframe birds_filtered
a poté vykreslili bodový graf. Filtrováním odlehlých bodů jsou vaše data nyní soudržnější a srozumitelnější.
Nyní, když máme čistší dataset alespoň z hlediska rozpětí křídel, pojďme objevit více o těchto ptácích.
Zatímco čárové a bodové grafy mohou zobrazovat informace o hodnotách dat a jejich distribucích, chceme přemýšlet o hodnotách obsažených v tomto datasetu. Mohli byste vytvořit vizualizace, které odpoví na následující otázky o množství:
Kolik kategorií ptáků existuje a jaké jsou jejich počty?
Kolik ptáků je vyhynulých, ohrožených, vzácných nebo běžných?
Kolik je různých rodů a řádů podle terminologie Linnaeuse?
Prozkoumání sloupcových grafů
Sloupcové grafy jsou praktické, když potřebujete zobrazit seskupení dat. Pojďme prozkoumat kategorie ptáků, které existují v tomto datasetu, abychom zjistili, která je nejběžnější podle počtu.
Vytvořme sloupcový graf na filtrovaných datech.
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")
V následujícím úryvku instalujeme balíčky dplyr a lubridate, které pomáhají manipulovat a seskupovat data za účelem vykreslení seskupeného sloupcového grafu. Nejprve seskupíte data podle Kategorie
ptáků a poté shrnete sloupce MinDélka
, MaxDélka
, MinHmotnost
, MaxHmotnost
, MinRozpětí
, MaxRozpětí
. Poté vykreslíte sloupcový graf pomocí balíčku ggplot2
a specifikujete barvy pro různé kategorie a popisky.
Tento sloupcový graf je však nečitelný, protože obsahuje příliš mnoho neseskupených dat. Musíte vybrat pouze data, která chcete vykreslit, takže se podívejme na délku ptáků podle jejich kategorie.
Filtrovat data tak, aby obsahovala pouze kategorii ptáků.
Protože existuje mnoho kategorií, můžete tento graf zobrazit vertikálně a upravit jeho výšku, aby zahrnoval všechna data:
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()
Nejprve spočítáte unikátní hodnoty ve sloupci Kategorie
a poté je seřadíte do nového dataframe birds_count
. Tato seřazená data jsou poté faktorizována na stejné úrovni, aby byla vykreslena ve správném pořadí. Pomocí ggplot2
poté vykreslíte data ve sloupcovém grafu. Funkce coord_flip()
vykreslí horizontální sloupce.
Tento sloupcový graf poskytuje dobrý přehled o počtu ptáků v každé kategorii. Na první pohled vidíte, že největší počet ptáků v této oblasti patří do kategorie Kachny/Husy/Vodní ptáci. Minnesota je "země 10 000 jezer", takže to není překvapivé!
✅ Vyzkoušejte některé další počty v tomto datasetu. Překvapí vás něco?
Porovnávání dat
Můžete zkusit různé porovnání seskupených dat vytvořením nových os. Zkuste porovnání MaxDélky ptáků podle jejich kategorie:
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()
Seskupíme data birds_filtered
podle Kategorie
a poté vykreslíme sloupcový graf.
Nic zde není překvapivé: kolibříci mají nejmenší MaxDélku ve srovnání s pelikány nebo husami. Je dobré, když data dávají logický smysl!
Můžete vytvořit zajímavější vizualizace sloupcových grafů překrýváním dat. Pojďme překrýt Minimální a Maximální délku na dané kategorii ptáků:
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()
🚀 Výzva
Tento dataset ptáků nabízí bohatství informací o různých typech ptáků v konkrétním ekosystému. Prohledejte internet a zjistěte, zda najdete jiné datasety zaměřené na ptáky. Procvičte si vytváření grafů a diagramů kolem těchto ptáků, abyste objevili fakta, která jste si neuvědomovali.
Kvíz po přednášce
Přehled & Samostudium
Tato první lekce vám poskytla informace o tom, jak používat ggplot2
k vizualizaci množství. Proveďte výzkum o dalších způsobech práce s datovými sadami pro vizualizaci. Prozkoumejte a vyhledejte datové sady, které byste mohli vizualizovat pomocí jiných balíčků, jako jsou Lattice a Plotly.
Úkol
Prohlášení:
Tento dokument byl přeložen pomocí služby pro automatický překlad Co-op Translator. Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.