Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.
ggbump, является расширением для ggplot2, который добавит вам функцию geom_bump().
Пример из официальной справки:
library(ggbump)
library(ggplot2)
library(dplyr)
df <- data.frame(country = c(
"India", "India", "India",
"Sweden", "Sweden", "Sweden",
"Germany", "Germany", "Germany",
"Finland", "Finland", "Finland"),
year = c(2011, 2012, 2013,
2011, 2012, 2013,
2011, 2012, 2013,
2011, 2012, 2013),
rank = c(4, 2, 2, 3, 1, 4, 2, 3, 1, 1, 4, 3))
ggplot(df, aes(year, rank, color = country)) +
geom_point(size = 10) +
geom_bump(size = 2)
Результат работы кода можно увидеть на изображении к посту.
Ссылки:
- Определение бамп чарта взял тут
- Узнал про пакет ggbump из статьи "5 hidden gems from gg-packages to level up your dataviz game"
Смотрите также:
- Построение графика водопада в R
- Как создать диаграмму датчик с помощью ggplot2
#заметки_по_Rdplyr, таких как select(), slice(), filter(), mutate() и rename().
#видео_уроки_по_Rcode_folding: hide в шапке Rmarkdown документа.
Пример:
---
title: "Code Collapse Demonstration"
output:
html_document:
code_folding: hide
---
```{r}
#| include = FALSE
library(dplyr)
library(ggplot2)
```
There is a negative correlation between horsepower and miles per gallon.
```{r}
mtcars %>%
ggplot(aes(x = hp, y = mpg)) +
geom_point()
```
#заметки_по_Rtictactoe - являеться консольной реализацией игры крестики нолики на языке R, Играть можно как вдвоём, так и с искусственным интеллектом.
Установка:
install.packages("tictactoe")
Игра:
Пакет содержит три функции:
● ttt_human() - создаёт объект обычного игрок
● ttt_ai() - создаёт объект игрока - искусственного интеллекта
● ttt() - запускает игру
К тому же вы можете указать уровень сложности искусственного интеллекта с помощью аргумента level:
ttt(ttt_human(), ttt_ai(level = 4))Приведённый выше код запустит игру, в которой первым будет ходить человек, вторым искусственный интеллект, при этом уровень сложности установлен 4, максимально доступный уровень сложности 5. После запуска функции
ttt() в консоль будет выведено игровое поле, и вы можете совершить ход введя координаты:
> ttt(ttt_human(), ttt_ai())
A B C
------
1| . . .
2| . . .
3| . . .
Player 1 (no name) to play
choose move (e.g. A1) > A1
action = A1
A B C
------
1| X . .
2| . . .
3| . . .
Player 2 (ttt AI) to play
action = C1
A B C
------
1| X . O
2| . . .
3| . . .
Player 1 (no name) to play
choose move (e.g. A1) > B2
action = B2
A B C
------
1| X . O
2| . X .
3| . . .
Player 2 (ttt AI) to play
action = B1
A B C
------
1| X O O
2| . X .
3| . . .
Player 1 (no name) to play
choose move (e.g. A1) > C3
action = C3
game over
A B C
------
1| X O O
2| . X .
3| . . X
won by Player 1 (no name)!
#заметки_по_R{.tabset}. При его применении все подзаголовки раздела будут преобразованы во вкладки (пример можно увидеть на изображении к посту).
Пример Rmarkdown:
---
title: "Tabset Demonstration"
output: html_document
---
```{r}
#| include = FALSE
library(dplyr)
library(ggplot2)
```
There is a negative correlation between horsepower and miles per gallon.
## Tab {.tabset}
### Plot
```{r}
mtcars %>%
ggplot(aes(x = hp, y = mpg)) +
geom_point()
```
### Table
```{r}
#| collapse = TRUE
mtcars %>%
glimpse()
```
#заметки_по_Rlivecode — пакет, который позволяет транслировать локальный документ R (или любой другой текстовый) через Интернет и предоставлять оперативные обновления по мере его редактирования.
Установка:
remotes::install_github("rundel/livecode")
Использование:
Открываете в RStudio свой скрипт, либо любой другой текстовый файл, и в консоли выполняете следующую команду:
server = livecode::serve_file()
#> ✔️ Started sharing 'example.R' at 'http://192.168.1.128:30000'.
#> ✖️ The current ip address ('192.168.1.128') for the server is private, only users on the same local network are likely to be able to connect.
После чего откроется браузер, в котором будет транслироваться ваш документ из RStudio в режиме реального времени. Единственным ограничением является то, что ссылку могут открыть только, те кто находятся в вашей же сети, например подключены к вашему wifi.
Отправка сообщений:
Так же вы можете отправить в браузер сообщения:
server$send_msg("Hello World!", type = "success")
server$send_msg("Oh no!\n\n Something bad has happened.", type = "error")
Остановить трансляцию:
Для остановки трансляции используйте следующую команду:
server$stop()#заметки_по_R
FourScores является игрой, в которой могут играть как человек против человека так и человек против искусственного интелекта. FourScores основан на настольной игре "Собери Четверку" (Connect 4).
Цель игры — расположить раньше соперника по горизонтали, вертикали или диагонали четыре фишки своего цвета подряд.
library(FourScores)
# запускаем игру
FourScores(
rows = 5,
columns = 5,
AI = T,
AIstrength = 0,
AIplayernumber = 1,
PlayerNames = c("PC", "Human")
)
Аргументы функции FourScores():
● rows - количество строк в игровом поле;
● columns - количество столбцов в игровом поле;
● AI - играть против искусственного интелекта;
● AIstrength - количество ходов, которые будет моделировать ИИ;
● AIplayernumber - целое число: 0 или 1: должен ли ИИ быть игроком 1 или игроком 2;
● MACuser - на некоторых компьютерах, отличных от Mac, для этого параметра можно установить значение FALSE, чтобы использовать мышь на графическом устройстве;
● PlayerNames - вектор содержащий имена игроков;
● getnewnames - надо ли запрашивать новые имена при перезапуске игры;
● PlayerColors - цвета фишек игроков;
● getnewcolors - надо ли запрашивать новые цвета фишек игроков при перезапуске игры;
#заметки_по_Rtidyselect — это низкоуровневый пакет, обеспечивающий основу для контекстов выбора в функциях tidyverse. Контекст выбора — это аргумент, подобный cols в pivot_longer(), или набор аргументов, как ... в таких функциях как select(). Т.е. даже если напрямую сам tidyselect вы не используете, то косвено вы его используете при манипуляции данных в dplyr и tidyr.
Обновляться до tidyselect 1.2.0 рекомендуется после выпуска dplyr 1.1.0, который планируется на конец октября.
Основные изменения:
1. Использование вектор имён для указания списка столбцов без all_of() и any_of()
О функциях all_of() и any_of() я рассказывал в одном из своих видео уроков, найти его можно по ссылке. Если вкратце то эти функции позволяют вам использовать вектор имён для выбора столбцов, например внутри функции dplyr::select():
● all_of() - выбирает столбцы по именам указанным в векторе, и возвращает ошибку, если какой то из указанных столбцов отсутствует в таблице.
● any_of() - выбирает столбцы по именам указанным в векторе, если какой то из указанных столбцов отсутствует в таблице, он просто будет проигнорирован.
В новой версии tidyselect обращение к столбцам из вектора имён возможно только с использованием этих функций. Сделано это с целью устранения несогласованности между обращения к переменным глобального окружения и локальным переменных таблицы.
В приведённом ниже примере мы создаём новую глобальную переменную vars со списком имён нужных нам столбцов. После мы создаём локальную переменную в таблице с таким же именем, которая просто хранит номер строки.
Неоднозначность старого подхода при выборе столбцов из вектора имён была в том, что по коду не очевидно, мы хотим обратиться для выбора столбцов к списку имён из глобальной переменной vars, или получить таблицу с одним столбцом vars.
library(tidyverse)
my_data <- mtcars |> mutate(vars = 1:n())
vars <- c("cyl", "am")
my_data |> select(all_of(vars)) |> glimpse()
Rows: 32
Columns: 2
$ cyl <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, 4, 4, 4, 8, 6, 8, 4
$ am <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1
Мы получили таблицу с двумя столбцами, перечисленными в глобальной переменной vars.
my_data |> select(vars) |> glimpse() Rows: 32 Columns: 1 $ vars <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32А так, мы получили таблице с одним столбцом
vars, таким образом разработчики устранили описанную выше неоднозначность.
2. Использование .data$colname для обращение с локальным переменным таблицы
Местоимение .data — это удобный способ программирования с функциями маскирования данных, такими как mutate() и filter(). Подробнее о нём рассказано в статье "Программирование с dplyr".
Пример использования:
var <- "am" mtcars |> transmute(am = .data[[var]] * 10) |> glimpse() mtcars |> mutate(.data$am * 2) |> glimpse()Начиная с версии
tidyselect 1.2.0, в связи с описанными выше рекомендациями по использованию функций all_of() и any_of() использование местоимение .data становится устаревшим, вместо него обращайтесь локальным переменным таблицы через указанные функции, или просто прописав в кавычках название нужного вам столбца:
var <- "am"
mtcars |> select(all_of(var)) |> glimpse()
#> Rows: 32
#> Columns: 1
#> $ am <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,…
mtcars |> select("am") |> glimpse()
#> Rows: 32
#> Columns: 1
#> $ am <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,…
Ссылки:
- Информация заимствована из статьи "tidyselect 1.2.0"
#заметки_по_Rggplot2 является одним из наиболее популярных пакетов в языке R, и одним из мощнейших средств визуализации данных. Данный пакет реализует грамматику графики описанную Лэландом Вилкинсоном в книге “The Grammar of Graphics“. Идея грамматики графики заключается в построении графиков слоями, подобно работе в графических редакторов вроде Photoshop.
Т.е. у вас есть три основные компонента:
● Данные, которые необходимо визуализировать;
● Геометрии, типы графиков, функции семейства geom_*();
● Эстетики, настройки слоёв, функция aes().
В канале довольно много публикаций посвящены ggplot2, да и вряд ли вы впервые слышите об этом пакете. Сам я его использую на протяжении многих лет, но только недавно узнал, о том, что можно получить дефолтные настройки эстетики для каждой геометрии. Все эти настройки хранятся в специальных объектах Geom*$default_aes.
library(ggplot2) GeomLine$default_aes #> Aesthetic mapping: #> * `colour` -> "black" #> * `linewidth` -> 0.5 #> * `linetype` -> 1 #> * `alpha` -> NAСсылки: - узнал об этом из твита #заметки_по_R
reactable:
- формирование основы таблицы;
- возможности глобальных настроек и настроек столбцов;
- возможности глобальных настроек и настроек столбцов;
- группировка и аггрегирование ячеек;
- некоторые JavaScript опции.
Содержание:
● Введение
● Построение интерактивных таблиц
● Русификация таблиц
● Глобальные настройки таблицы
● Настройка столбцов в таблицах
● Тепловые карты
● Группировка ячеек
● Динамический пересчет суммы
● Условное форматирование
● Заключение
#статьи_по_R