Візуалізація даних

Завантажимо датасет з тваринами

library(MASS)
df <- Animals
head(df)
##                     body brain
## Mountain beaver     1.35   8.1
## Cow               465.00 423.0
## Grey wolf          36.33 119.5
## Goat               27.66 115.0
## Guinea pig          1.04   5.5
## Dipliodocus     11700.00  50.0

Щоб отримати назви тварин використаємо команду

df_names <- rownames(df)
df_names
##  [1] "Mountain beaver"  "Cow"              "Grey wolf"       
##  [4] "Goat"             "Guinea pig"       "Dipliodocus"     
##  [7] "Asian elephant"   "Donkey"           "Horse"           
## [10] "Potar monkey"     "Cat"              "Giraffe"         
## [13] "Gorilla"          "Human"            "African elephant"
## [16] "Triceratops"      "Rhesus monkey"    "Kangaroo"        
## [19] "Golden hamster"   "Mouse"            "Rabbit"          
## [22] "Sheep"            "Jaguar"           "Chimpanzee"      
## [25] "Rat"              "Brachiosaurus"    "Mole"            
## [28] "Pig"

Простий графік вага тіла - вага мозку:

plot(df)

Графік вимірів тіла

plot(df$body)

Це некрасиві графіки. Ми хочемо красивий графік - горизонтальні лінії з кружочками на кінці, різнокольорові, назви тварин, масштабування.

Отже, задача для першого графіка:

  1. Створювати графік потрібно багато раз, тому потрібно?
  2. Графік має бути таким: по вертикалі імена тварин, по горизонталі їх вага тіла.
  3. Має бути лінія, що веде до точки виміру. Точка виміру має бути виділена.
  4. Поряд з точкою виміру вивести числове значення (до одного знаку після коми)
  5. Потрібно задати два параметра a та b і виводити тільки тварин вага яких більше за a та менша за b

Почнемо по пунктах.

Почнемо з функції

my_graph <- function(){
  xlim <- 10
  ylim <- 10
  plot.new()
  plot.window(ylim = c(0,ylim),xlim = c(0,xlim))
  axis(1)
  axis(2)
}

Тепер потрібно передати дані для відображення. Нагадую наші дані:

head(df)
##                     body brain
## Mountain beaver     1.35   8.1
## Cow               465.00 423.0
## Grey wolf          36.33 119.5
## Goat               27.66 115.0
## Guinea pig          1.04   5.5
## Dipliodocus     11700.00  50.0

Назви

rownames(df)
##  [1] "Mountain beaver"  "Cow"              "Grey wolf"       
##  [4] "Goat"             "Guinea pig"       "Dipliodocus"     
##  [7] "Asian elephant"   "Donkey"           "Horse"           
## [10] "Potar monkey"     "Cat"              "Giraffe"         
## [13] "Gorilla"          "Human"            "African elephant"
## [16] "Triceratops"      "Rhesus monkey"    "Kangaroo"        
## [19] "Golden hamster"   "Mouse"            "Rabbit"          
## [22] "Sheep"            "Jaguar"           "Chimpanzee"      
## [25] "Rat"              "Brachiosaurus"    "Mole"            
## [28] "Pig"

Передаємо дані у функцію

my_graph <- function(my_data){ 
  xlim <- max(my_data$body)
  ylim <- length(rownames(my_data))
  plot.new()
  plot.window(ylim = c(0,ylim),xlim = c(0,xlim))
  axis(1)
  axis(2)
  points(x = my_data$body, y = 1:ylim)
}

Все ще не дуже наглядно. Спробуємо обмежити множину даних

df1 <- subset(df, df$body < 100)
my_graph(df1)

Як додати лінії? Функція segments()

my_graph <- function(my_data){ 
  xlim <- max(my_data$body)
  ylim <- length(rownames(my_data))
  plot.new()
  plot.window(ylim = c(0,ylim),xlim = c(0,xlim))
  axis(1)
  axis(2)
  points(x = my_data$body, y = 1:ylim)
  segments(x0 = rep(0,xlim), y0 = 1:ylim, x1 = my_data$body, y1 = 1:ylim)
}

Тепер

df1 <- subset(df, df$body < 100)
my_graph(df1)

Як скомпонувати це в одну функцію?

my_graph <- function(my_data, uplim, downlim = 0){
  temp <- subset(my_data, my_data$body < uplim & my_data$body  > downlim)
  xlim <- uplim
  ylim <- length(rownames(temp))
  plot.new()
  plot.window(ylim = c(0,ylim),xlim = c(0,xlim))
  axis(1)
  axis(2)
  points(x = temp$body, y = 1:ylim)
  segments(x0 = rep(0,xlim), y0 = 1:ylim, x1 = temp$body, y1 = 1:ylim)
}

Перевірка:

my_graph(df1, uplim = 100, downlim = 10)

Тепер додамо імена тварин

my_graph <- function(my_data, uplim, downlim = 0){
  temp <- subset(my_data, my_data$body < uplim & my_data$body  > downlim)
  xlim <- uplim
  ylim <- length(rownames(temp))
  plot.new()
  plot.window(ylim = c(0,ylim),xlim = c(0,xlim))
  axis(2,at = 1:ylim, 
     labels = rownames(temp), 
     col = "blue", 
     col.axis = "blue", 
     font.axis = 4,
     las = 1, 
     cex.axis = 0.7)
  axis(1,  col = "blue", col.axis = "blue")
  points(x = temp$body, y = 1:ylim)
  segments(x0 = rep(0,xlim), y0 = 1:ylim, x1 = temp$body, y1 = 1:ylim)
}

Результат:

my_graph(df, uplim = 100, downlim = 10)

Бонус від створення функції - її можна викликати коли нам потрібно і для будь-яких датасетів такого типу.

my_graph(mammals, 10, 1)

Проблема - написи не видно.

my_graph <- function(my_data, uplim, downlim = 0){
  temp <- subset(my_data, my_data$body < uplim & my_data$body  > downlim)
  xlim <- uplim
  ylim <- length(rownames(temp))
  plot.new()
  plot.window(ylim = c(0,ylim),xlim = c(-0.1 * xlim,xlim))
  axis(2,at = 1:ylim, 
     labels = rownames(temp), 
     col = "blue", 
     col.axis = "blue", 
     font.axis = 4,
     las = 1, 
     cex.axis = 0.7,
     pos = 0)
  axis(1, at = 0:xlim, col = "blue", col.axis = "blue")
  points(x = temp$body, y = 1:ylim)
  segments(x0 = rep(0,xlim), y0 = 1:ylim, x1 = temp$body, y1 = 1:ylim)
}

Ще потрібно додати текст зі значенням

my_graph <- function(my_data, uplim, downlim = 0){
  temp <- subset(my_data, my_data$body < uplim & my_data$body  > downlim)
  xlim <- uplim
  ylim <- length(rownames(temp))
  plot.new()
  plot.window(ylim = c(0,ylim),xlim = c(-0.1 * xlim,xlim))
  axis(2,at = 1:ylim, 
     labels = rownames(temp), 
     col = "blue", 
     col.axis = "blue", 
     font.axis = 4,
     las = 1, 
     cex.axis = 0.7,
     pos = 0)
  axis(1, at = 0:xlim, col = "blue", col.axis = "blue")
  points(x = temp$body, y = 1:ylim)
  segments(x0 = rep(0,xlim), y0 = 1:ylim, x1 = temp$body, y1 = 1:ylim)
  text(x = temp$body + 0.3, y = 1:ylim, labels = temp$body, cex = 0.8, font = 2)
}
my_graph(mammals, 10, 1)

Тепер перейдемо до розфарбування

pie(1:10,col = rainbow(10), main = "Веселкове розфарбування")

pie(1:10,col = heat.colors(10), main = "Гаряче розфарбування")

pie(1:10,col = terrain.colors(10), main = "Земляне розфарбування")

pie(1:10,col = topo.colors(10), main = "Топографічне розфарбування")

pie(1:10,col = cm.colors(10), main = "Кислотне розфарбування")

my_graph <- function(my_data, uplim, downlim = 0){
  temp <- subset(my_data, my_data$body < uplim & my_data$body  > downlim)
  xlim <- uplim
  ylim <- length(rownames(temp))
  plot.new()
  plot.window(ylim = c(0,ylim),xlim = c(-0.1 * xlim,xlim))
  axis(2,at = 1:ylim, 
     labels = rownames(temp), 
     col = "blue", 
     col.axis = "blue", 
     font.axis = 4,
     las = 1, 
     cex.axis = 0.7,
     pos = 0)
  axis(1, at = 0:xlim, col = "blue", col.axis = "blue")
  points(x = temp$body, y = 1:ylim, pch = 19, col = rainbow(ylim))
  segments(x0 = rep(0,xlim), y0 = 1:ylim, x1 = temp$body, y1 = 1:ylim, col = rainbow(ylim, alpha = 0.7),lwd = 4)
   text(x = temp$body + 0.3, y = 1:ylim, labels = temp$body, cex = 0.8, font = 2)
   title(main = "Вага тіла тварин (кг)")
}

Насолоджуємось фінальним варіантом:

my_graph(mammals, 10, 1)

Задача для другого графіка:

  1. Ми хотіли б зрозуміти хто найрозумніший, тобто обчислити відношення маси тіла до маси мозку.
  2. Графік має бути таким: по горизонталі імена тварин, різнокольорові прямокутники показують вдповідні значення.
  3. Потрібно вивести числове значення (до одного знаку після коми)
  5. Потрібно задати два параметра a та b і виводити тільки тварин для яких відношення більше за a та менша за b

Створимо змінну - відношення мозку і тіла

df$ratio <- df$brain/df$body
thr1 <- 30
thr2 <- 10
 df1 <- subset(df,df$ratio < thr1 & df$ratio > thr2)
  df_names <- rownames(df1)
  m <- length(df1$ratio)
  plot.new()
  plot.window(xlim = c(0,m + 1),ylim = c(0,thr1))
  axis(1,at = 1:m, 
     labels = df_names, 
     col = "blue", 
     col.axis = "blue", font.axis = 4,las = 2, cex.axis = 0.7, pos = 0)
axis(2)
rect(1:m - 0.5,0, 1:m + 0.5,df1$ratio,col = rainbow(m))
title(main = "Співвідношення ваги мозку до ваги тіла")

Додаткова задача

Вивести зображення тварини.

library(jpeg)
mole <- readJPEG("/home/ignatius/Documents/MyCode/R/BrovaryLectures/Data/mole.jpg")
plot.new()
plot.window(xlim = c(0,10),ylim = c(0,10))
axis(1)
axis(2)
rasterImage(mole,1,1,6,6)

Кругова діаграма

nm <- rownames(df)
df2 <- as.table(df$body[1:4])
# store the table result
pie(df2)

# first pie -- kind of dull
names(df2) = nm[1:4]
# give names
pie(df2)

# prints out names
pie(df2,col=heat.colors(length(df2)))

Shiny application

library(shiny)
runExample("01_hello")
runExample()

Тренди гугл

library(gtrendsR)
t <- gtrends("weather", geo = "UA")
plot(t)

brobots <- gtrends(c("Духлій","Духлий","Dukhliy"), geo = "UA",time = "today 12-m")
plot(brobots)

test <- gtrends(c("Велосипед"), geo = "UA")
plot(test)

test <- gtrends(c("Велосипед", "Сноуборд", "Лыжи"), geo = "UA")
plot(test)

test$interest_by_city
##                    location hits   keyword geo gprop
## 1                 Chernihiv  100 Велосипед  UA   web
## 2                   Brovary   98 Велосипед  UA   web
## 3                 Mukacheve   95 Велосипед  UA   web
## 4                Berdyans'k   95 Велосипед  UA   web
## 5                Kremenchuk   95 Велосипед  UA   web
## 6                 Pavlohrad   94 Велосипед  UA   web
## 7         Dniprodzerzhyns'k   92 Велосипед  UA   web
## 8              Bila Tserkva   91 Велосипед  UA   web
## 9             Severodonetsk   90 Велосипед  UA   web
## 10                 Nikopol'   88 Велосипед  UA   web
## 11                 Cherkasy   84 Велосипед  UA   web
## 12                    Uman'   84 Велосипед  UA   web
## 13               Kryvyi Rih   83 Велосипед  UA   web
## 14                     Sumy   81 Велосипед  UA   web
## 15            Kropyvnytskyi   81 Велосипед  UA   web
## 16                 Uzhhorod   81 Велосипед  UA   web
## 17               Zaporizhia   80 Велосипед  UA   web
## 18                  Kharkiv   80 Велосипед  UA   web
## 19               Melitopol'   80 Велосипед  UA   web
## 20                Mariupol'   79 Велосипед  UA   web
## 21                     Kiev   77 Велосипед  UA   web
## 22                   Dnipro   77 Велосипед  UA   web
## 23                   Odessa   76 Велосипед  UA   web
## 24                  Poltava   75 Велосипед  UA   web
## 25                Slovyansk   74 Велосипед  UA   web
## 26                 Mykolaiv   73 Велосипед  UA   web
## 27                Vinnytsia   72 Велосипед  UA   web
## 28             Khmelnytskyi   72 Велосипед  UA   web
## 29  Kam'yanets'-Podil's'kyi   71 Велосипед  UA   web
## 30                 Zhytomyr   69 Велосипед  UA   web
## 31               Kramatorsk   67 Велосипед  UA   web
## 32                    Rivne   66 Велосипед  UA   web
## 33                  Kherson   66 Велосипед  UA   web
## 34                 Makiivka   65 Велосипед  UA   web
## 35                  Luhansk   65 Велосипед  UA   web
## 36                    Lutsk   63 Велосипед  UA   web
## 37          Ivano-Frankivsk   62 Велосипед  UA   web
## 38                 Horlivka   62 Велосипед  UA   web
## 39                     Lviv   61 Велосипед  UA   web
## 40                  Donetsk   60 Велосипед  UA   web
## 41                 Ternopil   53 Велосипед  UA   web
## 42                    Yalta   52 Велосипед  UA   web
## 43               Chernivtsi   51 Велосипед  UA   web
## 44               Sevastopol   51 Велосипед  UA   web
## 45               Simferopol   50 Велосипед  UA   web
## 46                Chernihiv    2  Сноуборд  UA   web
## 47                  Brovary    0  Сноуборд  UA   web
## 48                Mukacheve    0  Сноуборд  UA   web
## 49               Berdyans'k    0  Сноуборд  UA   web
## 50               Kremenchuk    2  Сноуборд  UA   web
## 51                Pavlohrad    0  Сноуборд  UA   web
## 52        Dniprodzerzhyns'k    0  Сноуборд  UA   web
## 53             Bila Tserkva    0  Сноуборд  UA   web
## 54            Severodonetsk    0  Сноуборд  UA   web
## 55                 Nikopol'    0  Сноуборд  UA   web
## 56                 Cherkasy    3  Сноуборд  UA   web
## 57                    Uman'    0  Сноуборд  UA   web
## 58               Kryvyi Rih    2  Сноуборд  UA   web
## 59                     Sumy    2  Сноуборд  UA   web
## 60            Kropyvnytskyi    2  Сноуборд  UA   web
## 61                 Uzhhorod    5  Сноуборд  UA   web
## 62               Zaporizhia    2  Сноуборд  UA   web
## 63                  Kharkiv    5  Сноуборд  UA   web
## 64               Melitopol'    0  Сноуборд  UA   web
## 65                Mariupol'    1  Сноуборд  UA   web
## 66                     Kiev    4  Сноуборд  UA   web
## 67                   Dnipro    4  Сноуборд  UA   web
## 68                   Odessa    3  Сноуборд  UA   web
## 69                  Poltava    5  Сноуборд  UA   web
## 70                Slovyansk    0  Сноуборд  UA   web
## 71                 Mykolaiv    2  Сноуборд  UA   web
## 72                Vinnytsia    2  Сноуборд  UA   web
## 73             Khmelnytskyi    2  Сноуборд  UA   web
## 74  Kam'yanets'-Podil's'kyi    0  Сноуборд  UA   web
## 75                 Zhytomyr    2  Сноуборд  UA   web
## 76               Kramatorsk    0  Сноуборд  UA   web
## 77                    Rivne    2  Сноуборд  UA   web
## 78                  Kherson    2  Сноуборд  UA   web
## 79                 Makiivka    0  Сноуборд  UA   web
## 80                  Luhansk    2  Сноуборд  UA   web
## 81                    Lutsk    0  Сноуборд  UA   web
## 82          Ivano-Frankivsk    4  Сноуборд  UA   web
## 83                 Horlivka    0  Сноуборд  UA   web
## 84                     Lviv    3  Сноуборд  UA   web
## 85                  Donetsk    2  Сноуборд  UA   web
## 86                 Ternopil    3  Сноуборд  UA   web
## 87                    Yalta    0  Сноуборд  UA   web
## 88               Chernivtsi    3  Сноуборд  UA   web
## 89               Sevastopol    4  Сноуборд  UA   web
## 90               Simferopol    3  Сноуборд  UA   web
## 91                Chernihiv    7      Лыжи  UA   web
## 92                  Brovary    9      Лыжи  UA   web
## 93                Mukacheve    9      Лыжи  UA   web
## 94               Berdyans'k    0      Лыжи  UA   web
## 95               Kremenchuk    6      Лыжи  UA   web
## 96                Pavlohrad    0      Лыжи  UA   web
## 97        Dniprodzerzhyns'k    3      Лыжи  UA   web
## 98             Bila Tserkva    6      Лыжи  UA   web
## 99            Severodonetsk    0      Лыжи  UA   web
## 100                Nikopol'    0      Лыжи  UA   web
## 101                Cherkasy    5      Лыжи  UA   web
## 102                   Uman'    0      Лыжи  UA   web
## 103              Kryvyi Rih    3      Лыжи  UA   web
## 104                    Sumy    7      Лыжи  UA   web
## 105           Kropyvnytskyi    4      Лыжи  UA   web
## 106                Uzhhorod    9      Лыжи  UA   web
## 107              Zaporizhia    4      Лыжи  UA   web
## 108                 Kharkiv    9      Лыжи  UA   web
## 109              Melitopol'    0      Лыжи  UA   web
## 110               Mariupol'    4      Лыжи  UA   web
## 111                    Kiev    8      Лыжи  UA   web
## 112                  Dnipro    6      Лыжи  UA   web
## 113                  Odessa    7      Лыжи  UA   web
## 114                 Poltava    5      Лыжи  UA   web
## 115               Slovyansk    0      Лыжи  UA   web
## 116                Mykolaiv    4      Лыжи  UA   web
## 117               Vinnytsia    5      Лыжи  UA   web
## 118            Khmelnytskyi    5      Лыжи  UA   web
## 119 Kam'yanets'-Podil's'kyi    0      Лыжи  UA   web
## 120                Zhytomyr    5      Лыжи  UA   web
## 121              Kramatorsk    4      Лыжи  UA   web
## 122                   Rivne    3      Лыжи  UA   web
## 123                 Kherson    3      Лыжи  UA   web
## 124                Makiivka    0      Лыжи  UA   web
## 125                 Luhansk    4      Лыжи  UA   web
## 126                   Lutsk    3      Лыжи  UA   web
## 127         Ivano-Frankivsk    4      Лыжи  UA   web
## 128                Horlivka    0      Лыжи  UA   web
## 129                    Lviv    4      Лыжи  UA   web
## 130                 Donetsk    4      Лыжи  UA   web
## 131                Ternopil    2      Лыжи  UA   web
## 132                   Yalta    5      Лыжи  UA   web
## 133              Chernivtsi    4      Лыжи  UA   web
## 134              Sevastopol    5      Лыжи  UA   web
## 135              Simferopol    4      Лыжи  UA   web
## 136               Pavlohrad  100 Велосипед  UA   web
## 137               Chernihiv  100 Велосипед  UA   web
## 138               Mukacheve   97 Велосипед  UA   web
## 139              Kremenchuk   94 Велосипед  UA   web
## 140                 Brovary   93 Велосипед  UA   web
## 141           Severodonetsk   93 Велосипед  UA   web
## 142              Berdyans'k   93 Велосипед  UA   web
## 143            Bila Tserkva   91 Велосипед  UA   web
## 144       Dniprodzerzhyns'k   90 Велосипед  UA   web
## 145                Nikopol'   88 Велосипед  UA   web
## 146                    Sumy   83 Велосипед  UA   web
## 147              Kryvyi Rih   83 Велосипед  UA   web
## 148              Melitopol'   81 Велосипед  UA   web
## 149                Cherkasy   81 Велосипед  UA   web
## 150                Uzhhorod   80 Велосипед  UA   web
## 151                   Uman'   80 Велосипед  UA   web
## 152                 Kharkiv   80 Велосипед  UA   web
## 153           Kropyvnytskyi   78 Велосипед  UA   web
## 154              Zaporizhia   77 Велосипед  UA   web
## 155                    Kiev   77 Велосипед  UA   web
## 156                  Dnipro   77 Велосипед  UA   web
## 157                 Poltava   77 Велосипед  UA   web
## 158               Mariupol'   77 Велосипед  UA   web
## 159                  Odessa   76 Велосипед  UA   web
## 160                Mykolaiv   74 Велосипед  UA   web
## 161 Kam'yanets'-Podil's'kyi   72 Велосипед  UA   web
## 162               Vinnytsia   72 Велосипед  UA   web
## 163               Slovyansk   71 Велосипед  UA   web
## 164            Khmelnytskyi   70 Велосипед  UA   web
## 165              Kramatorsk   70 Велосипед  UA   web
## 166                   Rivne   69 Велосипед  UA   web
## 167                 Kherson   67 Велосипед  UA   web
## 168                Zhytomyr   67 Велосипед  UA   web
## 169                   Lutsk   65 Велосипед  UA   web
## 170                 Luhansk   65 Велосипед  UA   web
## 171                Horlivka   64 Велосипед  UA   web
## 172         Ivano-Frankivsk   62 Велосипед  UA   web
## 173                  Kalush   61 Велосипед  UA   web
## 174                 Donetsk   60 Велосипед  UA   web
## 175                    Lviv   59 Велосипед  UA   web
## 176                Makiivka   58 Велосипед  UA   web
## 177                Ternopil   53 Велосипед  UA   web
## 178              Simferopol   52 Велосипед  UA   web
## 179                   Yalta   51 Велосипед  UA   web
## 180              Sevastopol   51 Велосипед  UA   web
## 181              Chernivtsi   49 Велосипед  UA   web
## 182                 Kharkiv  100  Сноуборд  UA   web
## 183         Ivano-Frankivsk   94  Сноуборд  UA   web
## 184                    Kiev   90  Сноуборд  UA   web
## 185                 Poltava   88  Сноуборд  UA   web
## 186                  Dnipro   79  Сноуборд  UA   web
## 187              Chernivtsi   71  Сноуборд  UA   web
## 188              Sevastopol   71  Сноуборд  UA   web
## 189                    Lviv   69  Сноуборд  UA   web
## 190                  Odessa   60  Сноуборд  UA   web
## 191              Simferopol   60  Сноуборд  UA   web
## 192                   Rivne   49  Сноуборд  UA   web
## 193              Zaporizhia   42  Сноуборд  UA   web
## 194                 Donetsk   38  Сноуборд  UA   web
## 195             Polyanytsya  100      Лыжи  UA   web
## 196                 Kharkiv    8      Лыжи  UA   web
## 197                Uzhhorod    7      Лыжи  UA   web
## 198                    Kiev    7      Лыжи  UA   web
## 199                    Sumy    6      Лыжи  UA   web
## 200                  Odessa    6      Лыжи  UA   web
## 201               Chernihiv    5      Лыжи  UA   web
## 202                  Dnipro    5      Лыжи  UA   web
## 203                 Poltava    5      Лыжи  UA   web
## 204                Cherkasy    4      Лыжи  UA   web
## 205               Vinnytsia    4      Лыжи  UA   web
## 206            Khmelnytskyi    4      Лыжи  UA   web
## 207                Zhytomyr    4      Лыжи  UA   web
## 208              Sevastopol    4      Лыжи  UA   web
## 209              Zaporizhia    4      Лыжи  UA   web
## 210                 Donetsk    4      Лыжи  UA   web
## 211              Simferopol    3      Лыжи  UA   web
## 212                Mykolaiv    3      Лыжи  UA   web
## 213              Chernivtsi    3      Лыжи  UA   web
## 214              Kryvyi Rih    3      Лыжи  UA   web
## 215                    Lviv    3      Лыжи  UA   web
## 216         Ivano-Frankivsk    3      Лыжи  UA   web

Інформація за Броварами

test <- gtrends(c("Велосипед", "Сноуборд", "Лыжи"), geo = "UA-32")
plot(test)