---
title: "Практика 4"
output: html_document
date: "2023-09-22"
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Начало работы

### Шаг 1

Подгрузим нужные пакеты.

```{r message=FALSE, warning=FALSE}
library(tidyverse)
```


### Шаг 2

Прочитаем данные. Те же данные о рецептах, что были в квизе.

```{r message=FALSE}
recipes <- read_tsv("https://raw.githubusercontent.com/kirushka/datasets/main/food_recipes/food_recipes.tsv")

glimpse(recipes)
```

### Шаг 3

Посчитаем общее время приготовления как сумму prep_time и cook_time.

```{r}
recipes_mod <- recipes %>% 
  # Получаем длительность в минутах и переводим в числовые данные
  mutate(
    prep_time_m = str_extract(prep_time, "\\d+"),
    prep_time_m = as.numeric(prep_time_m),
    cook_time_m = str_extract(cook_time, "\\d+"),
    cook_time_m = as.numeric(cook_time_m)) %>% 
  mutate(total_time = prep_time_m + cook_time_m)
```


## Точковая диаграмма

### Шаг 1

Отрисуем точковую диаграмму rating ~ total_time.

```{r}
ggplot(
  recipes_mod, 
  aes(x = total_time, y = rating)) +
  geom_point()
```


### Шаг 2

Попробуем разные варианты записи кода для этого графика.

```{r eval=FALSE}
recipes_mod %>% 
  ggplot(
    aes(x = total_time, y = rating)) +
  geom_point()

recipes_mod %>% 
  ggplot() +
  aes(x = total_time, y = rating) +
  geom_point()

recipes_mod %>% 
  ggplot() +
  geom_point(aes(x = total_time, y = rating))
```


### Шаг 3

Добавим цветовые обозначения для кухонь мира (cuisine).

```{r}
ggplot(
  recipes_mod, 
  aes(x = total_time, y = rating, color = cuisine)) +
  geom_point()
```

### Шаг 4

Изменим цветовую схему.

```{r}
ggplot(
  recipes_mod, 
  aes(x = total_time, y = rating, color = cuisine)) +
  geom_point(alpha = 0.5, size = 2) +
  scale_color_brewer(palette = "Set1")
```

### Шаг 4

Изменим тему графика и добавим подписи.

```{r}
ggplot(
  recipes_mod, 
  aes(x = total_time, y = rating, color = cuisine)) +
  geom_point(alpha = 0.5, size = 2) +
  scale_color_brewer(palette = "Set1") +
  labs(
    x = "Общее время приготовления, мин",
    y = "Рейтинг",
    color = "Кухня",
    title = "Долго еще стоять у плиты?") +
  theme_classic() +
  theme(
    legend.position = "top",
    legend.text = element_text(size = 12),
    plot.title = element_text(hjust = 0.5),
    axis.text = element_text(color = "black", size = 10)
  )
```


## Гистограмма

### Шаг 1

Отрисуем гистограмму распределения числа голосов (vote_count).

```{r}
recipes_mod %>% 
  ggplot(aes(x = vote_count)) +
  geom_histogram(binwidth = 1000) 
```

### Шаг 2

Поскольку распределение получилось сдвинутое к 0, можем логарифмировать ось X.

```{r}
recipes_mod %>% 
  ggplot(aes(x = vote_count)) +
  geom_histogram() +
  scale_x_log10()
```

### Шаг 3

Разобъем гистограмму на 4 по кухням мира. По умолчанию получается стековая гистограмма.

```{r}
recipes_mod %>% 
  ggplot(aes(x = vote_count, fill = cuisine)) +
  geom_histogram(color = "black") +
  scale_x_log10()
```

### Шаг 4

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

```{r}
recipes_mod %>% 
  ggplot(aes(x = vote_count, fill = cuisine)) +
  geom_histogram(color = "black", alpha = 0.3, position = "identity") +
  scale_x_log10()
```

### Шаг 4

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

```{r}
recipes_mod %>% 
  ggplot(aes(x = vote_count, fill = cuisine)) +
  geom_histogram(color = "black") +
  scale_x_log10() +
  facet_wrap(vars(cuisine))
```


## Ящик с усами

### Шаг 1

Отрисуем распределение общего времени приготовления в виде ящика с усами. Но один ящик - это скучно.

```{r}
recipes_mod %>% 
  ggplot(aes(y = total_time)) +
  geom_boxplot()
```

### Шаг 2

Разделим ящик на 4 - по кухням мира.

```{r}
recipes_mod %>% 
  ggplot(aes(y = total_time, x = cuisine, fill = cuisine)) +
  geom_boxplot() +
  theme(legend.position = "none")
```
