---
title       : Язык R и анализ данных с примерами на Python
subtitle    : 14 сентября 2018
author      : 
job         : 
framework   : io2012        # {io2012, html5slides, shower, dzslides, ...}
highlighter : highlight.js  # {highlight.js, prettify, highlight}
hitheme     : tomorrow      # 
widgets     : [mathjax, quiz, bootstrap]            # {mathjax, quiz, bootstrap}
mode        : selfcontained # {standalone, draft}
knit        : slidify::knit2slides

---
## Данные о качестве воздуха

```{r}
head(airquality)
dim(airquality)
```

---

## В чем проблема?

```{r}
mean (airquality$Ozone)
```

---

## Работа с отсутствующими данными 

### NA - пропущенное значение: is.na()

### NaN - результат недопустимой арифметической операции: is.nan()

### NULL - отсутствие субъекта: is.null()

---

## Работа с пропущенными данными

### Не учитывать пропущенные данные

```{r}
mean(airquality$Ozone, na.rm = T)
```

### Удалить строки с пропущенными данными

```{r}
air <- na.omit (airquality)
dim (air)
mean(air$Ozone)
```

---

## Работа с пропущенными данными

```{r}
is.na(airquality$Ozone)
```

---

## Работа с пропущенными данными

```{r}
sum(is.na(airquality$Ozone))
```

---

## Работа с пропущенными данными

```{r}
which(is.na(airquality$Ozone))
anyNA(airquality$Ozone)
```

---

## NaN

```{r}
0/0
```

---

## Удаление столбцов

```{r}
head(air,3)
air$Ozone = NULL
head(air,3)
```

---

## Факторы

### Категориальные данные

```{r}
f <- factor(c("yes", "yes", "no", "yes", "no"))
f
levels(f) 
```

---

## Факторы

```{r}
levels(f) <- c(levels(f), "maybe") 
table(f) 
```

---

## Факторы

### Упорядочивание уровней факторов

```{r}
f <- factor(c("yes", "yes", "no", "yes","no"), levels = c("yes", "no")) 
f
```

---

## Факторы

```{r}
boxplot(mtcars$mpg ~ mtcars$cyl)
```

---

## Матрицы

### Внешне похожи на data frame

### Вектор с атрибутом dim

### Все элементы одного типа

---

## Матрицы

```{r}
m <- matrix(c(1:6), nrow=2, ncol=3)
m
m <- matrix(c(1:6), nrow=2, ncol=3,byrow=T)
m
```

---

## Матрицы

```{r}
as.matrix(1:3)
```

---

## Матрицы

```{r}
m
m[2,3]
```

---

## Матрицы

```{r}
m[2,]
m[,3]
```

---

## Матрицы

```{r}
m
m[2,3] = 1
m
```

---

## Матрицы

### Создать пустую матрицу

```{r}
m <- matrix(nrow=2, ncol=3)
m
dim(m)
```

---

## Матрицы

```{r}
v <- 1:6
dim(v)
dim(v) <- c(2,3)
v
is.matrix(v)
```

---

## Матрицы

```{r}
a <- c(1,2,3)
b <- c(7,8,9)
cbind(a,b)
rbind(a,b)
```

---

## Матрицы

```{r}
m
rownames(m) <- c("r1","r2")
colnames(m) <- c("c1","c2","c3")
m
```

---

## Задание

### Создать матрицу, состоящую из 100 чисел, принадлежащих нормальному распределению, и 20 строк

### Замените любое значение в матрице на NA

### Выведите количество строк, не содержащих NA

---

## Списки

### Можно хранить данные разных типов

```{r}
L <- list("A", c(1,2), 30)
L
```

---

## Списки

```{r}
L1 <- list (L, 40)
L1
```

---

## Списки

```{r}
L [[4]] = 'new_element'
L
```

---

## Списки

```{r}
L [3]
L [[3]]
```

---

## Списки

```{r}
L1 [[1]]
L1 [[1]] [[2]]
```

---

## Списки

```{r}
L <- list (10,20)
L$abc <- 123
L
names(L)
```

---

## Списки

```{r}
L[[3]]
L$abc
L[["abc"]]
```

---

## Задание

### Создать именованный список, элементами которого будут: 
1. числовой вектор
2. список, состоящий из 3 элементов, одним из которых будет вектор длиной 3
3. число
4. строка

### Вывести любое значение строкового вектора из предыдущего задания, пункт 2

---

## Установка пакетов

### install.packages ("dplyr")

### library (dplyr)

```{r}
library (dplyr)
```

---

## Select

```{r}
head(airquality,3)
head (select(airquality, Wind, Temp), 3)
```

---

## Select

```{r}
head(airquality,3)
head (select(airquality, -Wind), 3)
```

---

## Select

```{r}
head(airquality,3)
head(select(airquality, Temp:Day))
```

---

## Select

```{r}
head(airquality,3)
head(select(airquality, starts_with("T")))
```

---

## Filter

```{r}
air_filt<-filter(airquality, Temp > 70  & Month == 6)
head(air_filt)
```

---

## Filter

```{r}
unique(airquality$Month)
a <- filter(airquality, Month %in% c(7,8))
unique(a$Month)
```

---

## Задание

### Как еще можно выбрать столбцы "Wind" и "Temp" из таблицы airquality?

### Как еще можно отфильтровать таблицу airquality по значению столбца "Temp"?

---

## Mutate

### Добавление нового столбца

```{r}
air_mut <- mutate(airquality, Temp_new = (Temp - 32) / 9)
air_mut <- mutate(air_mut, Temp_r = round(air_mut$Temp_new,2))
head(air_mut,4) 
```

---

## Transmute

```{r}
a <- transmute(airquality, Temp_new = (Temp - 32) / 9)
head(a,4)
dim(a)
```

---

## Summarise

```{r}
summarise(airquality, mean(Temp, na.rm = TRUE))
mean(airquality$Temp, na.rm = TRUE)
```

---

## Summarise

```{r}
summarise(airquality, Mean = mean (Temp, na.rm = TRUE),
                      Min = min (Temp),
                      Max = max (Temp))
```

---

## Group by

```{r}
summarise(group_by(airquality, Month), mean(Temp,na.rm = TRUE)) 
```

---

## Sample

```{r}
sample_n(airquality, size = 5) 
sample_frac(airquality, size = 0.05) 
```

---

## Count

```{r}
count(airquality, Month) 
```

---

## Arrange

```{r}
air_sort<-arrange(airquality, desc(Month), Day) 
head(air_sort,4)
```

---

## Объединение двух таблиц

```{r}
a <- data.frame(id = c(1,2,3,4),
                name = c('A', 'B', 'C', 'D'),
                f1 = c('var1','var2','var2','var4'))

b <- data.frame(id = c(1,2,5,6),
                year = c(1990, 1995, 1998, 2000))
```

---

## Объединение двух таблиц

```{r}
a
b
```

---

## Объединение двух таблиц; inner_join

```{r}
df <- inner_join(a, b, by = c('id'))
df
```

---

## Объединение двух таблиц; left_join

```{r}
df <- left_join(a, b, by = c('id'))
df
```

---

## Объединение двух таблиц; right_join

```{r}
df <- right_join(a, b, by = c('id'))
df
```

---

## Конвеер

```{r}
airquality %>% filter(Month != 5) %>%
group_by(Month) %>% summarise(mean(Temp, na.rm = TRUE))
```

---

## Без конвеера

```{r}
filteredData <- filter(airquality, Month != 5)
groupedData <- group_by(filteredData, Month)
summarise(groupedData, mean(Temp, na.rm = TRUE))
```

---

## Основные понятия

### Вектор, матрица, список, data frame в R

### Конвеер
