class: center, middle, inverse, title-slide .title[ # Statystyka i wizualizacja danych ] .subtitle[ ## Wykresy (1) ] .author[ ### Jakub Nowosad
nowosad@amu.edu.pl
] --- <!-- https://bbc.github.io/rcookbook/ --> class: inverse, middle, center # Kwartet Anscombe’a --- ## Kwartet Anscombe’a ```r # install.packages("Tmisc") library(Tmisc) quartet ``` <table> <thead> <tr> <th style="text-align:left;"> set </th> <th style="text-align:right;"> x </th> <th style="text-align:right;"> y </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 10 </td> <td style="text-align:right;"> 8.04 </td> </tr> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 6.95 </td> </tr> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 13 </td> <td style="text-align:right;"> 7.58 </td> </tr> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> 8.81 </td> </tr> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 11 </td> <td style="text-align:right;"> 8.33 </td> </tr> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 14 </td> <td style="text-align:right;"> 9.96 </td> </tr> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 7.24 </td> </tr> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 4 </td> <td style="text-align:right;"> 4.26 </td> </tr> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> 10.84 </td> </tr> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 7 </td> <td style="text-align:right;"> 4.82 </td> </tr> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 5.68 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 10 </td> <td style="text-align:right;"> 9.14 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 8.14 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 13 </td> <td style="text-align:right;"> 8.74 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> 8.77 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 11 </td> <td style="text-align:right;"> 9.26 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 14 </td> <td style="text-align:right;"> 8.10 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 6.13 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 4 </td> <td style="text-align:right;"> 3.10 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> 9.13 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 7 </td> <td style="text-align:right;"> 7.26 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 4.74 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 10 </td> <td style="text-align:right;"> 7.46 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 6.77 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 13 </td> <td style="text-align:right;"> 12.74 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> 7.11 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 11 </td> <td style="text-align:right;"> 7.81 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 14 </td> <td style="text-align:right;"> 8.84 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 6.08 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 4 </td> <td style="text-align:right;"> 5.39 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> 8.15 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 7 </td> <td style="text-align:right;"> 6.42 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 5.73 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 6.58 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 5.76 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 7.71 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 8.84 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 8.47 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 7.04 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 5.25 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 19 </td> <td style="text-align:right;"> 12.50 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 5.56 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 7.91 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 6.89 </td> </tr> </tbody> </table> --- ## Kwartet Anscombe’a <table> <thead> <tr> <th style="text-align:left;"> set </th> <th style="text-align:right;"> mean(x) </th> <th style="text-align:right;"> sd(x) </th> <th style="text-align:right;"> mean(y) </th> <th style="text-align:right;"> sd(y) </th> <th style="text-align:right;"> cor(x, y) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> I </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> 3.32 </td> <td style="text-align:right;"> 7.5 </td> <td style="text-align:right;"> 2.03 </td> <td style="text-align:right;"> 0.82 </td> </tr> <tr> <td style="text-align:left;"> II </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> 3.32 </td> <td style="text-align:right;"> 7.5 </td> <td style="text-align:right;"> 2.03 </td> <td style="text-align:right;"> 0.82 </td> </tr> <tr> <td style="text-align:left;"> III </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> 3.32 </td> <td style="text-align:right;"> 7.5 </td> <td style="text-align:right;"> 2.03 </td> <td style="text-align:right;"> 0.82 </td> </tr> <tr> <td style="text-align:left;"> IV </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> 3.32 </td> <td style="text-align:right;"> 7.5 </td> <td style="text-align:right;"> 2.03 </td> <td style="text-align:right;"> 0.82 </td> </tr> </tbody> </table> --- ## Kwartet Anscombe’a <img src="04_wykresy1_files/figure-html/unnamed-chunk-4-1.png" style="display: block; margin: auto;" /> --- class: inverse, middle, center # Wykresy a R --- ## Wykresy w R - istnieje wiele różnych możliwości tworzenia wykresów w R - najczęściej używane to **podstawowe grafiki** oraz pakiet **ggplot2** --- ## ggplot2 ```r install.packages("ggplot2") ``` ```r library(ggplot2) ``` --- ## ggplot2 - pierwszy wykres ```r df = data.frame(A = c(1:10), B = seq(22, 4, by = -2)) ``` ```r ggplot(data = df, aes(x = A, y = B)) + geom_point() ``` <img src="04_wykresy1_files/figure-html/unnamed-chunk-8-1.png" style="display: block; margin: auto;" /> --- ## ggplot2 - podstawowe informacje - pakiet jest implementacją założeń zawartych w książce "Grammar of Graphics" Lelanda Wilkinsona - data.frame jest zazwyczaj wymaganymi danymi wejściowymi - istnieją dwie komendy pozwalające na tworzenie wykresów - *qplot* oraz *ggplot* - pełna dokumentacja znajduje się na stronie - https://ggplot2.tidyverse.org/ oraz https://ggplot2-book.org/ --- ## ggplot2 - podstawowe słownictwo - **geom** - oznacza typ wykresu (np. "histogram", "boxplot", "point", etc.) - aesthetics (**aes**) - oznacza kształt, kolor, wielkość, etc. - facets (**facet**) - oznacza wykresy dla podzbiorów --- ## Zbiór danych ```r install.packages("gapminder") ``` http://www.gapminder.org/data/ http://github.com/jennybc/gapminder http://www.youtube.com/watch?v=jbkSRLYSojo ```r library(gapminder) gapminder2007 = subset(gapminder, year == 2007) ``` --- ## Histogram ```r ggplot(data = gapminder2007, aes(x = gdpPercap)) + geom_histogram() ``` .pull-left[ - stworzony przez Karla Pearsona - jest graficzną reprezentacją rozkładu <br> danych - wartości danych są łączone w przedziały (na osi poziomej) a na osi pionowej jest ukazana liczba punktów (obserwacji) w każdym przedziale - różny dobór przedziałów może dawać inną informację - w pakiecie ggplot2, przedział to domyślnie zakres/30 ] .pull-right[ <img src="04_wykresy1_files/figure-html/unnamed-chunk-12-1.png" width="400px" /> ] --- ## Histogram ```r ggplot(data = gapminder2007, aes(x = gdpPercap)) + geom_histogram(binwidth = 10000) ``` <!-- --> ```r ggplot(data = gapminder2007, aes(x = gdpPercap)) + geom_histogram(binwidth = 800) ``` <!-- --> --- ## Wykres słupkowy ```r ggplot(data = gapminder2007, aes(x = continent)) + geom_bar() ``` <img src="04_wykresy1_files/figure-html/unnamed-chunk-15-1.png" style="display: block; margin: auto;" /> --- ## Wykres liniowy ```r library(dplyr) gapminder2 = summarise(gapminder, mean_lifeExp = mean(lifeExp, na.rm = TRUE), .by = year) ``` ```r ggplot(data = gapminder2, aes(x = year, y = mean_lifeExp)) + geom_line() ``` <img src="04_wykresy1_files/figure-html/unnamed-chunk-17-1.png" style="display: block; margin: auto;" /> --- ## Wykres rozrzutu ```r ggplot(data = gapminder2007, aes(x = gdpPercap, y = lifeExp)) + geom_point() ``` <img src="04_wykresy1_files/figure-html/unnamed-chunk-18-1.png" style="display: block; margin: auto;" /> --- ## Wykres pudełkowy ```r ggplot(data = gapminder2007, aes(x = continent, y = lifeExp)) + geom_boxplot() ``` .pull-left[ - obrazuje pięć podstawowych <br> statystyk opisowych oraz wartości odstające - pudełko to zakres międzykwantylowy - linie oznaczają najbardziej ekstremalne wartości, ale nie odstające. Górna to 1,5\*IQR ponad krawędź pudełka, dolna to 1,5\*IQR poniżej wartości dolnej krawędzi pudełka - linia środkowa to mediana ] .pull-right[ <!-- --> ] --- ## Wykresy, a dane ilościowe i jakościowe - kolory - kształty - wielkości --- ## Wykresy, a dane ilościowe (1) ```r ggplot(data = gapminder2007, aes(x = gdpPercap, y = lifeExp, color = pop)) + geom_point() ``` <img src="04_wykresy1_files/figure-html/unnamed-chunk-21-1.png" style="display: block; margin: auto;" /> --- ## Wykresy, a dane ilościowe (2) ```r ggplot(data = gapminder2007, aes(x = gdpPercap, y = lifeExp, size = pop)) + geom_point() ``` <img src="04_wykresy1_files/figure-html/unnamed-chunk-22-1.png" style="display: block; margin: auto;" /> --- ## Wykresy, a dane jakościowe (1) ```r ggplot(data = gapminder2007, aes(x = gdpPercap, y = lifeExp, color = continent)) + geom_point() ``` <img src="04_wykresy1_files/figure-html/unnamed-chunk-23-1.png" style="display: block; margin: auto;" /> --- ## Wykresy, a dane jakościowe (2) ```r ggplot(data = gapminder2007, aes(x = gdpPercap, y = lifeExp, shape = continent)) + geom_point() + scale_shape(solid = FALSE) ``` <img src="04_wykresy1_files/figure-html/unnamed-chunk-24-1.png" style="display: block; margin: auto;" /> --- ## Modyfikacja wykresów ```r p = ggplot(data = gapminder2007, aes(x = gdpPercap, y = lifeExp, color = continent)) + geom_point() p = p + labs(y = "Oczekiwana dalsza długość trwania życia", x = "PKB na osobę (USD)", color = "Kontynent") p ``` <img src="04_wykresy1_files/figure-html/unnamed-chunk-25-1.png" style="display: block; margin: auto;" /> --- ## Zapisywanie wykresów ```r p = ggplot(data = gapminder2007, aes(x = gdpPercap, y = lifeExp, color = continent)) + geom_point() p = p + labs(y = "Oczekiwana dalsza długość trwania życia", x = "PKB na osobę (USD)", color = "Kontynent") p ``` ```r ggsave(filename = "Wykres.pdf", plot = p) ``` ```r ggsave(filename = "Wykres.png", plot = p, dpi = 300) ``` --- class: inverse, middle, center # Zadania --- ## Zadania 1. Zainstaluj pakiet **datasauRus**, zawierający zbiór danych `datasaurus_dozen`. Stwórz trzy obiekty - `away`, `star` i `dino` poprzez wybranie tylko wartości, gdzie zmienna `dataset` ma wartość `away`, `star` i `dino`. Wylicz podstawowe statystyki (średnia wartość `x`, średnia wartość `y`, odchylenie standardowe `x`, odchylenie standardowe `y`) dla tych trzech obiektów. Czy się one czymś różnią? Następnie zwizualizuj te trzy obiekty. 2. Wczytaj dane `data/pomiary_pol.csv`. Stwórz histogram pokazujący rozkład średniej temperatury rocznej (`annual_tavg`) w tym zbiorze. 3. Stwórz wykres pokazujący relację pomiędzy temperaturą minimalną a maksymalną w kwietniu. W jaki sposób można go zinterpretować? 4. Zbuduj wykres pudełkowy pokazujący rozkład wartości średniej temperatury rocznej (`annual_tavg`) dla kolejnych prowincji fizjograficznych. Zinterpretuj go. 5. Zbuduj wykres pudełkowy pokazujący rozkład wartości średniej średniej rocznej sumy opadów (`annual_precip`) dla kolejnych prowincji fizjograficznych. Zinterpretuj go. 6. Postaraj się ulepszyć stworzone wykresy poprzez dodanie tytułu, zmianę podpisu osi, edycję kolorów, itd. 7. Zapisz stworzone wykresy do plików w formacie .png. Jak nazwiesz te pliki?