Задание 1

Возьмите встроенный датасет msleep - в нем содержится информация о времени сна и бодрствования различных животных. Больше информации об этом датасете можно узнать в справке ?msleep.

С помощью диаграммы рассеяния изобразите зависимость общей длительности сна (sleep_total) от логарифма веса животного (bodywt). Пояснения:

Сохраните график в подходящем размере и удобном вам формате.

ggplot(msleep) + 
  aes(x = log(bodywt), y = sleep_total, colour = vore) +
  geom_point() +
  scale_colour_discrete(breaks=c('omni', 'insecti', 'herbi', 'carni'),
                        labels=c('Omnivore', 'Insectivore', 'Herbivore', 'Carnivore')) +
  labs(x = "Log of body weight (kg)", y = "Total sleep (h)", title = "Bigger animals sleep less") +
  theme_bw() +
  theme(legend.position = "top",
        legend.title= element_blank(),
        plot.title = element_text(hjust = 0.5))

Задание 2

Возьмите встроенный датасет starwars - в нем содержится информация о персонажах вселенной Звездные Войны. Больше информации об этом датасете можно узнать в справке ?starwars.

Отберите 2 планеты (homeworld), которые являются родиной самого большого количества героев ЗВ. Отберите только тех персонажей, которые происходят с этих двух планет, и постройте график дотплот (с помощью функции geom_point()), который бы показывал вес (mass) персонажей разных рас (species). По оси X - вес тела, по Y - раса (species), каждая точка - один персонаж. Цветом точки покажите гендерную идентичность героя (gender) информацию о расе, размером точки - его рост (height).

Подпишите оси, добавьте название графика и подберите цветовую палитру.

Сохраните график в подходящем размере и удобном вам формате.

starwars %>% 
  drop_na(homeworld, species, gender, mass, height) %>% 
  mutate(homeworld_factor = fct_lump_n(factor(homeworld), n = 2)) %>% 
  filter(homeworld_factor != "Other") %>% 
  ggplot() + 
  aes(x = mass, y = species, fill = gender, size = height) +
  geom_point(shape = 21) +
  labs(x = "Body mass (kg)",
       y = "Species",
       fill = "Gender identity",
       size = "Height (cm)",
       title = "Star Wars characters' weight") +
  theme_bw() +
  theme(legend.position = "right",
        legend.title = element_text(hjust = 0.5),
        plot.title = element_text(hjust = 0.5))

Задание 3

Прочитайте датасет о напитках из Старбакса по ссылке https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-12-21/starbucks.csv.

В этом датасете содержатся столбцы:

Отберите только напитки, подходящие под следующие условия:

С помощью диаграммы рассеяния изобразите зависимость содержание кофеина (caffeine_mg) от калорийности напитка (calories). Цветом обозначьте тип молока.

На графике обозначьте пунктирной линией (используйте geom_hline(..., linetype = "dashed"), например) самое частое (мода) для отобранных напитков значение содержания кофеина. Поменяйте порядок задаваемых геометрических объектов (geom_*), чтобы линия проходила под точками.

Поменяйте отображаемые по осям значения так, чтобы интервал между ними составлял 50. Это можно сделать с помощью scale_x_continuous(breaks = *вектор с отображаемыми значениями*) и scale_y_continuous(breaks = *вектор с отображаемыми значениями*).

Пусть в легенде будут перечислены категории напитков следующим образом:

Подпишите оси, добавьте название графика и подберите цветовую палитру.

Сохраните график в подходящем размере и удобном вам формате.

df <- read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-12-21/starbucks.csv")
## Rows: 1147 Columns: 15
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (4): product_name, size, trans_fat_g, fiber_g
## dbl (11): milk, whip, serv_size_m_l, calories, total_fat_g, saturated_fat_g,...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df_1 <- df %>% 
  filter(milk %in% c(0, 2, 3),
         serv_size_m_l == 473,
         calories != 0,
         caffeine_mg != 0) %>% 
  mutate(milk = as.factor(milk))
caffeine_mg_mode <- mode <- as.numeric(levels(fct_infreq(as_factor(df_1$caffeine_mg)))[1])
df_1 %>% 
  ggplot() +
  aes(x = calories, y = caffeine_mg, colour = milk) +
  geom_hline(yintercept = caffeine_mg_mode, linetype = "dashed") +
  geom_point() +
  scale_x_continuous(breaks = seq(0, max(df$calories), 50)) +
  scale_y_continuous(breaks = seq(0, max(df$caffeine_mg), 50)) +
  labs(x = "KCal",
       y = "Caffeine (mg)",
       colour = "Type of milk",
       title = "Starbucks coffee") +
  scale_colour_discrete(breaks=c(0, 2, 3),
                        labels=c('no milk', '2% milk', 'soy milk')) +
  theme_bw() +
  theme(legend.position = "right",
        legend.title = element_text(hjust = 0.5),
        plot.title = element_text(hjust = 0.5))

Задание 4

Использйуте датасет про напитки из Старбакса из задания 2.

На одном графике постройте гитограмму и плотность распределения содержания сахара во всех напитках. geom_histogram и geom_density преобразовывают ваши данные и отрисовывают либо каунты, либо плотность. Найдите способ, чтобы оба geom_ отрисовывали значения по оси Y согласованно.

Подпишите оси, добавьте название графика. Подберите цветовую палитру.

Сохраните график в подходящем размере и удобном вам формате.

#цвета на графике должны передовать всю ту боль, что вызывает у меня ДЗ по R
graf <- df %>% 
  ggplot() +
  aes(x = sugar_g) +
  geom_histogram(bins = 45, color = "#00FF00", fill = "#FFFF00") +
  geom_density(aes(y = after_stat(count)),
               fill = "#FF0000", alpha = 0.2, color = "#FF00FF") +
  labs(title = "Sugar content in Starbucks drinks", 
       x = "Sugar (g)", y = "Count") + 
  theme_bw() +
  theme(legend.position = "right",
        legend.title = element_text(hjust = 0.5),
        plot.title = element_text(hjust = 0.5))
ggsave("./4.png", plot = graf)
## Saving 7 x 5 in image
graf

Задание 5

Загрузите датасет, содержащий информацию про цветение сакуры в Японии за 1953-2019 года. https://raw.githubusercontent.com/tacookson/data/master/sakura-flowering/sakura-modern.csv.

Изучите датасет! Про него можно прочитать дополнительно, например, здесь: https://github.com/tacookson/data/blob/master/sakura-flowering/README.md.

Информация про датасет:

Визуализируйте, как шел фронт цветения сакуры в Японии в разные годы, с помощью линейного графика - используйте geom_line. По горизонтали отложите года, по вертикали - дату или день начала цветения/полного цвета. Каждая кривая - это один город. Не забудьте сообщить, что вы решили визуализировать (какие переменные), в названиях осей и в названии графика.

Сохраните график в подходящем размере и удобном вам формате.

Примечания:

  1. Кривая - это набор точек, соединенных линиями. Поэтому чтобы точки правильно соединились в кривые по городам, укажите aesthetic group = station_name.
  2. Если вам мешают отсутствующие значения данных, избавьтесь от них.
  3. Чтобы сделать график интереснее, подсветите кривую одного из городов, какой вам больше интересен, например, Kyoto. Сделайте так, чтобы кривая этого города была ярче, чем остальные кривые. Это можно сделать, подобрав цвета или прозрачность. Или и то, и другое :)

Есть несколько способов, как можно “подсветить” одну линию. Предлагаю воспользоваться одним из них или придумать свой. Вариант 1. Разделите датасет на 2: с выбранным городом и с остальными городами. В графике используйте geom_line дважды с этими двумя новыми датасетами (data = ...). Для каждого geom_line укажите свой цвет/прозрачность/что-то еще.

Вариант 2. Создайте новый столбец, где будут 2 значения: ваш город и остальные города. Используйте этот столбец, чтобы задать 2 цвета. Иногда бывает удобно создавать столбец сразу со значениями цветов/уровней прозрачности и др. и напрямую использовать их в качестве aesthetic.

Вариант 3. Поищите R пакеты, которые помогают легко решить эту задачу. Например, есть пакет {gghighlight} (он не входит в {tidyverse}, его нужно устанавливать отдельно).

df <- read_csv("https://raw.githubusercontent.com/tacookson/data/master/sakura-flowering/sakura-modern.csv")
## Rows: 6700 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): station_name
## dbl  (6): station_id, latitude, longitude, year, flower_doy, full_bloom_doy
## date (2): flower_date, full_bloom_date
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
graf <- df %>% 
  mutate(city_alpha = ifelse(station_name == "Tokyo", 1, 0.01)) %>% 
  ggplot() +
  geom_line(lwd = 1) +
  aes(x = year, y = full_bloom_doy, group = station_name, alpha = city_alpha, colour = "red") +
  labs(title = "Full sakura bloom in Tokyo and other Japan cities", 
       x = "Year", y = "Day of year of full bloom") + 
  theme_bw() +
  theme(legend.position = "none",
        legend.title = element_text(hjust = 0.5),
        plot.title = element_text(hjust = 0.5))
ggsave("./5.png", plot = graf)
## Saving 7 x 5 in image
## Warning: Removed 848 rows containing missing values (`geom_line()`).
graf
## Warning: Removed 848 rows containing missing values (`geom_line()`).