Skip to content

Commit

Permalink
update 2.
Browse files Browse the repository at this point in the history
  • Loading branch information
agricolamz committed Jul 31, 2024
1 parent 44053a4 commit 3b279d3
Show file tree
Hide file tree
Showing 5 changed files with 2,950 additions and 129 deletions.
34 changes: 26 additions & 8 deletions book/2_data_transformation.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ tibble(x = 1:100,

Мы будем использовать `tibble()` для саздание таблиц, но чаще всего мы будем считывать данные при помощи функций `read_csv()`, `read_tsv()` и прочих, которые по умолчанию преобразуют таблицу в формат `tibble`.


## Использование конвеера (пайпа)

В нашем коде мы часто будем использовать знаки конвеера (или пайпа): `|>` (также можно встретить популярный ранее `%>%`). Конвеер призван показывать последовательность действий. Сочетание клавиш для написание конвеера: `Ctrl/Cmd + M`.
Expand Down Expand Up @@ -251,6 +252,8 @@ zhadina |>

## Функция `group_by() |> summarise()` и `group_by() |> mutate()`



```{r}
zhadina |>
group_by(type) |>
Expand Down Expand Up @@ -313,30 +316,45 @@ zhadina |>

## Функции семейства `pivot_...()`

Основная концепция пакет `tidyverse` строится вокруг понятия опрятный формат (tidy data). Опрятные данные означает приведение табличных данных к такому формату, в котором:

- Каждая переменная имеет собственный столбец
- Каждый наблюдение имеет собственную строку
- Каждое значение имеет свою собственную ячейку

Такое представление данных делает любые трансформации и визуализацию делом нескольких строк.

Однако данный подход не дает четких инструкций по поводу того, что делать с наблюдениями похожего типа, которые сделаны по поводу одной единицы. Рассмотрим на примере [данных](https://raw.githubusercontent.com/agricolamz/daR4hs/main/data/w2_india_languages.csv) количества носителей разных языков Индии:

```{r}
india_langauges_wide <- read_csv("https://raw.githubusercontent.com/agricolamz/daR4hs/main/data/w2_india_languages.csv")
india_langauges_wide
```

Сейчас данные в так называемом **широком** формате. Хинди в датасете встречается единожды, но значения сколько носителей выучили его как первый/второй/третий/все вместе записаны в виде отдельных столбцов.

```{r}
india_langauges_wide |>
pivot_longer(names_to = "L", values_to = "value", n_L1_sp:n_all_sp)
```

Теперь данные представлены в длинном формате, который удобен для визуализации и каких-то трансформаций. Хинди встречается в датасете четырежды, однако информация про то какая группа носителей имеется в виду записана в переменную `L`. Более того, информация в столбце `n_all_sp` изначальна была лишней: эта инфомрация уже содержится как сумма всех остальных столбцов. Мы можем отфильтровать значения `n_all_sp` и получить их снова:

```{r}
india_langauges_wide |>
pivot_longer(names_to = "L", values_to = "value", starts_with("n_")) |>
filter(L != "n_all_sp") |>
group_by(L) |>
summarise(sum = sum(value),
mean = mean(value))
```

Функция `pivot_wider()` позволяет вновь перевести данные в широкий формат, который удобен для представления данных людям:

```{r}
india_langauges_wide |>
pivot_longer(names_to = "L", values_to = "value", starts_with("n_")) |>
filter(L != "n_all_sp") ->
india_langauges_long
india_langauges_long |>
pivot_wider(names_from = "L", values_from = "value")
india_langauges_long |>
slice_sample(n = 30) |>
pivot_wider(names_from = "L", values_from = "value", values_fill = 0)
```

## Функции семейства `bind_...()`
Expand Down
Loading

0 comments on commit 3b279d3

Please sign in to comment.