15 KiB
Wizualizacja Ilości
![]() |
---|
Wizualizacja Ilości - Sketchnote autorstwa @nitya |
W tej lekcji dowiesz się, jak korzystać z niektórych z wielu dostępnych bibliotek pakietów R, aby tworzyć interesujące wizualizacje związane z pojęciem ilości. Korzystając z oczyszczonego zestawu danych o ptakach z Minnesoty, możesz poznać wiele ciekawych faktów o lokalnej faunie.
Quiz przed wykładem
Obserwacja rozpiętości skrzydeł za pomocą ggplot2
Doskonale nadającą się do tworzenia zarówno prostych, jak i zaawansowanych wykresów i diagramów biblioteką jest ggplot2. Ogólnie rzecz biorąc, proces tworzenia wykresów za pomocą tych bibliotek obejmuje identyfikację części ramki danych, które chcesz przeanalizować, przekształcenie danych w razie potrzeby, przypisanie wartości osi x i y, wybór rodzaju wykresu oraz jego wyświetlenie.
ggplot2
to system do deklaratywnego tworzenia grafik, oparty na The Grammar of Graphics. Grammar of Graphics to ogólny schemat wizualizacji danych, który dzieli wykresy na semantyczne komponenty, takie jak skale i warstwy. Innymi słowy, łatwość tworzenia wykresów dla danych jednowymiarowych lub wielowymiarowych przy użyciu niewielkiej ilości kodu sprawia, że ggplot2
jest najpopularniejszym pakietem do wizualizacji w R. Użytkownik określa, jak ggplot2
ma mapować zmienne na estetykę, jakie prymitywy graficzne użyć, a resztą zajmuje się ggplot2
.
✅ Wykres = Dane + Estetyka + Geometria
- Dane odnoszą się do zestawu danych
- Estetyka wskazuje zmienne do analizy (zmienne x i y)
- Geometria odnosi się do rodzaju wykresu (liniowy, słupkowy itp.)
Wybierz najlepszą geometrię (rodzaj wykresu) w zależności od danych i historii, którą chcesz opowiedzieć za pomocą wykresu.
- Aby analizować trendy: linia, kolumna
- Aby porównywać wartości: słupek, kolumna, koło, wykres punktowy
- Aby pokazać, jak części odnoszą się do całości: koło
- Aby pokazać rozkład danych: wykres punktowy, słupek
- Aby pokazać relacje między wartościami: linia, wykres punktowy, bąbelkowy
✅ Możesz również sprawdzić ten opisowy cheatsheet dla ggplot2.
Tworzenie wykresu liniowego dla wartości rozpiętości skrzydeł ptaków
Otwórz konsolę R i zaimportuj zestaw danych.
Uwaga: Zestaw danych znajduje się w katalogu głównym tego repozytorium w folderze
/data
.
Zaimportujmy zestaw danych i zobaczmy jego początek (pierwsze 5 wierszy).
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
head(birds)
Początek danych zawiera mieszankę tekstu i liczb:
Nazwa | NazwaNaukowa | Kategoria | Rząd | Rodzina | Rodzaj | StatusOchrony | MinDługość | MaxDługość | MinMasaCiała | MaxMasaCiała | MinRozpiętość | MaxRozpiętość | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Czarnobrzuchy gwizdacz | Dendrocygna autumnalis | Kaczki/Gęsi/Wodnopławy | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
1 | Płowy gwizdacz | Dendrocygna bicolor | Kaczki/Gęsi/Wodnopławy | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
2 | Śnieżna gęś | Anser caerulescens | Kaczki/Gęsi/Wodnopławy | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
3 | Gęś Rossa | Anser rossii | Kaczki/Gęsi/Wodnopławy | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
4 | Gęś białoczelna | Anser albifrons | Kaczki/Gęsi/Wodnopławy | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
Zacznijmy od wykreślenia niektórych danych liczbowych za pomocą podstawowego wykresu liniowego. Załóżmy, że chcesz zobaczyć maksymalną rozpiętość skrzydeł tych interesujących ptaków.
install.packages("ggplot2")
library("ggplot2")
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line()
Tutaj instalujesz pakiet ggplot2
, a następnie importujesz go do przestrzeni roboczej za pomocą polecenia library("ggplot2")
. Aby wykreślić dowolny wykres w ggplot, używana jest funkcja ggplot()
, w której określasz zestaw danych, zmienne x i y jako atrybuty. W tym przypadku używamy funkcji geom_line()
, ponieważ chcemy wykreślić wykres liniowy.
Co zauważasz od razu? Wydaje się, że jest co najmniej jeden odstający wynik - to całkiem spora rozpiętość skrzydeł! Rozpiętość skrzydeł ponad 2000 centymetrów to ponad 20 metrów - czy w Minnesocie żyją pterodaktyle? Zbadajmy to.
Chociaż możesz szybko posortować dane w Excelu, aby znaleźć te odstające wyniki, które prawdopodobnie są literówkami, kontynuuj proces wizualizacji, pracując bezpośrednio z wykresem.
Dodaj etykiety do osi x, aby pokazać, o jakie ptaki chodzi:
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")
Określamy kąt w theme
i ustawiamy etykiety osi x i y w xlab()
i ylab()
odpowiednio. ggtitle()
nadaje nazwę wykresowi.
Nawet przy obrocie etykiet o 45 stopni jest ich zbyt wiele, aby je odczytać. Spróbujmy innej strategii: oznacz tylko te odstające wyniki i ustaw etykiety wewnątrz wykresu. Możesz użyć wykresu punktowego, aby zrobić więcej miejsca na etykiety:
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 tu się dzieje? Użyłeś funkcji geom_point()
, aby wykreślić punkty. Dzięki temu dodałeś etykiety dla ptaków, które miały MaxWingspan > 500
, a także ukryłeś etykiety na osi x, aby odciążyć wykres.
Co odkrywasz?
Filtrowanie danych
Zarówno Bielik amerykański, jak i Sokół preriowy, choć prawdopodobnie bardzo duże ptaki, wydają się być błędnie oznaczone, z dodatkowym zerem w ich maksymalnej rozpiętości skrzydeł. Mało prawdopodobne, że spotkasz Bielika z rozpiętością skrzydeł 25 metrów, ale jeśli tak, daj nam znać! Stwórzmy nową ramkę danych bez tych dwóch odstających wyników:
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())
Stworzyliśmy nową ramkę danych birds_filtered
, a następnie wykreśliliśmy wykres punktowy. Po odfiltrowaniu odstających wyników dane są teraz bardziej spójne i zrozumiałe.
Teraz, gdy mamy czystszy zestaw danych przynajmniej pod względem rozpiętości skrzydeł, odkryjmy więcej o tych ptakach.
Chociaż wykresy liniowe i punktowe mogą przedstawiać informacje o wartościach danych i ich rozkładach, chcemy pomyśleć o wartościach zawartych w tym zestawie danych. Możesz stworzyć wizualizacje, aby odpowiedzieć na następujące pytania dotyczące ilości:
Ile kategorii ptaków istnieje i jakie są ich liczby?
Ile ptaków jest wymarłych, zagrożonych, rzadkich lub pospolitych?
Ile jest różnych rodzajów i rzędów w terminologii Linneusza?
Eksploracja wykresów słupkowych
Wykresy słupkowe są praktyczne, gdy chcesz pokazać grupowanie danych. Zbadajmy kategorie ptaków w tym zestawie danych, aby zobaczyć, która jest najliczniejsza.
Stwórzmy wykres słupkowy na przefiltrowanych danych.
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")
W poniższym fragmencie instalujemy pakiety dplyr i lubridate, aby pomóc w manipulacji i grupowaniu danych w celu wykreślenia wykresu słupkowego. Najpierw grupujesz dane według Category
ptaków, a następnie podsumowujesz kolumny MinLength
, MaxLength
, MinBodyMass
, MaxBodyMass
, MinWingspan
, MaxWingspan
. Następnie wykreślasz wykres słupkowy za pomocą pakietu ggplot2
, określając kolory dla różnych kategorii i etykiety.
Ten wykres słupkowy jest jednak nieczytelny, ponieważ jest zbyt wiele niepogrupowanych danych. Musisz wybrać tylko dane, które chcesz wykreślić, więc spójrzmy na długość ptaków w zależności od ich kategorii.
Przefiltruj swoje dane, aby uwzględnić tylko kategorię ptaków.
Ponieważ istnieje wiele kategorii, możesz wyświetlić ten wykres pionowo i dostosować jego wysokość, aby uwzględnić wszystkie dane:
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()
Najpierw liczysz unikalne wartości w kolumnie Category
, a następnie sortujesz je w nowej ramce danych birds_count
. Te posortowane dane są następnie uwzględniane na tym samym poziomie, aby były wykreślone w uporządkowany sposób. Korzystając z ggplot2
, wykreślasz dane na wykresie słupkowym. Funkcja coord_flip()
wykreśla poziome słupki.
Ten wykres słupkowy pokazuje dobry widok liczby ptaków w każdej kategorii. Na pierwszy rzut oka widać, że największa liczba ptaków w tym regionie należy do kategorii Kaczki/Gęsi/Wodnopławy. Minnesota to "kraina 10 000 jezior", więc to nie jest zaskakujące!
✅ Spróbuj innych zliczeń na tym zestawie danych. Czy coś Cię zaskoczyło?
Porównywanie danych
Możesz spróbować różnych porównań pogrupowanych danych, tworząc nowe osie. Spróbuj porównać MaxLength ptaka w zależności od jego kategorii:
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()
Grupujemy dane birds_filtered
według Category
, a następnie wykreślamy wykres słupkowy.
Nic zaskakującego tutaj: kolibry mają najmniejszą MaxLength w porównaniu do pelikanów czy gęsi. Dobrze, gdy dane mają sens logiczny!
Możesz tworzyć bardziej interesujące wizualizacje wykresów słupkowych, nakładając dane. Nałóżmy Minimalną i Maksymalną Długość na daną kategorię ptaków:
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()
🚀 Wyzwanie
Ten zestaw danych o ptakach oferuje bogactwo informacji o różnych typach ptaków w danym ekosystemie. Poszukaj w internecie innych zestawów danych o ptakach. Ćwicz tworzenie wykresów i diagramów na podstawie tych danych, aby odkryć fakty, o których nie miałeś pojęcia.
Quiz po wykładzie
Przegląd i samodzielna nauka
Ta pierwsza lekcja dostarczyła Ci informacji o tym, jak używać ggplot2
do wizualizacji ilości. Poszukaj innych sposobów pracy z zestawami danych do wizualizacji. Poszukaj zestawów danych, które możesz wizualizować za pomocą innych pakietów, takich jak Lattice i Plotly.
Zadanie
Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczeniowej AI Co-op Translator. Chociaż dokładamy wszelkich starań, aby zapewnić precyzję, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za autorytatywne źródło. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.