Описание набора данных

Набор данных avocado.xlsx содержит данные с сайта Hass Avocado Board о еженедельных объемах продаж и ценах на авокадо сорта “Хасс” за период с января 2015 года по март 2018 года в США.

Авокадо сорта Хасс

Авокадо сорта “Хасс”

avocado <- read_excel('avocado.xlsx') # подключение книги Excel
head(avocado) # вывод небольшой части данных в начале таблицы, чтобы проконтролировать результат загрузки
## # A tibble: 6 x 13
##   date  average_price total_volume plu4046 plu4225 plu4770 total_bags
##   <chr>         <dbl>        <dbl>   <dbl>   <dbl>   <dbl>      <dbl>
## 1 2015…          1.64        1505.  1.27e0  1130.        0       374.
## 2 2015…          1.6         1013.  2.36e1   773.        0       216.
## 3 2015…          1.3         5783.  7.23e2  4221.        0       838.
## 4 2015…          1.73         380.  0.        59.8       0       320 
## 5 2015…          2.32        4801.  8.76e1  4364.        0       350.
## 6 2015…          1.18       22631.  1.32e4  9028.        0       427.
## # ... with 6 more variables: small_bags <dbl>, large_bags <dbl>,
## #   xlarge_bags <dbl>, type <chr>, year <chr>, region <chr>

Описание столбцов набора данных:
- date - дата наблюдения;
- average_price - средняя цена за штуку авокадо;
- total_volume - общий объем продаж авокадо;
- plu4046 - объем продаж авокадо с кодом продукта 4046;
- plu4225 - объем продаж авокадо с кодом продукта 4225;
- plu4770 - объем продаж авокадо с кодом продукта 4770;
- total_bags - объем продаж авокадо в упаковках;
- small_bags - объем продаж авокадо в маленьких упаковках;
- large_bags - объем продаж авокадо в больших упаковках;
- xlarge_bags - объем продаж авокадо в очень больших упаковках;
- type - тип авокадо;
- year - год;
- region - регион продажи.


Задания

Задание 1

Рассчитайте количество строк в наборе данных, медиану, средние, максимальные, минимальные значения по каждой переменной набора данных.

nrow(avocado) # количество строк в наборе данных
## [1] 18249

Далее: min - минимальное значение; median - медиана; mean - среднее значение; max - максимальное значение.

#Для просмотра статистической сводки по всем столбцам таблицы можно воспользоваться функцией summary()
summary(select(avocado, average_price:xlarge_bags)) 
##  average_price    total_volume         plu4046            plu4225        
##  Min.   :0.440   Min.   :      85   Min.   :       0   Min.   :       0  
##  1st Qu.:1.100   1st Qu.:   10839   1st Qu.:     854   1st Qu.:    3009  
##  Median :1.370   Median :  107377   Median :    8645   Median :   29061  
##  Mean   :1.406   Mean   :  850644   Mean   :  293008   Mean   :  295155  
##  3rd Qu.:1.660   3rd Qu.:  432962   3rd Qu.:  111020   3rd Qu.:  150207  
##  Max.   :3.250   Max.   :62505647   Max.   :22743616   Max.   :20470573  
##                                                                          
##     plu4770          total_bags         small_bags         large_bags     
##  Min.   :      0   Min.   :       3   Min.   :       0   Min.   :      0  
##  1st Qu.:      0   1st Qu.:    5102   1st Qu.:    2882   1st Qu.:    132  
##  Median :    185   Median :   39812   Median :   26508   Median :   2665  
##  Mean   :  22840   Mean   :  239836   Mean   :  182465   Mean   :  54437  
##  3rd Qu.:   6243   3rd Qu.:  110939   3rd Qu.:   83534   3rd Qu.:  22091  
##  Max.   :2546439   Max.   :19373134   Max.   :13384587   Max.   :5719097  
##                    NA's   :15         NA's   :27         NA's   :33       
##   xlarge_bags      
##  Min.   :     0.0  
##  1st Qu.:     0.0  
##  Median :     0.0  
##  Mean   :  3119.1  
##  3rd Qu.:   135.8  
##  Max.   :551693.7  
##  NA's   :74
# Часто в процессе анализа требуется отобрать из большой таблицы лишь несколько необходимых столбцов. Это можно сделать с помощью функции `select()` пакета `dplyr`

Задание 2

Рассчитайте общее количество проданных авокадо за рассматриваемый период.

sum(avocado$total_volume) # сумма по всем строкам переменной total_volume
## [1] 15523402593

Задание 3

Рассчитайте среднее количество авокадо в одной упаковке для каждого наблюдения, результат расчета добавьте в набор данных в виде нового столбца.

avocado$mean_volume <- avocado$total_volume/avocado$total_bags # общий объем делить на общее количество упаковок
avocado$mean_volume[1:10] # вывели значения первых десяти строк
##  [1]  4.020622  4.684323  6.898456  1.186937 13.735874 53.040007 13.847195
##  [8]  3.447951  2.905147  5.405486

Задание 4

Исследуйте набор данных на предмет пропущенных значений. В каких переменных есть пропущенные значение и в каком количестве?

# В выведенной таблице к заданию 1 есть ответ на данный вопрос 
# С помощью функции is.na() проверяем, является ли значение неизвестным. Функция is.na() для каждого значения вернет true или false. Далее с помощью функции sum() мы просуммируем значения true, выполнив эту операцию для каждого из столбцов набора данных avocado с помощью функции lapply()

lapply(avocado, FUN = function(x) {sum(is.na(x))})
## $date
## [1] 0
## 
## $average_price
## [1] 0
## 
## $total_volume
## [1] 0
## 
## $plu4046
## [1] 0
## 
## $plu4225
## [1] 0
## 
## $plu4770
## [1] 0
## 
## $total_bags
## [1] 15
## 
## $small_bags
## [1] 27
## 
## $large_bags
## [1] 33
## 
## $xlarge_bags
## [1] 74
## 
## $type
## [1] 0
## 
## $year
## [1] 0
## 
## $region
## [1] 0
## 
## $mean_volume
## [1] 15

Ответ: пропущенные значения есть в следующих переменных: total_bags (15), small_bags(27), large_bags(33), xlarge_bags(74)

Задание 5

Замените пропущенные значения в числовых переменных на 0.

avocado[is.na(avocado)] <- 0 # Замена пропущенных значени в таблице на 0

Задание 6

Визуализируйте распределение значений общего объема продаж total_volume с помощью гистрограммы и ящичной диаграммы. Какой из графиков лучше отображает выбросы?

Выбросы - это, как правило, редкие и сильно отличающиеся от других значения.

# Визуализация распределения на гистограмме
## Видно, что распределение асимметричное и содержит редкие очень большие значения, которые, возможно, являются выбросами
qplot(total_volume, data = avocado, 
      binwidth = 1000000, # ширина интервала
      main = 'Распределение значений общего объема продаж авокадо',
      xlab = 'единиц',
      ylab = 'частота')

# Визуализация распределения на ящичной диаграмме
## На ящичной диаграмме хорошо видны выбросы - значения, удаленные от ящика (квартилей) более чем на 1.5 межквартильных размаха. Она отражает выбросы лучше
qplot(x = "", y = total_volume, data = avocado, 
      geom = 'boxplot',
      main = 'Распределение значений общего объема продаж авокадо',
      ylab = 'единиц',
      xlab = NULL)

Задание 7

Определите границы выбросов для переменной total_volume и удалите из набора данных наблюдения с выбросами. Постройте гистограмму и ящичную диаграмму для полученного набора данных.

Рассчитаем границы интервала допустимых значений:

# Нижняя граница - квантиль 2.5%
min_total_volume <- 
  quantile(avocado$total_volume, probs = 0.025, na.rm = TRUE)

# Верхняя граница - квантиль 97.5%
max_total_volum <-
  quantile(avocado$total_volume, probs = 0.975, na.rm = TRUE)

min_total_volume
##     2.5% 
## 1647.192
max_total_volum
##   97.5% 
## 5793830

удаление (фильтрация) строк, содержащих выбросы (может привести к большой потере данных):

avocado_complete <- 
  filter(avocado, total_volume > min_total_volume & total_volume < max_total_volum)

Сравним исходную и очищенную таблицы:

nrow(avocado) # количество строк в исходной таблице
## [1] 18249
nrow(avocado_complete) # количество строк в новой таблице
## [1] 17335
# Визуализация распределения очищенной от выбросов переменной на гистограмме

qplot(total_volume, data = avocado_complete, 
      binwidth = 1000000, # ширина интервала
      main = 'Распределение значений общего объема продаж авокадо',
      xlab = 'единиц',
      ylab = 'частота')

# Визуализация распределения очищенной от выбросов переменной на ящичной диаграмме
## На ящичной диаграмме хорошо видны выбросы - значения, удаленные от ящика (квартилей) более чем на 1.5 межквартильных размаха. Она отражает выбросы лучше
qplot(x = "", y = total_volume, data = avocado_complete, 
      geom = 'boxplot',
      main = 'Распределение значений общего объема продаж авокадо',
      ylab = 'единиц',
      xlab = NULL)


Справка по базовым функциям 1 и 2