Часть 1

  1. Загрузите таблицу с расширением Titanic.csv по ссылке и сохраните ее как df. Посмотрите на нее. Сколько в таблице наблюдений (строк), переменных (столбцов)? Все ли переменные имеют корректный тип? Удалите из таблицы пропущенные значения и сохраните изменения в df.
df <- read.csv("http://math-info.hse.ru/f/2018-19/comm-math/Titanic.csv")
str(df) # все корректно
## 'data.frame':    891 obs. of  12 variables:
##  $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Survived   : int  0 1 1 1 0 0 0 0 1 1 ...
##  $ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
##  $ Name       : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
##  $ Sex        : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
##  $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
##  $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
##  $ Ticket     : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
##  $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
##  $ Cabin      : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
##  $ Embarked   : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
df <- na.omit(df)
  1. Используя функции dplyr, оставьте в базе данных все столбцы, кроме Ticket и Cabin.
library(dplyr)

df <- df %>% dplyr::select(-c(Ticket, Cabin))
  1. Переименуйте столбцы в таблице так, чтобы все названия были записаны с маленькой буквы (dplyr не требуется).
colnames(df) <- tolower(colnames(df))
colnames(df) # изменилось!
##  [1] "passengerid" "survived"    "pclass"      "name"        "sex"        
##  [6] "age"         "sibsp"       "parch"       "fare"        "embarked"
  1. Добавьте в таблицу столбец age_sq, в котором сохранены значения возраста в квадрате. Добавьте столбец female, состоящий из 0 и 1, где 1 соответствует пассажирам женского пола (функция ifelse()).
df <- df %>% mutate(age_sq = age ** 2, female = ifelse(sex == 'female', 1, 0))
  1. Агрегируйте данные по классам (pclass) и посчитайте число пассажиров женского и мужского пола среди пассажиров каждого класса. Посчитайте процент пассажиров женского и мужского пола среди пассажиров каждого класса. (Подсказка: сочетайте group_by() и summarise()).
df %>% group_by(pclass) %>% summarise(n_female = sum(female), 
                                      n_male = length(female) - sum(female))
## # A tibble: 3 x 3
##   pclass n_female n_male
##    <int>    <dbl>  <dbl>
## 1      1       85    101
## 2      2       74     99
## 3      3      102    253
df %>% group_by(pclass) %>% summarise(n_female = sum(female) / length(female) * 100,
                                      n_male = 100 - n_female)
## # A tibble: 3 x 3
##   pclass n_female n_male
##    <int>    <dbl>  <dbl>
## 1      1     45.7   54.3
## 2      2     42.8   57.2
## 3      3     28.7   71.3
  1. Посчитайте число пассажиров, в обращении которых используется слово Mr..
install.packages("stringr")
library(stringr)
sum(str_detect(df$name, "Mr."))
## [1] 511

Часть 2

  1. Установите библиотеку ggplot2() и обратитесь к ней через library().
install.packages("ggplot2")
library(ggplot2)
  1. Постройте гистограмму для значений переменной age для пассажиров 1) первого класса; 2) третьего класса.
# пример для 1 класса

df %>% filter(pclass == 1) %>% ggplot(aes(x = age)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# binwidth - ширина столбца в гистограмме
# ggtitle - заголовок графика

df %>% filter(pclass == 1) %>% ggplot(aes(x = age)) + geom_histogram(binwidth = 5) + ggtitle("1st class")

# fill - цвет заливки графика
# color - цвет границ графика
# theme_bw - общая тема графика, здесь черно-белая

df %>% filter(pclass == 1) %>% ggplot(aes(x = age)) + 
  geom_histogram(binwidth = 5, fill = 'thistle', color = 'darkviolet') + 
  ggtitle("1st class") +
  theme_bw()

# 3 класс
# наведите красоту графику самостоятельно :)
df %>% filter(pclass == 3) %>% ggplot(aes(x = age)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

  1. Постройте сглаженные графики плотности распределения переменной age (geom_density()) по группам в зависимости от пола пассажиров. Графики для пассажиров женского и мужского пола должны быть в разных «окошках» (фасетках).
df %>% ggplot(aes(x = age)) + geom_density(fill = "hotpink") + facet_grid(~sex)