Часть 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)
- Используя функции
dplyr
, оставьте в базе данных все столбцы, кроме Ticket
и Cabin
.
library(dplyr)
df <- df %>% dplyr::select(-c(Ticket, Cabin))
- Переименуйте столбцы в таблице так, чтобы все названия были записаны с маленькой буквы (
dplyr
не требуется).
colnames(df) <- tolower(colnames(df))
colnames(df) # изменилось!
## [1] "passengerid" "survived" "pclass" "name" "sex"
## [6] "age" "sibsp" "parch" "fare" "embarked"
- Добавьте в таблицу столбец
age_sq
, в котором сохранены значения возраста в квадрате. Добавьте столбец female
, состоящий из 0 и 1, где 1 соответствует пассажирам женского пола (функция ifelse()
).
df <- df %>% mutate(age_sq = age ** 2, female = ifelse(sex == 'female', 1, 0))
- Агрегируйте данные по классам (
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
- Посчитайте число пассажиров, в обращении которых используется слово
Mr.
.
install.packages("stringr")
library(stringr)
sum(str_detect(df$name, "Mr."))
## [1] 511
Часть 2
- Установите библиотеку
ggplot2()
и обратитесь к ней через library()
.
install.packages("ggplot2")
library(ggplot2)
- Постройте гистограмму для значений переменной 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`.

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