Набор данных 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 - регион продажи.
Рассчитайте количество строк в наборе данных, медиану, средние, максимальные, минимальные значения по каждой переменной набора данных.
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`
Рассчитайте общее количество проданных авокадо за рассматриваемый период.
sum(avocado$total_volume) # сумма по всем строкам переменной total_volume
## [1] 15523402593
Рассчитайте среднее количество авокадо в одной упаковке для каждого наблюдения, результат расчета добавьте в набор данных в виде нового столбца.
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
Исследуйте набор данных на предмет пропущенных значений. В каких переменных есть пропущенные значение и в каком количестве?
# В выведенной таблице к заданию 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)
Замените пропущенные значения в числовых переменных на 0.
avocado[is.na(avocado)] <- 0 # Замена пропущенных значени в таблице на 0
Визуализируйте распределение значений общего объема продаж 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)
Определите границы выбросов для переменной 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)