В пакете datasets есть некоторые наборы данных, с которыми мы будем работать. Давайте установим и подгрузим пакет. А также подгрузим пакеты для работы с наборами данных.

# install.packages('datasets')
# install.packages('tibble')
# install.packages('ggplot2')
# install.packages('psych')
library(datasets)
library(tibble)
library(ggplot2)
library(psych)

Задание №1

Рассмотрим датасет trees.

data(trees)

Чтобы узнать о нем побольше, выспользуемся справкой.

?trees

Видим, что перед нами data frame. Преобразуем его в tibble.

trees <- as_tibble(trees)
  1. Посмотрите структуру данных и опишите какие типы переменных в нем присутствуют.
str(trees)
## tibble [31 × 3] (S3: tbl_df/tbl/data.frame)
##  $ Girth : num [1:31] 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
##  $ Height: num [1:31] 70 65 63 72 81 83 66 75 80 75 ...
##  $ Volume: num [1:31] 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...

Имеется 3 типа переменных, и все они числовые.

  1. Посмотрите на 15 первых элементов
head(trees, n = 15)
  1. Выведите названия всех переменных и посмотрите на значение элементов 6-30 по всем переменным.
trees[6:30, ]
  1. Выведите описательные статистики по всем переменным.
summary(trees)
##      Girth           Height       Volume     
##  Min.   : 8.30   Min.   :63   Min.   :10.20  
##  1st Qu.:11.05   1st Qu.:72   1st Qu.:19.40  
##  Median :12.90   Median :76   Median :24.20  
##  Mean   :13.25   Mean   :76   Mean   :30.17  
##  3rd Qu.:15.25   3rd Qu.:80   3rd Qu.:37.30  
##  Max.   :20.60   Max.   :87   Max.   :77.00
  1. Давайте перекодируем наши данные!
    • Cоздадим дамми-переменную для диаметра дерева: разделив выборку на две части, и зашифруем как TRUE, если диаметр больше среднего и FALSE, если меньше среднего и сохраним в новую переменную Wide_Tree
    • Cоздадим дамми-переменную для высоты дерева: разделив выборку на две части, и зашифруем как TRUE, если диаметр больше медианного значения и FALSE, если меньше него и сохраним в новую переменную Tall_Tree.
trees$Wide_Tree <- trees$Girth > mean(trees$Girth)
trees$Tall_Tree <- trees$Height > median(trees$Height)
head(trees)
  1. Давайте посмотрим, сколько в каждой из категорий попало наблюдений.
table(trees$Wide_Tree)
## 
## FALSE  TRUE 
##    17    14
table(trees$Tall_Tree)
## 
## FALSE  TRUE 
##    16    15
  1. Выведем более подробные статистики для нашего датасета.

Используем функцию describe из пакета psych.

describe(trees[,1:3])
  1. А теперь посмотрим на статистики, разделив по подгруппам по переменной Wide_Tree.
describeBy(trees[,1:3], group = trees$Wide_Tree)
## 
##  Descriptive statistics by group 
## group: FALSE
##        vars  n  mean   sd median trimmed  mad  min  max range  skew kurtosis
## Girth     1 17 10.92 1.31   11.1   10.96 0.59  8.3 12.9   4.6 -0.59    -0.40
## Height    2 17 74.35 6.28   75.0   74.40 7.41 63.0 85.0  22.0 -0.16    -1.03
## Volume    3 17 19.12 5.77   19.7   18.73 3.71 10.2 33.8  23.6  0.38     0.50
##          se
## Girth  0.32
## Height 1.52
## Volume 1.40
## ------------------------------------------------------------ 
## group: TRUE
##        vars  n  mean    sd median trimmed   mad  min  max range  skew kurtosis
## Girth     1 14 16.08  2.21  16.15   15.93  2.74 13.3 20.6   7.3  0.34    -1.16
## Height    2 14 78.00  6.10  80.00   78.42  3.71 64.0 87.0  23.0 -0.63    -0.25
## Volume    3 14 43.59 15.12  40.45   42.37 17.87 24.9 77.0  52.1  0.52    -0.73
##          se
## Girth  0.59
## Height 1.63
## Volume 4.04

Задание №2

А теперь рассмотрим датасет swiss.

data(swiss)

Чтобы узнать о нем побольше, выспользуемся справкой.

?swiss

Видим, что перед нами data frame. Преобразуем его в tibble.

swiss <- as_tibble(swiss)
  1. Посмотрим на структуру данных.
str(swiss)
## tibble [47 × 6] (S3: tbl_df/tbl/data.frame)
##  $ Fertility       : num [1:47] 80.2 83.1 92.5 85.8 76.9 76.1 83.8 92.4 82.4 82.9 ...
##  $ Agriculture     : num [1:47] 17 45.1 39.7 36.5 43.5 35.3 70.2 67.8 53.3 45.2 ...
##  $ Examination     : int [1:47] 15 6 5 12 17 9 16 14 12 16 ...
##  $ Education       : int [1:47] 12 9 5 7 15 7 7 8 7 13 ...
##  $ Catholic        : num [1:47] 9.96 84.84 93.4 33.77 5.16 ...
##  $ Infant.Mortality: num [1:47] 22.2 22.2 20.2 20.3 20.6 26.6 23.6 24.9 21 24.4 ...
  1. Посмотрим на последние 3 элемента.
tail(swiss, n = 3)
  1. Выведем статистики по всем переменным.
summary(swiss)
##    Fertility      Agriculture     Examination      Education    
##  Min.   :35.00   Min.   : 1.20   Min.   : 3.00   Min.   : 1.00  
##  1st Qu.:64.70   1st Qu.:35.90   1st Qu.:12.00   1st Qu.: 6.00  
##  Median :70.40   Median :54.10   Median :16.00   Median : 8.00  
##  Mean   :70.14   Mean   :50.66   Mean   :16.49   Mean   :10.98  
##  3rd Qu.:78.45   3rd Qu.:67.65   3rd Qu.:22.00   3rd Qu.:12.00  
##  Max.   :92.50   Max.   :89.70   Max.   :37.00   Max.   :53.00  
##     Catholic       Infant.Mortality
##  Min.   :  2.150   Min.   :10.80   
##  1st Qu.:  5.195   1st Qu.:18.15   
##  Median : 15.140   Median :20.00   
##  Mean   : 41.144   Mean   :19.94   
##  3rd Qu.: 93.125   3rd Qu.:21.70   
##  Max.   :100.000   Max.   :26.60
  1. Построим гистограммы распределения для детской смертности и для процента католиков в кантоне.
ggplot(swiss, aes(x = Infant.Mortality)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(swiss, aes(x = Catholic)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

  1. Построим диаграмму рассеяния между образованием призывников и оценками за итоговую аттестацию призывников.
ggplot(swiss, aes(x = Education, y = Examination)) +
  geom_point()

  1. Построим диаграмму рассеяния между процентом населения, занятого сельским хозяйством и образованием призывников.
ggplot(swiss, aes(x = Agriculture, y = Education)) +
  geom_point()