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.
229 lines
15 KiB
229 lines
15 KiB
<!--
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
{
|
|
"original_hash": "22acf28f518a4769ea14fa42f4734b9f",
|
|
"translation_date": "2025-08-24T22:52:14+00:00",
|
|
"source_file": "3-Data-Visualization/R/09-visualization-quantities/README.md",
|
|
"language_code": "pl"
|
|
}
|
|
-->
|
|
# Wizualizacja Ilości
|
|
| ](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/09-Visualizing-Quantities.png)|
|
|
|:---:|
|
|
| Wizualizacja Ilości - _Sketchnote autorstwa [@nitya](https://twitter.com/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](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/16)
|
|
|
|
## 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](https://cran.r-project.org/web/packages/ggplot2/index.html). 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](https://en.wikipedia.org/wiki/Ggplot2) 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](https://nyu-cdsc.github.io/learningr/assets/data-visualization-2.1.pdf) 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).
|
|
|
|
```r
|
|
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.
|
|
|
|
```r
|
|
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:
|
|
|
|
```r
|
|
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:
|
|
|
|
```r
|
|
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:
|
|
|
|
```r
|
|
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.
|
|
|
|
```r
|
|
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](https://www.rdocumentation.org/packages/dplyr/versions/0.7.8) i [lubridate](https://www.rdocumentation.org/packages/lubridate/versions/1.8.0), 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:
|
|
|
|
```r
|
|
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:
|
|
|
|
```r
|
|
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:
|
|
|
|
```r
|
|
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](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/17)
|
|
|
|
## 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](https://stat.ethz.ch/R-manual/R-devel/library/lattice/html/Lattice.html) i [Plotly](https://github.com/plotly/plotly.R#readme).
|
|
|
|
## Zadanie
|
|
[Linie, Punkty i Słupki](assignment.md)
|
|
|
|
**Zastrzeżenie**:
|
|
Ten dokument został przetłumaczony za pomocą usługi tłumaczeniowej AI [Co-op Translator](https://github.com/Azure/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. |