1.2 Ochutnávka práce s daty
Tento oddíl už začíná slíbenou ochutnávku toho, na co se můžete v R těšit. Začneme práci s daty. Jak elegantně umí R zacházet s daty si ukážema na příkladu datasetu diamonds. Nejdříve načteme potřebné balíky pomocí funkce library()
a následně i vlastní data.
library(dplyr)
library(tidyr)
library(ggplot2)
library(stargazer)
data("diamonds")
Nejprve se na data podíváme. Dataset obsahuje údaje o 53940 diamantech. Pro každý diamant (řádek tabulky) dataset uvádí váhu diamantu v karátech, kvalitu jeho řezu (cut), jeho barvu (color), rozměry a cenu (price). R inteligentně vypíše jen několik prvních řádků tabulky.
diamonds
## # A tibble: 53,940 x 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
## 4 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
## 7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47
## 8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
## 9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
## 10 0.23 Very Good H VS1 59.4 61 338 4.00 4.05 2.39
## # ... with 53,930 more rows
R umožňuje s daty manipulovat velmi elegantně. Například se můžeme podívat na cenu a váhu u nejlépe zbarvených kamenů:
diamonds %>%
filter(color == "D") %>%
select(color, price, carat)
## # A tibble: 6,775 x 3
## color price carat
## <ord> <int> <dbl>
## 1 D 357 0.23
## 2 D 402 0.23
## 3 D 403 0.26
## 4 D 403 0.26
## 5 D 403 0.26
## 6 D 404 0.22
## 7 D 552 0.30
## 8 D 552 0.30
## 9 D 552 0.30
## 10 D 553 0.24
## # ... with 6,765 more rows
Data lze i jednoduše řadit. Například je možné se podívat na ty nejdražší kameny:
diamonds %>%
arrange(desc(price))
## # A tibble: 53,940 x 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 2.29 Premium I VS2 60.8 60 18823 8.50 8.47 5.16
## 2 2.00 Very Good G SI1 63.5 56 18818 7.90 7.97 5.04
## 3 1.51 Ideal G IF 61.7 55 18806 7.37 7.41 4.56
## 4 2.07 Ideal G SI2 62.5 55 18804 8.20 8.13 5.11
## 5 2.00 Very Good H SI1 62.8 57 18803 7.95 8.00 5.01
## 6 2.29 Premium I SI1 61.8 59 18797 8.52 8.45 5.24
## 7 2.04 Premium H SI1 58.1 60 18795 8.37 8.28 4.84
## 8 2.00 Premium I VS1 60.8 59 18795 8.13 8.02 4.91
## 9 1.71 Premium F VS2 62.3 59 18791 7.57 7.53 4.70
## 10 2.15 Ideal G SI2 62.6 54 18791 8.29 8.35 5.21
## # ... with 53,930 more rows
Jednotlivé operace lze snadno kombinovat do větších celků. Rekněme, že nás např. zajímá, jaká cena nejdražšího kamene pro každou barvu:
diamonds %>%
group_by(color) %>%
arrange(desc(price)) %>%
slice(1L)
## # A tibble: 7 x 10
## # Groups: color [7]
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 2.19 Ideal D SI2 61.8 57 18693 8.23 8.49 5.17
## 2 2.02 Very Good E SI1 59.8 59 18731 8.11 8.20 4.88
## 3 1.71 Premium F VS2 62.3 59 18791 7.57 7.53 4.70
## 4 2.00 Very Good G SI1 63.5 56 18818 7.90 7.97 5.04
## 5 2.00 Very Good H SI1 62.8 57 18803 7.95 8.00 5.01
## 6 2.29 Premium I VS2 60.8 60 18823 8.50 8.47 5.16
## 7 3.01 Premium J SI2 60.7 59 18710 9.35 9.22 5.64
Data lze i jednoduše agregovat. Můžeme např. snadno spočítat průměrnou cenu pro každou barvu kamenů:
diamonds %>%
group_by(color) %>%
summarise(average_price = mean(price, na.rm = TRUE))
## # A tibble: 7 x 2
## color average_price
## <ord> <dbl>
## 1 D 3169.954
## 2 E 3076.752
## 3 F 3724.886
## 4 G 3999.136
## 5 H 4486.669
## 6 I 5091.875
## 7 J 5323.818
Kritéria je možné i kombinovat. Následující tabulka obsahuje průměrnou cenu kamene pro kombinaci barvy a řezu:
diamonds %>%
group_by(color, cut) %>%
summarise(average_price = mean(price, na.rm = TRUE))
## # A tibble: 35 x 3
## # Groups: color [?]
## color cut average_price
## <ord> <ord> <dbl>
## 1 D Fair 4291.061
## 2 D Good 3405.382
## 3 D Very Good 3470.467
## 4 D Premium 3631.293
## 5 D Ideal 2629.095
## 6 E Fair 3682.312
## 7 E Good 3423.644
## 8 E Very Good 3214.652
## 9 E Premium 3538.914
## 10 E Ideal 2597.550
## # ... with 25 more rows