Skip to content

Commit

Permalink
fix after Timofey's comments
Browse files Browse the repository at this point in the history
  • Loading branch information
agricolamz committed Jul 31, 2024
1 parent bcaf370 commit 44053a4
Show file tree
Hide file tree
Showing 28 changed files with 715 additions and 470 deletions.
12 changes: 6 additions & 6 deletions book/1_introduction_to_r.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Установка R и RStudio

В данной книге используется исключительно R [@r_core_team], так что для занятий понадобятся:
В данном курсе используется исключительно R [@r_core_team], так что для занятий понадобятся:

- R
- [на Windows](https://cran.r-project.org/bin/windows/base/)
Expand All @@ -14,7 +14,7 @@ sudo apt-get install r-base
```

- RStudio --- IDE для R ([можно скачать здесь](https://www.rstudio.com/products/rstudio/download/))
* и некоторые пакеты на R
- и некоторые пакеты на R

Часто можно увидеть или услышать, что R --- язык программирования для "статистической обработки данных". Изначально это, конечно, было правдой, но уже давно R --- это полноценный язык программирования, который при помощи своих пакетов позволяет решать огромный спектр задач. В данной книге используется следующая версия R:

Expand All @@ -30,7 +30,7 @@ sessionInfo()$R.version$version.string |> cat()
- [Jupyter](https://jupyter.org/) ноутбуки;
- [Google Colab](https://colab.research.google.com) (нужно в настройках переключить ядро);
- [VS Code](https://code.visualstudio.com/) --- другое IDE, которое также позволяет работать с R;
- в принципе, в IDE нет нужды, можно работать из терминала, после установки, нужно всего лишь набрать `R`.
- в принципе, в IDE нет нужды, можно работать из терминала, после установки нужно всего лишь набрать `R`.

## Знакомство с RStudio

Expand Down Expand Up @@ -312,7 +312,7 @@ mean(c(1:50, NA), na.rm = TRUE)

## Датафреймы и их индексация

Датафрейм --- это один из основных объектов в R, в котором обычно импортируют и экспортируют табличные данные. Датафрейм --- это собрание векторов одинаковой длинны. Давайте создадим датафрейм:
Датафрейм --- это один из основных объектов в R, который обычно используется для импорта и экспорта табличных данные. Датафрейм --- это собрание векторов одинаковой длинны. Давайте создадим датафрейм:

```{r}
df <- data.frame(name = c("Анна", "Вера", "Михаил"),
Expand Down Expand Up @@ -363,7 +363,7 @@ iris

## Работа с пакетами

Все богатство R находиться в его огромной инфраструктуре пакетов, которые может разрабатывать кто-угодно: от больших компаний, до частных исследователей. Чтобы их установить, нужно использовать команду `install.packages()`. Начнем с установки центрального для курса пакета: `tidyverse`:
Все богатство R заключается в его огромной инфраструктуре пакетов, которые может разрабатывать кто угодно: от больших компаний до частных исследователей. Чтобы их установить, нужно использовать команду `install.packages()`. Начнем с установки центрального для курса пакета: `tidyverse`:

```{r}
#| eval: false
Expand Down Expand Up @@ -447,6 +447,6 @@ write_tsv(df, "orange_circumference_g100.tsv")
write_delim(df, "orange_circumference_g100.zsv", delim = "0")
```

## Как справятся с проблемами
## Как справляться с проблемами

Код не работает очень часто, очень важно внимательно читать ошибки. Если чтение не помогло, то можно скопировать ошибку в поисковик, скорее всего кто-нибудь на Stack Overflow (место, где принято задавать вопрос) или Posit Community (место для вопросов на R и Python) уже сталкивался с вашей проблемой. Кроме того, никто не может написать пакет на R, который пройдет в основной репозиторий CRAN, не задокументировав все функции пакета. В связи с этим имеет смысл искать ответы во вкладке Help в Rstudio, а также в консоли, используя знак вопроса (или два, если ничего не находится) и имя функции, например, `?write_csv` или `??read_xlsx`. wd
14 changes: 7 additions & 7 deletions book/2_data_transformation.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,15 @@ c(1:100, NA) |>

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

Дальше мы посмотрим на фрагмент данных из [исследования издания N+1](https://nplus1.ru/material/2019/06/19/greedy) дразнилки "Жадина-говядина", где исследовались социолингвистические аспекты влияющие на тенденцию к тому или иному продолжению. Переменные `word_1`, `word_2` и `word_3` соотвествуют разным вариантам начала, переменная `type` описывает классификацию, которую варианту дали исследователи, а переменная `n` отвечает за количество этих вариантов в данных.
Дальше мы посмотрим на фрагмент данных из ["Исследования дразнилки "Жадина-говядина" издания N+1](https://nplus1.ru/material/2019/06/19/greedy), где исследовались социолингвистические аспекты влияющие на тенденцию к тому или иному продолжению. Переменные `word_1`, `word_2` и `word_3` соотвествуют разным вариантам начала, переменная `type` описывает классификацию, которую варианту дали исследователи, а переменная `n` отвечает за количество этих вариантов в данных.

```{r}
#| message: false
zhadina <- read_csv("https://raw.githubusercontent.com/agricolamz/daR4hs/main/data/w2_zhadina.csv")
zhadina
```

Первые функции `tidyverse`, которая будет нас интересовать, --- это функции семейства `slice()`. Функция `slice()` позволяет фильтровать нужные строчки датасета по индексу:
Первые функции `tidyverse`, которые будут нас интересовать, --- это функции семейства `slice()`. Функция `slice()` позволяет фильтровать нужные строчки датасета по индексу:

```{r}
zhadina |>
Expand All @@ -67,7 +67,7 @@ zhadina |>
slice(6:25)
```

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

```{r}
new_zhadina <- zhadina |>
Expand Down Expand Up @@ -145,7 +145,7 @@ zhadina |>

## Функция `filter()`

Функция `filter()` позволяет отфильтровыввать строки таблицы по одному или нескольким условиям.
Функция `filter()` позволяет отфильтровывать строки таблицы по одному или нескольким условиям.

```{r}
zhadina |>
Expand Down Expand Up @@ -176,7 +176,7 @@ zhadina |>
filter(nchar(word_3) == 7)
```

Кроме того, условия можно перечислить через запятую (аналог логического и):
Кроме того, условия можно перечислить через запятую (аналог логического "и"):

```{r}
zhadina |>
Expand Down Expand Up @@ -216,7 +216,7 @@ zhadina |>
distinct(word_1, word_2)
```

Функция `arrange()` позволяет отсортировать одну или несколько переменных от меньшего к большему (если нужно наоборот --- используйте функцию `desc()`). Числовые переменные соритруются по значения, а строковые по алфавиту (с учетом особенностей локали):
Функция `arrange()` позволяет отсортировать одну или несколько переменных от меньшего к большему (если нужно наоборот --- используйте функцию `desc()`). Числовые переменные сортируются по значениям, а строковые по алфавиту (с учетом особенностей локали, см. раздел @sec-sorting):

```{r}
zhadina |>
Expand Down Expand Up @@ -279,7 +279,7 @@ zhadina |>

## Функция `across()`

Функция `across()` позволяет применять одну и то же изменение к группе колонок, которые выбираются набором функций сходных с операциями для функции `select()`. Важно отметить, что трансформация обычно описывается функцией, и имя функции обычно пишут без круглых скобок.
Функция `across()` позволяет применять одно и то же изменение к группе колонок, которые выбираются набором функций сходных с операциями для функции `select()`. Важно отметить, что трансформация обычно описывается функцией, и имя функции обычно пишут без круглых скобок.

```{r}
zhadina |>
Expand Down
22 changes: 11 additions & 11 deletions book/4_working_with_strings.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ library(tidyverse)
library(stringi)
```

Мы будем пользоваться в основном пакетами `stingr` и `stringi`, так как они в большинстве случаях удобнее. К счастью, функции этих пакетов легко отличить от остальных: функции пакет `stringr` всегда начинаются с `str_`, а функции пакета `stringi` --- c `stri_`.
Мы будем пользоваться в основном пакетами `stingr` и `stringi`, так как они в большинстве случаях удобнее. К счастью, функции этих пакетов легко отличить от остальных: функции пакета `stringr` всегда начинаются с `str_`, а функции пакета `stringi` --- c `stri_`.

Существует [cheat sheet по `stringr`](https://github.com/rstudio/cheatsheets/raw/master/strings.pdf).

Expand Down Expand Up @@ -126,15 +126,15 @@ tibble(month_name = month.name,
mutate(long_string = str_glue("The {{month}} {month_name} is abbreviated as {month_abb}"))
```

Для разделение строки на подстроки можно использовать функцию `separate()`. Это функция разносит разделенные элементы строки в соответствующие столбцы. У функции три обязательных аргумента: `col` --- колонка, которую следует разделить, `into` --- вектор названий новых столбец, `sep` --- разделитель.
Для разделения строки на подстроки можно использовать функцию `separate()`. Это функция разносит разделенные элементы строки в соответствующие столбцы. У функции три обязательных аргумента: `col` --- колонка, которую следует разделить, `into` --- вектор названий новых столбцов, `sep` --- разделитель.

```{r}
tibble(upper = rev(LETTERS), smaller = letters) |>
mutate(merge = str_c(upper, smaller, sep = "_")) |>
separate(col = merge, into = c("column_1", "column_2"), sep = "_")
```

Кроме того, есть инструмент `str_split()`, которая позволяет разбивать строки на подстроки, но возвращает *список*.
Кроме того, есть инструмент `str_split()`, который позволяет разбивать строки на подстроки, но возвращает *список*.

```{r}
str_split(month.name, "r")
Expand Down Expand Up @@ -195,7 +195,7 @@ tibble(mn = month.name) |>
mutate(mn_new = str_pad(mn, 10, pad = "."))
```

## Сортировка
## Сортировка {#sec-sorting}

Для сортировки существует `str_sort()`:

Expand All @@ -208,7 +208,7 @@ str_sort(unsorted_cyrillic)
str_sort(unsorted_cyrillic, locale = "ru_UA")
```

Список локалей на копмьютере можно посмотреть командой `stringi::stri_locale_list()`. Список всех локалей вообще приведен [на этой странице](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). Еще полезные команды: `stringi::stri_locale_info` и `stringi::stri_locale_set`.
Список локалей на компьютере можно посмотреть командой `stringi::stri_locale_list()`. Список всех локалей вообще приведен [на этой странице](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). Еще полезные команды: `stringi::stri_locale_info` и `stringi::stri_locale_set`.

## Поиск подстроки
Можно использовать функцию `str_detect()`:
Expand Down Expand Up @@ -247,8 +247,8 @@ str_to_sentence(latin)
```

### Выделение подстроки
Подстроку в строке можно выделить двумя способами: по индексам функцией `str_sub()`, и по подстроке функцией `str_png()`.

Подстроку в строке можно выделить двумя способами: по индексам функцией `str_sub()`, и по подстроке функцией `str_png()`.

```{r}
tibble(mn = month.name) |>
Expand All @@ -261,7 +261,7 @@ tibble(mn = month.name) |>
mutate(mutate = str_extract(mn, "r"))
```

По умолчанию функция `str_extract()` возвращает первое вхождение подстроки, соответствующей шаблону. Также существует функция `str_extract_all()`, которая возвращает все вхождения подстрок, соответствующих шаблону, однако возвращает объект типа список.
По умолчанию функция `str_extract()` возвращает первое вхождение подстроки, соответствующей шаблону. Также существует функция `str_extract_all()`, которая возвращает все вхождения подстрок, соответствующих шаблону в виде объекта типа список.

```{r}
str_extract_all(month.name, "r")
Expand All @@ -277,7 +277,7 @@ tibble(mn = month.name) |>
mutate(mutate = str_replace(mn, "r", "R"))
```

Как и другие функции `str_replace()` делает лишь одну замену, чтобы заменить все вхождения подстроки следует использовать функцию `str_replace_all()`:
Как и другие функции, `str_replace()` делает лишь одну замену, чтобы заменить все вхождения подстроки следует использовать функцию `str_replace_all()`:


```{r}
Expand All @@ -287,7 +287,7 @@ tibble(mn = month.name) |>

### Удаление подстроки

Для удаления подстроки на основе шаблона, используется функция `str_remove()` и `str_remove_all()`
Для удаления подстроки на основе шаблона используется функция `str_remove()` и `str_remove_all()`

```{r}
tibble(month.name) |>
Expand All @@ -298,7 +298,7 @@ tibble(month.name) |>

### Транслитерация строк

В пакете `stringi` сууществует достаточно много методов транслитераций строк, которые можно вывести командой `stri_trans_list()`. Вот пример использования некоторых из них:
В пакете `stringi` существует достаточно много методов транслитераций строк, которые можно вывести командой `stri_trans_list()`. Вот пример использования некоторых из них:

```{r}
stri_trans_general("stringi", "latin-cyrillic")
Expand All @@ -314,7 +314,7 @@ stri_trans_general("stringi", "latin-armenian")
- строка, с которой работает функция
- образец (pattern)

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

```{r}
str_view("Я всегда путаю с и c", "c") # я ищу латинскую c
Expand Down
Loading

0 comments on commit 44053a4

Please sign in to comment.